[airflow] short circuit operator로 분기

정리맨·2025년 9월 25일

Airflow에서 ShortCircuitOperator는 조건이 False일 때 downstream task를 skip하는 역할을 합니다. 이때 등장하는 속성이 바로 ignore_downstream_trigger_rules입니다.

📌 기본 개념
• 일반적으로 어떤 Task가 skip되면, downstream task의 실행 여부는 해당 task의 TriggerRule에 따라 결정됩니다.
• 예: TriggerRule.ALL_SUCCESS라면 upstream 중 하나라도 skip되면 downstream도 skip됨.
• 예: TriggerRule.ALL_DONE이라면 skip/failed 상관없이 실행됨.

그런데 ShortCircuitOperator는 특수하게 작동합니다:
• 조건이 False → 자기 자신은 success 처리되지만 downstream은 전부 skipped 상태로 만듦.
• 이때 downstream task의 TriggerRule이 뭔지 상관없이 무조건 skip시키려면 → ignore_downstream_trigger_rules=True

📌 ignore_downstream_trigger_rules 동작
• True (기본값)
• ShortCircuitOperator가 False를 반환 → 모든 downstream task는 trigger rule을 무시하고 강제로 skip됨.
• 즉, TriggerRule.ALL_DONE, TriggerRule.ONE_SUCCESS 같은 설정이 있어도 무조건 skip 처리.
• False
• ShortCircuitOperator가 False를 반환했을 때도 downstream task들은 자기 trigger rule에 따라 실행 여부가 결정됨.
• 예를 들어 downstream task가 TriggerRule.ALL_DONE이면, upstream이 skip돼도 실행됨.

📌 BranchPythonOperator와의 차이
• BranchPythonOperator는 특정 task id만 선택해서 실행시키고 나머지는 skip시킴.
• ShortCircuitOperator는 조건이 False일 때 전체 downstream을 skip시킴.
• 둘 다 skip 처리를 하지만,
• BranchPythonOperator는 “갈라지는 경로”를 선택.
• ShortCircuitOperator는 “조건 불만족 시 전체 중단”을 선택.

이때 ignore_downstream_trigger_rules 덕분에, 조건 불만족이면 downstream 실행 여부를 완전히 제어할 수 있음 → BranchPythonOperator 대용으로 쓰일 수 있는 거예요.

✅ 정리
• ignore_downstream_trigger_rules=True → downstream trigger rule 무시, 전부 skip.
• ignore_downstream_trigger_rules=False → downstream trigger rule 존중, 상황에 따라 실행될 수도 있음

——————

숏 서킷 오퍼레이터가 브랜치 파이썬 오퍼레이터를 대체하는
형태로 DAG을 만들도록 기획 한적이 있었다

그 이유는 조건을 걸어서 트루 폴스를 리턴하여 분기를 단순화 하려고하는 의도였는데
의도와는 다르게 하위스트림이 전부 동작하지않는 상황을 맞이했고,

그 당시에 스택오버플로우 최근답변에서
ignore downstream trigger rules 기능을 발견했다.

아직도 그 기능이 없었다면 기능을 꽤나 많이 수정해야됐던터라 식은땀을 흘렸던 기억.

설계는 전체적으로 개발은 단위별로 빠르게 Iteration 하는걸 목표로 해야된다는 경험을 얻었다

profile
ㅎㅎ

0개의 댓글