전체 그래프
Airflow

DAG

data-engineeringtool/airflowdag

상위: Airflow

요약

DAG(Directed Acyclic Graph)는 Airflow에서 작업들의 실행 순서를 정의하는 방향성 비순환 그래프입니다. 방향성을 통해 작업 순서를 보장하고, 비순환 구조로 무한 루프를 방지합니다. DAG는 여러 Task로 구성되며, 스케줄에 따라 자동 실행됩니다.

DAG란?

  • Airflow에서 작업(Task)들의 실행 순서를 정의하는 그래프
  • 방향성(Directed) → 작업이 정해진 순서로 실행됨
  • 비순환(Acyclic) → 순환(Loop) 구조가 없어 무한 실행 방지

DAG

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_idDAG의 고유 식별자
start_dateDAG 시작 날짜
schedule_interval실행 주기 (Scheduling 참조)
catchup과거 실행 보완 여부
default_args모든 Task에 적용될 기본 인자
tagsDAG 분류용 태그
descriptionDAG 설명

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 확인하기

참고 자료