이 글에서 다루는 것

Docker Compose로 Airflow를 로컬에 띄우고, 첫 DAG를 작성·실행·로그 확인하는 전체 과정을 다룹니다.

선수지식

  • Kubernetes 1~5단계 수료 권장 (Docker 기본 지식 필수)
  • Kubernetes를 건너뛰고 이 글부터 시작해도 됩니다 (Docker만 설치되어 있으면 가능)

이 단계에서 해결하려는 문제

ML 파이프라인은 데이터 수집 → 전처리 → 학습 → 평가 → 배포의 여러 단계로 구성됩니다. 이 단계들을 수동으로 실행하면 재현성이 없고 장애 추적이 어렵습니다. Airflow는 이 워크플로우를 DAG(방향 비순환 그래프)로 정의하고, 스케줄링·재시도·로그를 자동 관리합니다.

실습 코드: GitHub (DAG_basic)


🧭 실습 전체 흐름 요약

① Docker 설치 확인
② 공식 Airflow 예제 다운로드
③ docker-compose 실행
④ DAG UI 접속 및 실행
⑤ 로그 확인으로 정상 여부 검증

📁 실습 디렉토리 구조

airflow/
├── dags/              # DAG 파일 작성 위치
├── logs/              # 작업 로그 저장
├── plugins/           # 커스텀 플러그인 (선택)
├── docker-compose.yaml
└── .env               # AIRFLOW_UID 포함

🔧 주요 명령어 정리

# Airflow docker-compose 다운로드
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.8.2/docker-compose.yaml'
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env

# 서비스 실행
docker-compose up -d

# 접속
http://localhost:8080  (ID/PW: airflow / airflow)

💡 샘플 DAG 예시

from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime

with DAG(dag_id="hello_airflow",
         start_date=datetime(2023, 1, 1),
         schedule_interval="@daily",
         catchup=False) as dag:

    t1 = BashOperator(task_id="print_date", bash_command="date")
    t2 = BashOperator(task_id="say_hello", bash_command="echo 'Hello, Airflow!'")
    t1 >> t2

dags/hello_airflow.py로 저장 → UI에서 hello_airflow DAG 확인 → 실행 후 Task 클릭 → Logs 탭에서 출력 확인


🧼 에러 대처 팁

문제 상황해결 방법
포트 충돌docker-compose.yaml에서 포트 변경
docker 데몬 오류sudo systemctl restart docker
UI 로그인 실패기본 계정 airflow / airflow 확인
DAG 인식 안됨.py 파일이 dags/ 하위에 있는지 확인

설계 판단 (Why This Way?)

로컬에서는 Docker Compose로 빠르게 시작하되 프로덕션은 KubernetesExecutor로 전환하며, catchup=False로 과거 스케줄 자동 실행을 방지하고 start_date를 과거로 설정해야 첫 DAG 실행이 트리거됩니다.


다음에 읽을 글

Airflow 2단계: Python & Bash Operator + XCom — Operator 종류와 Task 간 데이터 전달