상위: Data Engineering
개요
Python 기반 워크플로우 오케스트레이션 도구로, DAG를 통해 작업 의존성을 관리하고 스케줄링/모니터링을 제공합니다. 배치 처리 워크플로우에 최적화되어 있으며, 다양한 외부 시스템과 통합 가능합니다.
시작하기
학습 순서 (초보자 권장)
- Introduction - Airflow 기본 개념 이해, 설치
- DAG - DAG 개념과 정의 방법
- Task - Task의 역할과 속성
- Operators - 다양한 Operator 사용법
- Task Dependencies - Task 간 의존성 설정
- Scheduling - Cron 표현식, Schedule Interval, Catchup
- Trigger Rules - Task 실행 조건 제어
- XCom - Task 간 데이터 전달
- Variable - 전역 변수 관리
- Branching - 조건부 실행 흐름
- TaskGroup - DAG 구조화
- Connections & Hooks - 외부 시스템 연동
- Spark Integration - Spark와 연동
빠른 시작 (Quick Start)
# 1. docker-compose.yaml 다운로드
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.10.5/docker-compose.yaml'
# 2. 디렉토리 생성
mkdir -p ./dags ./logs ./plugins ./config
# 3. 환경변수 설정
echo -e "AIRFLOW_UID=$(id -u)" > .env
# 4. 초기화 및 실행
docker compose up airflow-init
docker compose up
# 5. Web UI 접속: http://localhost:8080
# ID: airflow / PW: airflow
주요 문서
Core Concepts (핵심 개념)
- Introduction - 워크플로우 오케스트레이션, 설치
- DAG - Directed Acyclic Graph 개념
- Task - Task 정의와 LifeCycle
- Operators - 다양한 Operator 종류와 사용법
Scheduling & Dependencies (스케줄링 & 의존성)
- Scheduling - Cron, Schedule Interval, Catchup, Backfill
- Task Dependencies - Task 간 의존성 설정
- Trigger Rules - Task 실행 조건 제어
Data & Communication (데이터 & 통신)
- XCom - Task 간 데이터 전달
- Variable - 전역 변수 관리
- Connections & Hooks - 외부 시스템 연동
Advanced Features (고급 기능)
Integration (통합)
- Spark Integration - Spark 연동, SparkSubmitOperator
자주 사용하는 패턴
기본 ETL 패턴
extract >> transform >> load
병렬 처리 패턴
start >> [task1, task2, task3] >> merge >> end
분기 처리 패턴
branch >> [task_A, task_B]
더 많은 패턴은 각 문서 참조
주의사항 / 함정
DAG 작성 시
- DAG 파일은 빠르게 파싱되어야 함: 무거운 연산 금지
- Task 간 직접 데이터 전달 불가: XCom 또는 외부 스토리지 사용
- 순환 의존성 금지: DAG는 Acyclic이어야 함
XCom 사용 시
- 대용량 데이터 전달 금지: 작은 데이터만 사용
- 대용량은 S3 경로만 XCom으로 전달
Scheduling
- start_date는 과거로 설정: 미래 시간 설정 시 실행 안됨
- execution_date ≠ 실행 시간: 데이터 기준 시간
- catchup=True 주의: 과거 모든 스케줄 실행 가능성
Variable
- DAG 파싱 시 Variable.get() 금지: Task 내부에서만 사용
- 파싱 시마다 DB 접근하여 성능 저하
Trigger Rule
- 분기 후 합류 시 trigger_rule 필수:
none_failed_or_skipped사용 - 기본값
all_success는 skipped Task를 실패로 간주
더 자세한 내용은 각 문서의 주의사항 섹션 참조
링크 맵
Airflow/
├── Introduction (설치, 개요)
├── Core Concepts
│ ├── DAG
│ ├── Task
│ └── Operators
├── Scheduling
│ ├── Scheduling (Cron, Interval)
│ ├── Task Dependencies
│ └── Trigger Rules
├── Data & Communication
│ ├── XCom
│ ├── Variable
│ └── Connections & Hooks
├── Advanced
│ ├── Branching
│ └── TaskGroup
└── Integration
└── Spark Integration
관련 도구
- Batch vs Real-time - 배치 vs 실시간 처리 개념
- Spark - 대규모 분산 데이터 처리
- Data Engineering - 데이터 엔지니어링 허브