이 글에서 다루는 것
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_airflowDAG 확인 → 실행 후 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 간 데이터 전달