Airflow Sensor VS Trigger

BAO.DE·2025년 10월 22일

Apache Airflow

목록 보기
20/20

혼동하기 쉬운 두 개념 학습후 차이점 정리

핵심개념

구분역할Airflow 클래스테스트 결과
Sensor조건이 만족될 때까지 DAG 내부에서 대기FileSensor, HttpSensor, ExternalTaskSensor/tmp/input.txt가 생길 때까지 “waiting” 상태 유지
Trigger조건이 충족되면 다른 DAG 또는 Task 실행TriggerDagRunOperator파일 감지 후 dag2_triggered DAG 자동 실행

Trigger는 일반적으로 이해하는 내용과 유사한데, Sensor는 특정파일을 기준으로 (Wait for file) , 언제 도착할지 모르는 파일을 계속 도착했는지 확인후 후속 task 를 수행한다.

파일 도착 대기

상황: 매일 새벽 2시에 외부 시스템에서 CSV 파일을 전송
문제: 파일이 정확히 언제 도착할지 모름 (네트워크 지연 등)
해결: FileSensor로 파일 도착을 기다린 후 처리 시작

1. 타이밍을 정확히 모를 때
python 파일이 "언젠가" 올 건데 정확한 시간을 모름
FileSensor(filepath='/data/partner_data.csv')

2. 외부 의존성이 있을 때
다른 시스템/작업이 끝나야 할 때
ExternalTaskSensor(external_dag_id='upstream_dag')

3. 특정 조건이 충족되어야 할 때
python# 데이터가 특정 상태가 되어야 할 때
SqlSensor(sql="SELECT COUNT(*) FROM orders WHERE status='ready'")

차이점

Sensor는 단독으로도 사용 가능 (조건 충족 후 다음 Task 진행)

Trigger는 DAG 간 연결에 적합 (데이터 파이프라인을 단계별 DAG으로 나누는 경우 유용)

poke / reschedule

  1. poke 모드

일정 주기(poke_interval)마다 센서가 계속 실행되며 조건을 체크함.
DAG가 트리거되면 Worker slot을 점유한 채 대기(polling)

특징:

단순 구조 (테스트용/단기 센서에 적합)

리소스 낭비 가능 (대기 중에도 slot 사용)

sensor = FileSensor(
    task_id='wait_for_file',
    poke_interval=30,   # 30초마다 확인
    timeout=600,        # 10분 후 타임아웃
    mode='poke'
)
  1. reschedule 모드

조건을 체크한 후 만족하지 않으면 task를 일시 해제(reschedule) 시키고 worker slot을 반환함.
다음 poke_interval에 다시 실행됨.

특징:

운영환경에서 권장 (worker 리소스 효율적 사용)

센서가 많아도 병목이 적음

sensor = FileSensor(
    task_id='wait_for_file',
    poke_interval=60,
    timeout=3600,
    mode='reschedule'
)

0개의 댓글