Airflow HelloWorld DAG 작성하기
Apache Airflow 공식 튜토리얼 스타일을 참고하여 PythonOperator로 Hello World를 출력하는 최소 DAG를 작성하고 실행하는 과정을 정리
Airflow HelloWorld DAG 작성하기
HelloWorld DAG 예제로 시작하기
Apache Airflow 공식 튜토리얼 예제를 단순화해, PythonOperator를 사용하여 “Hello World”를 출력하는 최소 워크플로우를 작성해본다.
1. DAG의 기본 구조
Airflow DAG 파일은 일반적으로 아래와 같은 구조를 가진다.
- 모듈 import: DAG, Operator 등을 불러온다.
- 기본 설정:
dag_id
,start_date
,schedule_interval
,default_args
등을 정의한다. - Task 정의: Operator를 통해 실행할 작업을 만든다.
- 의존성 설정:
>>
,<<
연산자로 순서를 지정한다.
2. HelloWorld DAG 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta
# 실행할 함수
def say_hello():
print("Hello World")
# 공통 기본 인자
default_args = {
'depends_on_past': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
# DAG 정의
with DAG(
dag_id='hello_world_dag',
description='A simple Hello World DAG',
start_date=datetime(2025, 9, 10),
schedule_interval='@daily',
catchup=False,
default_args=default_args,
tags=['example', 'hello']
) as dag:
# 단일 Task
hello_task = PythonOperator(
task_id='say_hello_task',
python_callable=say_hello
)
hello_task
3. 코드 설명
dag_id
: DAG 이름. Airflow UI에서 이 이름으로 표시된다.start_date
: DAG 시작일. 과거로 설정해도catchup=False
면 백필하지 않는다.schedule_interval='@daily'
: 매일 한 번 실행된다.PythonOperator
: 지정된 파이썬 함수(say_hello
) 실행.task_id
: DAG 내에서 Task를 구분하는 고유 이름.
4. DAG 실행 방법
- 저장: 위 코드를
hello_world_dag.py
로 저장한다. - 등록: 로컬 Airflow는
$AIRFLOW_HOME/dags/
에, MWAA는 S3dags/
폴더에 업로드한다. - 확인: Airflow UI → DAG 목록에서
hello_world_dag
확인. - 실행: ▶ 버튼으로 실행 후 Logs에서
Hello World
출력 확인.
5. 실행 결과
- Tree View: 날짜별 Task 실행 성공 여부(초록색 Success)를 한눈에 볼 수 있다.
- Graph View: Task 노드 하나만 표시된다.
- Logs:
INFO - Hello World
메시지 확인 가능.
6. 학습 포인트
- Airflow DAG 구조와 PythonOperator 사용법을 이해한다.
- DAG 작성 → UI 등록 → 실행/로그 확인까지의 플로우를 경험한다.
- 이후 복잡한 ETL 파이프라인으로 확장할 수 있는 토대가 된다.
마무리
HelloWorld DAG는 비록 단순하지만, Airflow의 핵심 동작 원리를 이해하는 데 가장 빠른 예제이다. 직접 작성하고 실행해보며 DAG 구조와 실행 흐름에 익숙해지는 것이 중요하다.
This post is licensed under CC BY 4.0 by the author.