Airflow에서 Sensor는 특정 조건이 충족될 때까지 DAG 실행을 일시 중지(polling) 하는 역할을 합니다.
예를 들어, 파일이 생기거나, 외부 태스크가 완료될 때까지 기다리도록 설정할 수 있습니다.
하지만 항상 센서 실패(Fail)를 DAG 전체 실패로 처리하고 싶지는 않을 때가 있습니다.
이럴 때 사용하는 옵션이 바로 soft_fail 입니다.
soft_fail의 역할
soft_fail=True로 설정하면, Sensor가 실패해도 DAG 전체가 실패하지 않습니다.
대신 해당 Sensor 태스크만 SKIPPED 상태로 처리됩니다.
즉,
- 파일이 안 생겨도 DAG을 완전히 멈추지 않고,
- 이후 분기 로직에 따라 다른 작업을 계속 진행할 수 있습니다.
wait_for_file = PythonSensor(
task_id='wait_for_file',
python_callable=check_file_exists,
timeout=600, # 최대 10분간 대기
poke_interval=30, # 30초마다 파일 확인
soft_fail=True, # 실패 시 skip 처리
dag=dag,
)
코드를 자세히 설명드려보겠습니다.
soft_fail=False
- 조건을 만족하지 못하고 timeout 도달하면
👉 Task 상태: FAILED - DAG 전체에도 영향 줌 (downstream도 실행 안 될 가능성 큼)
soft_fail=True
- Sensor가 끝까지 조건을 못 맞추고 timeout 되면
👉 Task 상태: SKIPPED 로 처리됨
즉,
❌ 실패 → FAILED
✅ soft_fail → SKIPPED
언제 SKIPPED가 되나?
timeout=600
poke_interval=30
30초마다 check_file_exists() 실행을 한후 10분 동안 계속 확인합니다 끝까지 파일 없으면 → timeout 발생을하고
이때
- soft_fail=False → FAILED
- soft_fail=True → SKIPPED
실제 활용 예시
예를 들어, 매일 아침 데이터 파일이 들어올 때만 처리하는 DAG이 있다고 합시다.
그날 파일이 없으면 DAG 전체가 실패하는 대신, 그냥 건너뛰고 싶다면 이렇게 설정합니다 👇
from airflow.sensors.filesystem import FileSensor
wait_for_data = FileSensor(
task_id='wait_for_data',
filepath='/data/input/today.csv',
timeout=600,
poke_interval=60,
soft_fail=True, # 파일이 없으면 skip
dag=dag,
)
- 파일이 존재하면 → 다음 태스크 실행
- 파일이 없으면 → skip 처리 (DAG 실패 X)
마치며
soft_fail은 단순하지만 강력한 옵션입니다.
필수 조건이 아닌 “있으면 좋고, 없어도 괜찮은” 센서 조건에 활용하면,
Airflow DAG을 훨씬 유연하고 안정적으로 운영할 수 있습니다.
soft_fail=True → “센서 실패는 오류가 아니라, 건너뛰는 상황이다.”
'🔥 Data Engineer > Airflow' 카테고리의 다른 글
| [Airflow] - schedule_interval,execution_date,backfill,catchup (0) | 2026.04.21 |
|---|---|
| [Airflow] SLA(Service Layer Agreement) 서비스 수준 계약 정리 (0) | 2026.04.19 |
| [Airflow] - Retry(exponential backoff) (0) | 2026.04.18 |
| [Airflow] - Sensor의 Reschedule & poke & Deferrable Operator (0) | 2026.04.17 |
| [Airflow] - DAG CI/CD (0) | 2026.04.15 |