← 학습 카테고리

Learn

Airflow

151개 모듈 · 현재 1번째

Airflow 모듈 1/151 airflow-learn-01

Airflow란 무엇인가

Apache Airflow Official Documentation (in-repo snapshot) — Apache Software Foundation docs/Airflow/docs/index.rst - What is Airflow?, Workflows as code, Dags, Why/Why not Airflow

이 모듈을 다 읽으면

  • Airflow가 어떤 문제를 해결하는 도구이고, 어떤 워크로드(배치 파이프라인, ML, 에이전트 워크로드 등)에 적합한지 설명할 수 있다
  • "워크플로우를 코드로 정의한다"는 접근이 주는 이점(동적 생성, 버전 관리, 협업, 테스트)을 설명할 수 있다
  • Dag이 무엇을 나타내는 개념인지, Task·Operator·의존성과 어떤 관계인지 구분해 설명할 수 있다
  • Airflow가 잘 맞는 상황과 잘 맞지 않는 상황을 구분해 판단할 수 있다

Apache Airflow는 시간 기반/이벤트 기반 배치 파이프라인부터 머신러닝, 에이전트·LLM 워크로드까지 워크플로우를 개발·스케줄링·모니터링하는 오픈소스 플랫폼이다. 워크플로우를 Python 코드로 정의하는 "workflows as code" 접근이 핵심 철학이며, 이 덕분에 동적 생성, 버전 관리, 팀 협업, 테스트가 가능해진다. 이 모듈은 Dag이라는 개념이 무엇을 나타내는지, 그리고 Airflow가 어떤 상황에 잘 맞고 어떤 상황엔 맞지 않는지를 소개한다.

Airflow는 무엇을 위한 도구인가

Apache Airflow는 워크플로우를 개발하고, 스케줄링하고, 모니터링하기 위한 오픈소스 플랫폼이다. 여기서 워크플로우란 전통적인 시간 기반 또는 이벤트 트리거 기반의 배치 지향 데이터 파이프라인뿐 아니라, 머신러닝, 모델 학습, 그리고 에이전트나 LLM 기반 워크로드까지 포괄한다. Airflow의 확장 가능한 Python 프레임워크는 사실상 어떤 기술과도 연결되는 워크플로우를 만들 수 있게 해주며, AI·에이전트 도구를 오케스트레이션하기 위한 프로바이더(provider) 생태계도 점점 커지고 있다.

웹 기반 UI는 워크플로우를 시각화하고, 관리하고, 디버깅하는 데 도움을 준다. Airflow는 노트북 한 대에서 돌아가는 단일 프로세스부터, 대규모 워크로드를 처리할 수 있는 분산 시스템까지 다양한 구성으로 실행할 수 있다는 점이 특징이다 — 즉 학습·실험 단계와 프로덕션 운영 단계에서 동일한 프로그래밍 모델을 그대로 유지할 수 있다.

핵심 포인트

  • Airflow는 배치 파이프라인뿐 아니라 ML, 모델 학습, 에이전트/LLM 워크로드까지 아우르는 워크플로우 개발·스케줄링·모니터링 플랫폼이다
  • 확장 가능한 Python 프레임워크와 프로바이더 생태계 덕분에 사실상 모든 기술과 연결할 수 있다
  • 단일 프로세스(노트북)부터 분산 시스템까지, 같은 프로그래밍 모델로 규모를 늘려갈 수 있다

워크플로우를 코드로 정의한다는 것

Airflow 워크플로우는 전적으로 Python으로 정의된다. 이 "workflows as code" 접근은 세 가지 이점을 가져온다. 첫째, Dynamic(동적)하다 — 파이프라인이 코드로 정의되므로 Dag을 동적으로 생성하고 파라미터화할 수 있다. 둘째, Extensible(확장 가능)하다 — Airflow 프레임워크는 폭넓은 내장 오퍼레이터를 포함하며, 필요에 맞게 직접 확장할 수도 있다. 셋째, Flexible(유연)하다 — Airflow는 Jinja 템플릿 엔진을 활용해 풍부한 커스터마이징을 가능하게 한다.

워크플로우를 코드로 정의한다는 것은 곧 소프트웨어 엔지니어링의 관행을 그대로 파이프라인에 적용할 수 있다는 뜻이기도 하다. 코드 변경 이력을 추적하고 이전 버전으로 롤백할 수 있는 버전 관리(Version control), 여러 개발자가 같은 워크플로우 코드베이스를 함께 다룰 수 있는 팀 협업(Team collaboration), 단위 테스트와 통합 테스트로 파이프라인 로직을 검증하는 테스트(Testing), 그리고 기존 컴포넌트 생태계를 활용하거나 직접 컴포넌트를 만들 수 있는 확장성(Extensibility)이 바로 그것이다. 클릭 기반 도구와 달리 코드 기반 워크플로우는 이런 엔지니어링 관행을 자연스럽게 상속받는다.

핵심 포인트

  • workflows as code는 Dynamic(동적 생성/파라미터화), Extensible(내장+커스텀 오퍼레이터), Flexible(Jinja 템플릿) 세 가지 이점을 제공한다
  • 코드로 워크플로우를 정의하면 버전 관리, 팀 협업, 테스트, 확장성이라는 소프트웨어 엔지니어링 관행을 그대로 파이프라인에 적용할 수 있다

Dag, Task, 의존성의 기본 그림

Dag은 워크플로우를 나타내는 Airflow의 핵심 개념이다. 다음은 "demo"라는 이름의 Dag을 정의하는 간단한 예시다.

from datetime import datetime

from airflow.sdk import DAG, task
from airflow.providers.standard.operators.bash import BashOperator

# Dag은 워크플로우, 즉 태스크들의 모음을 나타낸다
with DAG(dag_id="demo", start_date=datetime(2022, 1, 1), schedule="0 0 * * *") as dag:
    # 태스크는 오퍼레이터로 표현된다
    hello = BashOperator(task_id="hello", bash_command="echo hello")

    @task()
    def airflow():
        print("airflow")

    # 태스크 간 의존성 설정
    hello >> airflow()

이 예시에서 세 가지를 확인할 수 있다. 첫째, "demo"라는 이름의 Dag은 2022년 1월 1일부터 매일 자정(cron 표현식 "0 0 * * *")에 실행되도록 스케줄링되어 있다. 둘째, 두 개의 태스크가 있다 — 하나는 `BashOperator`로 셸 스크립트를 실행하고, 다른 하나는 `@task` 데코레이터로 Python 함수를 정의한다. 셋째, `>>` 연산자가 두 태스크 사이의 의존성을 정의하고 실행 순서를 제어한다.

Airflow는 이 스크립트를 파싱하여 태스크를 스케줄링하고 정의된 순서대로 실행한다. "demo" Dag의 상태는 웹 인터페이스에 표시되는데, Grid 뷰에서는 각 열이 하나의 Dag 실행(Dag run)을 나타내며 여러 번의 실행 이력과 태스크 로그를 한눈에 볼 수 있고, Graph 뷰는 태스크 간의 연결 구조를 보여준다. 이 외에도 실패한 태스크 로그로 바로 이동할 수 있는 Dag Overview 뷰 등 워크플로우를 모니터링·디버깅하기 위한 여러 화면이 제공된다.

핵심 포인트

  • Dag은 태스크들의 모음이며 그 관계와 의존성을 나타내는, 워크플로우에 대한 로드맵이다
  • 태스크는 오퍼레이터(BashOperator 등)나 @task로 데코레이팅한 함수로 정의되고, `>>` 연산자로 실행 순서(의존성)를 정한다
  • Grid 뷰의 각 열은 하나의 Dag 실행을 나타내며, Graph/Grid/Overview 등 여러 뷰로 워크플로우 상태를 모니터링할 수 있다

언제 Airflow가 잘 맞고, 언제는 아닌가

Airflow는 배치 워크플로우를 오케스트레이션하기 위한 플랫폼이다. 폭넓은 내장 오퍼레이터를 갖춘 유연한 프레임워크를 제공하며 새로운 기술과의 통합도 쉽다. 워크플로우가 명확한 시작과 끝을 가지고 스케줄에 따라 실행된다면 Airflow의 Dag과 잘 맞는다.

클릭보다 코딩을 선호한다면 Airflow는 적합한 선택이다. 워크플로우를 Python 코드로 정의하면 버전 관리, 팀 협업, 테스트, 확장성이라는 핵심 이점을 얻는다. 웹 인터페이스에서는 Dag을 수동으로 트리거하고, 로그를 살펴보고, 태스크 상태를 모니터링할 수 있으며, 과거 데이터를 처리하기 위해 Dag 실행을 백필(backfill)하거나 실패한 태스크만 다시 실행해 비용과 시간을 절약할 수도 있다. Public Airflow Interface를 통해 오퍼레이터부터 UI 플러그인, 실행 로직까지 시스템의 거의 모든 부분을 확장하고 커스터마이징할 수 있다는 점도 Airflow의 강점이다. 오픈소스이기 때문에 전 세계 커뮤니티가 개발·테스트·유지보수하는 컴포넌트 위에서 블로그, 책, 컨퍼런스 발표 같은 풍부한 학습 자료와 커뮤니티(Slack, 메일링 리스트)를 활용할 수 있다는 것도 이점이다.

반대로 클릭 기반 관리를 선호한다면 Airflow가 최선의 선택이 아닐 수 있다. 웹 UI가 워크플로우 관리를 단순화해주고 개발자 경험도 계속 개선되고 있지만, 워크플로우를 코드로 정의하는 것이 Airflow 동작 방식의 핵심이므로 어느 정도의 코딩은 항상 필요하다.

핵심 포인트

  • 명확한 시작·끝을 가지고 스케줄에 따라 도는 워크플로우는 Airflow Dag과 잘 맞는다
  • 코드 기반 워크플로우는 버전 관리·협업·테스트·확장성 이점을 주고, Public Airflow Interface로 시스템 거의 전체를 커스터마이징할 수 있다
  • 클릭 기반 관리를 선호하면 Airflow가 최선이 아닐 수 있다 — UI가 발전해도 코드 작성은 항상 필요하기 때문이다