전체 그래프
Airflow

Task Dependencies

data-engineeringtool/airflowtaskdependency

상위: Airflow

요약

Task 의존성은 Airflow DAG 내에서 작업 실행 순서를 제어합니다. >> 연산자로 순차 실행, 리스트로 병렬 실행을 정의합니다. Upstream은 이전 Task, Downstream은 이후 Task를 의미하며, 의존성을 명확히 설정해야 DAG가 올바르게 동작합니다.

Task 간 의존성

  • Airflow는 Task 간 실행 순서(의존성)를 명확히 정의해야 함
  • 특정 Task가 완료된 후 다음 Task가 실행됨
  • 연산자 >> 또는 <<를 사용해 연결

Upstream vs Downstream

종류설명예시
Upstream Task현재 Task 이전에 실행되는 TaskA >> B에서 A는 B의 upstream
Downstream Task현재 Task 이후에 실행되는 TaskA >> B에서 B는 A의 downstream

기본 연결 (순차 실행)

start >> task_1 >> task_2 >> end

Task Dependencies

  • 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

Task Dependencies

  • 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

Task Dependencies

  • 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

다음 단계

참고 자료