ExternalTaskMarker**는
“이 태스크는 다른 DAG의 특정 태스크와 연결되어 있다”
는 표식(Marker) 을 남기는 오퍼레이터입니다.
즉, ExternalTaskSensor가 기다리는 쪽이라면
ExternalTaskMarker는 기다림의 대상이 되는 쪽이에요.
1. 예시 상황
두 DAG이 있다고 해봅시다 👇
- upstream_dag: 데이터 전처리
- downstream_dag: 전처리 끝나야 모델 학습
✅ 1. upstream_dag.py
from airflow import DAG
from airflow.operators.dummy import DummyOperator
from airflow.sensors.external_task import ExternalTaskMarker
from datetime import datetime
with DAG(
dag_id='upstream_dag',
start_date=datetime(2023, 8, 12),
schedule_interval='@daily'
) as dag:
preprocess = DummyOperator(task_id='preprocess_data')
mark_for_downstream = ExternalTaskMarker(
task_id='mark_downstream_dependency',
external_dag_id='downstream_dag',
external_task_id='wait_for_upstream'
)
preprocess >> mark_for_downstream
의미:
“내가 downstream_dag의 wait_for_upstream 태스크와 연결되어 있다.”
즉, 다운스트림 DAG이 이 태스크가 끝날 때까지 기다려야 한다는 관계 정보를 Airflow 메타데이터에 기록합니다.
✅ 2. downstream_dag.py
from airflow import DAG
from airflow.sensors.external_task import ExternalTaskSensor
from airflow.operators.dummy import DummyOperator
from datetime import datetime
with DAG(
dag_id='downstream_dag',
start_date=datetime(2023, 8, 12),
schedule_interval='@daily'
) as dag:
wait_for_upstream = ExternalTaskSensor(
task_id='wait_for_upstream',
external_dag_id='upstream_dag',
external_task_id='mark_downstream_dependency',
allowed_states=['success'],
failed_states=['failed', 'skipped'],
poke_interval=60
)
model_train = DummyOperator(task_id='train_model')
wait_for_upstream >> model_train
의미:
downstream_dag은 upstream_dag의 mark_downstream_dependency 태스크가
성공할 때까지 기다렸다가 실행한다.
2. DAG 간 동작 흐름
┌──────────────────────────────┐
│ upstream_dag │
│ └── mark_downstream_dependency (Marker)
│ │
│ ▼
│ 메타데이터에 관계 기록
└────────────┬─────────────────┘
│
▼
┌──────────────────────────────┐
│ downstream_dag │
│ └── wait_for_upstream (Sensor)
│ │
│ ▼
│ train_model 실행
└──────────────────────────────┘
3. 사용 이유
일반적인 ExternalTaskSensor만 써도 DAG 간 순서 제어는 가능합니다.
하지만 ExternalTaskMarker를 추가하면 다음과 같은 장점이 있어요 👇
| 장점 | 설명 |
| 명시적 DAG 관계 표시 | Airflow UI에서 DAG 간 연결을 시각적으로 표현 |
| 데이터 계보(Dependency Graph) | DAG 간 종속 관계를 쉽게 파악 가능 |
| 정리된 의존성 관리 | 어떤 DAG이 어떤 DAG에 의존하는지 명확히 표시 |
| 대규모 DAG 시스템에 적합 | 여러 DAG 간 복잡한 의존성 관리 가능 |
정리하면
ExternalTaskMarker는 Airflow의 DAG 간 관계를 명시적으로 표시하는 마커다.
ExternalTaskSensor와 함께 사용하면 DAG 간 실행 순서를
Airflow 메타데이터 수준에서 안전하고 시각적으로 관리할 수 있다.
'컨테이너·워크플로우 자동화 > Airflow로 워크플로우 자동화하기' 카테고리의 다른 글
| Airflow DAG Scheduling 이해 (0) | 2025.10.19 |
|---|---|
| Airflow로 Star Wars API 데이터를 PostgreSQL에 적재하기 (0) | 2025.10.19 |
| Airflow ExternalTaskSensor 이해하기 (0) | 2025.10.19 |
| Airflow에서 한 DAG이 다른 DAG을 트리거(Trigger)하기 (0) | 2025.10.18 |
| Airflow에서 SubDAG 대신 TaskGroup 사용하기 (0) | 2025.10.18 |