상위: Airflow
요약
Task 의존성은 Airflow DAG 내에서 작업 실행 순서를 제어합니다. >> 연산자로 순차 실행, 리스트로 병렬 실행을 정의합니다. Upstream은 이전 Task, Downstream은 이후 Task를 의미하며, 의존성을 명확히 설정해야 DAG가 올바르게 동작합니다.
Task 간 의존성
- Airflow는 Task 간 실행 순서(의존성)를 명확히 정의해야 함
- 특정 Task가 완료된 후 다음 Task가 실행됨
- 연산자
>>또는<<를 사용해 연결
Upstream vs Downstream
| 종류 | 설명 | 예시 |
|---|---|---|
| Upstream Task | 현재 Task 이전에 실행되는 Task | A >> B에서 A는 B의 upstream |
| Downstream Task | 현재 Task 이후에 실행되는 Task | A >> B에서 B는 A의 downstream |
기본 연결 (순차 실행)
start >> task_1 >> task_2 >> end

- start 완료 후 task_1 실행
- task_1 완료 후 task_2 실행
- task_2 완료 후 end 실행
병렬 실행
start >> [task_1, task_2]
[task_1, task_2] >> task_3
task_3 >> [task_4, task_5]
[task_4, task_5] >> end

- start 완료 후 task_1, task_2 동시 실행
- task_1, task_2 모두 완료 후 task_3 실행
- task_3 완료 후 task_4, task_5 동시 실행
다중 Task 종속
start >> [task_1, task_2, task_3] >> end

- start 완료 후 3개 Task 동시 실행
- 모두 완료 후 end 실행
의존성 설정 방법
비트 시프트 연산자
# >> 사용 (downstream)
task_1 >> task_2
# << 사용 (upstream)
task_2 << task_1
# 동일한 의미
set_downstream / set_upstream
task_1.set_downstream(task_2)
task_2.set_upstream(task_1)
리스트로 여러 의존성
# task_1 이후 3개 병렬 실행
task_1 >> [task_2, task_3, task_4]
# 3개 완료 후 task_5 실행
[task_2, task_3, task_4] >> task_5
복잡한 의존성 패턴
다이아몬드 패턴
start >> [extract_a, extract_b] >> transform >> load >> end
- 병렬 추출 후 변환, 적재
팬아웃/팬인 패턴
start >> fan_out >> [process_1, process_2, process_3] >> fan_in >> end
- 하나의 Task에서 여러 Task로 분산 (fan-out)
- 여러 Task를 하나로 수렴 (fan-in)
주의사항
순환 의존성 금지
# ❌ 잘못된 예
task_A >> task_B >> task_C >> task_A # 순환 구조
- DAG는 Acyclic(비순환)이어야 함
- 순환 구조는 에러 발생
의존성 명시 필요
# ❌ 의존성 없이 Task만 정의
task_1 = BashOperator(...)
task_2 = BashOperator(...)
# ✅ 의존성 명시
task_1 >> task_2
다음 단계
- Trigger Rules - Task 실행 조건 제어
- Task - Task 기본 개념
- Branching - 조건부 의존성