컨테이너·워크플로우 자동화/Airflow로 워크플로우 자동화하기

Airflow에서 날짜 기반 분기 — BranchDateTimeOperator 활용하기

Data Jun 2025. 10. 18. 22:02

데이터 파이프라인을 구성하다 보면
"특정 날짜에만 실행해야 하는 작업" 이나
"특정 기간 동안만 동작하는 로직" 이 필요한 경우가 있습니다.

이럴 때 유용하게 쓸 수 있는 것이 바로

👉 BranchDateTimeOperator 입니다.

 

BranchDateTimeOperator란?

BranchDateTimeOperator는 Airflow의 Branch Operator 중 하나로,
현재 실행 시각(execution_date)이 특정 기간 안에 포함되는지를 판단하여
실행할 태스크를 분기합니다.

즉, “날짜 조건문(if)” 역할을 하는 오퍼레이터라고 생각하면 됩니다.

 

기본 구조 예시

from airflow.operators.empty import EmptyOperator
from airflow.operators.branch import BranchDateTimeOperator
from default_dag import create_dag
import pendulum

dag = create_dag('BranchDateTimeOperator')

# 분기 이후 실행될 더미 태스크
empty_task_1 = EmptyOperator(
    task_id='date_in_range_machine',
    dag=dag,
)

empty_task_2 = EmptyOperator(
    task_id='date_outside_range_machine',
    dag=dag,
)

# 날짜 기반 분기 오퍼레이터
cond_task_machine = BranchDateTimeOperator(
    task_id='datetime_branch_machine',
    follow_task_ids_if_true=['date_in_range_machine'],
    follow_task_ids_if_false=['date_outside_range_machine'],
    target_upper=pendulum.datetime(2023, 8, 13, 0, 0, 0),
    target_lower=pendulum.datetime(2023, 8, 11, 0, 0, 0),
    dag=dag,
)

# 태스크 의존 관계 설정
cond_task_machine >> [empty_task_1, empty_task_2]

동작 방식

항목 설명
target_lower 기준 기간의 시작 시간
target_upper 기준 기간의 종료 시각
follow_task_ids_if_false 현재 시간이 범위 안에 있을 때 실행할 태스크
follow_task_ids_if_false 범위 밖일 때 실행할 태스크

 

실행 예시

실행 시각 실행되는 태스크
2023-08-12 10:00 date_in_range_machine
2023-08-14 09:00 date_outside_ragne_machine

즉,

  • 8월 11일 ~ 8월 13일 사이면 date_in_range_machine 실행
  • 그 외에는 date_outside_range_machine 실행

 

EmptyOperator

empty_task_1 = EmptyOperator(task_id='date_in_range_machine')
empty_task_2 = EmptyOperator(task_id='date_outside_range_machine')

 

  • 이 두 태스크는 실제 로직이 없는 단순한 "더미 태스크"입니다.
  • BranchDateTimeOperator의 분기 결과를 시각적으로 확인하기 위한 용도입니다.
  • 실제 환경에서는 이 자리에 BashOperator, PythonOperator 등
    진짜 로직이 들어가게 됩니다.

 

의존 관계

cond_task_machine >> [empty_task_1, empty_task_2]

이 구문은 태스크 실행 순서(Dependency) 를 정의합니다.
즉,

cond_task_machine
        ↓
┌────────────────────────┐
│                        │
empty_task_1     empty_task_2
  • cond_task_machine이 먼저 실행되고,
  • 결과에 따라 둘 중 하나의 태스크만 실행됩니다.
  • 실행되지 않은 태스크는 자동으로 skipped 상태가 됩니다.

 

 

정리하면

 

 - BranchDateTimeOperator = 날짜 기반 if 조건문

- 특정 날짜 범위 안/밖 여부에 따라 분기 실행

 - 복잡한 파이썬 로직 없이 간단한 스케줄 제어 가능