상위: Airflow
요약
DAG(Directed Acyclic Graph)는 Airflow에서 작업들의 실행 순서를 정의하는 방향성 비순환 그래프입니다. 방향성을 통해 작업 순서를 보장하고, 비순환 구조로 무한 루프를 방지합니다. DAG는 여러 Task로 구성되며, 스케줄에 따라 자동 실행됩니다.
DAG란?
- Airflow에서 작업(Task)들의 실행 순서를 정의하는 그래프
- 방향성(Directed) → 작업이 정해진 순서로 실행됨
- 비순환(Acyclic) → 순환(Loop) 구조가 없어 무한 실행 방지

DAG의 특징
Directed (방향성)
- 작업 간 의존성이 명확한 방향을 가짐
task_A >> task_B형태로 실행 순서 정의- 한 방향으로만 흐름이 진행
Acyclic (비순환)
- 순환(Loop) 구조 불가
- A → B → C → A 같은 패턴 금지
- 무한 루프 방지로 안정적 실행 보장
Graph (그래프)
- 노드(Node): 개별 Task
- 엣지(Edge): Task 간 의존성
- 시각적으로 워크플로우 표현
DAG Directory
역할
- DAG 정의 파일(.py)을 저장하는 폴더
- 기본 위치:
$AIRFLOW_HOME/dags - Scheduler가 이 디렉토리를 주기적으로 스캔하여 DAG을 로드함
Docker 환경 설정
volumes:
- ${AIRFLOW_PROJ_DIR:-.}/airflow/dags:/opt/airflow/dags
DAG 정의 예제
기본 DAG 구조
from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime
with DAG(
dag_id='example_dag',
start_date=datetime(2025, 1, 1),
schedule_interval='@daily',
catchup=False,
) as dag:
task_1 = BashOperator(
task_id='task_1',
bash_command='echo "Task 1"',
)
task_2 = BashOperator(
task_id='task_2',
bash_command='echo "Task 2"',
)
task_1 >> task_2
DAG 주요 파라미터
| 파라미터 | 설명 |
|---|---|
dag_id | DAG의 고유 식별자 |
start_date | DAG 시작 날짜 |
schedule_interval | 실행 주기 (Scheduling 참조) |
catchup | 과거 실행 보완 여부 |
default_args | 모든 Task에 적용될 기본 인자 |
tags | DAG 분류용 태그 |
description | DAG 설명 |
DAG 실행
실행 방식
- 자동 실행: 스케줄에 따라 자동 실행
- 수동 실행: Web UI에서 "Trigger DAG" 클릭
- 이벤트 기반: API 요청으로 실행
DAG Run
- DAG의 한 번의 실행 인스턴스
execution_date로 식별- 여러 Task Instance로 구성
DAG 상태
| 상태 | 설명 |
|---|---|
running | 현재 실행 중 |
success | 모든 Task 성공 |
failed | 하나 이상의 Task 실패 |
queued | 실행 대기 중 |
DAG 작성 Best Practices
해야 할 것
- 멱등성(Idempotent): 여러 번 실행해도 같은 결과
- 원자성(Atomic): Task는 하나의 명확한 작업만
- 명확한 task_id: 의미 있는 이름 사용
하지 말아야 할 것
- DAG 파일에서 무거운 연산 금지: 파싱 시 성능 저하
- 순환 구조 금지: A → B → A 불가능
- top-level에서 DB 접근 금지: 매 heartbeat마다 실행됨
다음 단계
- Task - DAG를 구성하는 개별 작업 단위
- Operators - Task를 실행하는 다양한 Operator
- Scheduling - DAG 실행 스케줄 설정
- Introduction - Airflow Web UI에서 DAG 확인하기