Apache Airflow 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
작성일: 2026.03 버전: Airflow 2.x 대상: 중급 이상

1. Apache Airflow란?

Apache Airflow는 워크플로우 오케스트레이션 플랫폼으로, 복잡한 데이터 파이프라인의 스케줄링, 모니터링, 관리를 위한 오픈소스 도구입니다. Python으로 작성된 DAG(Directed Acyclic Graph)를 통해 워크플로우를 코드로 정의합니다.

📝 코드로서의 워크플로우

Python 스크립트로 파이프라인을 정의하여 버전 관리, 테스트, 협업이 용이합니다.

⏱️ 동적 스케줄링

크론 표현식보다 유연한 스케줄링과 의존성 관리로 복잡한 실행 순서를 제어합니다.

🔌 확장성

다양한 Operator, Hook, Executor를 통해 클라우드 서비스, 데이터베이스, 도구와 연동합니다.

2. 왜 써야 하는가?

기존 배치 스케줄러와 비교한 Airflow의 장점:

도구 장점 단점 Airflow 비교
Cron 간단함, 유니버설 의존성 관리 어려움, 모니터링 부족 ✅ 의존성, 재시도, 모니터링 내장
Luigi Python 기반, Spotify 개발 스케줄링 기능 제한, 웹 UI 부족 ✅ 풍부한 UI, 강력한 스케줄러
기존 ETL 툴 GUI, 비개발자 접근성 Lock-in, 확장성 제한, 비용 ✅ 오픈소스, 코드 기반, 확장성
직접 개발 완전한 제어 유지보수 부담, 재발명 ✅ 검증된 플랫폼, 커뮤니티

💡 적합한 사용 사례

Airflow는 정기적 배치 작업, 데이터 파이프라인, ML 모델 재학습, 리포트 생성, 데이터 품질 체크에 특히 효과적입니다. 실시간 스트리밍에는 적합하지 않습니다.

3. 핵심 개념

아키텍처 개요

┌─────────────────────────────────────────────────────────┐ │ 웹 서버 (Webserver) │ │ UI & API (Flask + Gunicorn) │ └───────────────┬─────────────────────────────────────────┘ │ HTTP ┌───────────────▼─────────────────────────────────────────┐ │ 스케줄러 (Scheduler) │ │ DAG 파싱, 태스크 스케줄링, 상태 관리 │ └───────────────┬─────────────────────────────────────────┘ │ 메타데이터 DB (PostgreSQL/MySQL) ┌───────────────▼─────────────────────────────────────────┐ │ 메타데이터 데이터베이스 │ │ DAG, 태스크, 변수, 연결 정보 저장 │ └───────────────┬─────────────────────────────────────────┘ │ 큐 (Redis/RabbitMQ) ┌───────────────▼─────────────────────────────────────────┐ │ 실행기 (Executor) │ │ 로컬/셀러리/K8s (태스크 실행 방식 결정) │ └───────────────┬─────────────────────────────────────────┘ │ 작업자 (Worker) ▼ ┌──────────────┐ ┌──────────────┐ │ External │ │ External │ │ Services │ │ Databases │ │ (AWS, GCP) │ │ (PostgreSQL)│ └──────────────┘ └──────────────┘

주요 컴포넌트

4. 퀵스타트

1단계: 설치

# pip를 통한 설치 (추천)
pip install apache-airflow==2.7.0

# 제약 조건 파일 사용 (선택적)
pip install apache-airflow==2.7.0 \
 --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.7.0/constraints-3.9.txt"

2단계: 초기화 및 설정

# 환경 변수 설정 (선택적, 기본값 사용 가능)
export AIRFLOW_HOME=~/airflow

# 데이터베이스 초기화
airflow db init

# 관리자 계정 생성
airflow users create \
    --username admin \
    --firstname Admin \
    --lastname User \
    --role Admin \
    --email admin@example.com \
    --password admin123

3단계: 첫 DAG 작성

# ~/airflow/dags/first_dag.py
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.bash import BashOperator

def print_hello():
    print("Hello from Airflow!")
    return "Hello World"

default_args = {
    'owner': 'data_engineer',
    'depends_on_past': False,
    'email_on_failure': True,
    'email': ['alerts@example.com'],
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

with DAG(
    dag_id='first_dag',
    default_args=default_args,
    description='첫 번째 Airflow DAG',
    schedule_interval='0 9 * * *',  # 매일 오전 9시
    start_date=datetime(2026, 3, 1),
    catchup=False,
    tags=['tutorial', 'example'],
) as dag:
    
    task1 = BashOperator(
        task_id='print_date',
        bash_command='date',
    )
    
    task2 = PythonOperator(
        task_id='print_hello',
        python_callable=print_hello,
    )
    
    task3 = BashOperator(
        task_id='sleep',
        bash_command='sleep 5',
        retries=3,
    )
    
    task1 >> task2 >> task3  # 의존성 정의

4단계: 서비스 실행

# 웹 서버 실행 (포트 8080)
airflow webserver --port 8080

# 새 터미널에서 스케줄러 실행
airflow scheduler

# 브라우저에서 http://localhost:8080 접속
# admin/admin123 로그인

⚠️ 주의사항

운영 환경에서는 SQLite 대신 PostgreSQL/MySQL을 사용하고, 보안 설정(SSL, 강력한 비밀번호)을 적용해야 합니다. 개발 환경에서만 기본 설정을 사용하세요.

5. 핵심 설정 레퍼런스

설정 기본값 설명 권장값
executor SequentialExecutor 태스크 실행 방식 CeleryExecutor (운영)
sql_alchemy_conn sqlite:////.../airflow.db 메타데이터 DB 연결 postgresql://user:pass@host/db
parallelism 32 전체 동시 실행 태스크 수 CPU 코어 × 2 ~ 4
dag_concurrency 16 DAG별 동시 태스크 수 8 ~ 16
max_active_runs_per_dag 16 DAG별 동시 실행 수 3 ~ 5
fernet_key 생성됨 암호화 키 (변수, 연결 정보) 자체 생성 키 사용
load_examples True 예제 DAG 로드 여부 False (운영)

🔧 설정 파일 위치

주 설정 파일은 ~/airflow/airflow.cfg에 위치합니다. 환경 변수로도 오버라이드 가능: AIRFLOW__CORE__SQL_ALCHEMY_CONN

6. 실무 팁 & 트러블슈팅

자주 겪는 문제

문제: DAG가 UI에 안 보임

원인: 파싱 에러, import 오류, 스케줄러 정지

해결: airflow dags list 확인, 로그에서 에러 검색, DAG 파일 문법 검증

문제: 태스크가 "큐잉" 상태에서 멈춤

원인: Executor 문제, Worker 부족, 리소스 제한

해결: Executor 상태 확인, Worker 증설, pool 설정 검토

문제: 느린 DAG 파싱

원인: 무거운 import, 복잡한 상단 코드

해결: DAG 정의 상단을 가볍게 유지, lazy import 활용

실무 팁

🚀 성능 최적화

1. dagbag_import_timeout 증가 (기본 30초)
2. scheduler_heartbeat_sec 조정 (기본 5초)
3. PostgreSQL 사용 시 적절한 인덱스 생성
4. Pools로 리소스 제한 태스크 그룹화

7. 참고 자료

📚 학습 경로 추천

1. 공식 튜토리얼 완료 → 2. 로컬 개발 환경 구축 → 3. 간단한 DAG 작성 → 4. 커스텀 Operator/Hook 개발 → 5. 운영 환경 배포 → 6. 모니터링/알림 설정