Overview

숭맹이·2025년 4월 22일
0

Airflow란 무엇인가?

"워크플로우를 코드로 정의하고, 배치 실행을 체계화하는 플랫폼"

Airflow는 Python 코드로 워크플로우(DAG: Directed Acyclic Graph)를 정의하고, 주기적으로 실행되도록 스케줄링하며, 실행 상태를 모니터링할 수 있게 해줍니다.

특징은 다음과 같습니다:

  • Workflows as Code: Python으로 파이프라인을 작성
  • 동적 생성: 코드로 DAG를 동적으로 만들 수 있음
  • 확장성: 다양한 오퍼레이터 제공, 필요시 직접 개발 가능
  • 유연성: Jinja 템플릿을 통한 파라미터화 지원
  • 웹 UI 제공: DAG와 Task 상태를 시각화 및 관리 가능

간단한 예제 살펴보기

from datetime import datetime

from airflow import DAG
from airflow.decorators import task
from airflow.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()

요약

  • DAG: "demo"라는 이름으로 매일 자정마다 실행.
  • Task: hello (bash 실행) -> airflow (python 실행) 순서로 의존성 설정.

왜 Airflow를 써야 할까?

1. 코드 기반 워크플로우 정의

  • Git을 통한 버전 관리, 리뷰, 롤백이 가능.
  • 협업 및 테스트 작성이 용이.

2. 복잡한 파이프라인 스케줄링 가능

  • DAG 안에서 Task 간 의존성을 자유롭게 설정.
  • Backfill, Catchup 등 과거 데이터에 대한 재처리 지원.

3. 생태계와 확장성

  • S3, GCS, Spark, Kubernetes 등 수많은 오퍼레이터 존재.
  • 필요시 커스텀 오퍼레이터 제작 가능.

4. 운영 편의성

  • 웹 UI를 통한 상태 모니터링 및 Task 재실행.
  • 각 Task별 로그 확인 가능.

주의해야 할 점

배치성 워크플로우에 최적화

  • Airflow는 유한한 시작과 끝을 가진 배치 파이프라인에 최적화.
  • Kafka 같은 스트리밍 환경에는 부적합.

"클릭" 기반이 아님

  • 워크플로우를 정의할 때 반드시 코딩이 필요.
  • 노코드/로우코드 솔루션을 찾는다면 다른 도구를 고려해야 함.

실무 적용 팁

  • 초기 세팅: 로컬에 Docker Compose로 띄워 실험해보기.
  • 구조 설계: DAG와 Task를 너무 무겁게 만들지 말 것 (단일 책임 원칙 적용).
  • 모듈화: 공통 기능은 Python 모듈로 분리하여 재사용성 높이기.
  • 모니터링: SLA 미준수 알림 설정, 실패 Task 알림을 Slack이나 PagerDuty로 연동.
profile
👨🏻‍💻 Backend Developer

0개의 댓글