brandonwie.dev
EN / KR
On this page
devops devopsairflowcicddockerwork

Airflow CI/CD 개념

주방 비유를 통해 Airflow 배포와 CI/CD 개념을 이해해 봐요.

Updated March 22, 2026 2 min read

DAG vs ETL

DAG = 레시피 카드

DAG(Directed Acyclic Graph)는 레시피 카드와 같아요.

  • 무엇을 요리할지(어떤 task를 실행할지)
  • 언제 요리할지(스케줄: 매일, 매시간 등)
  • 어떤 순서로 할지(task A를 task B 전에)
# DAG는 그저 지시사항이에요. 실제 작업이 아니에요
with DAG('amplitude_pipeline', schedule='@daily'):
    task1 = "Fetch data from Amplitude"      # Step 1
    task2 = "Transform the data"              # Step 2
    task3 = "Save to database"                # Step 3
    task1 >> task2 >> task3   # 이 순서대로 실행

ETL = 실제 요리

ETL(Extract, Transform, Load)은 실제 작업을 수행하는 코드에요.

  • E = Extract: 데이터 가져오기(API 연결, 이벤트 다운로드)
  • T = Transform: 데이터 처리(정제, 계산, 조인)
  • L = Load: 결과 저장(S3, 데이터베이스에)

핵심 인사이트: DAG는 데이터를 처리하지 않아요. “이 컨테이너를 지금 실행해”라고 지시할 뿐이에요.

Hot-Reload vs 재시작

재시작이 필요 없는 경우 (90%)

변경 사항동작
dags/my_dag.py(신규/수정)스케줄러가 ~30초 내 자동 감지
ETL 코드(arch-etl)다음 DAG 실행 시 새 컨테이너 사용

재시작이 필요한 경우 (10%)

변경 사항재시작 이유
Airflow 버전새 이미지 = 재시작 필요
requirements.txt새 Python 패키지가 이미지에 포함돼야 함
Dockerfile이미지 변경 = 리빌드 + 재시작
.env 파일환경 변수는 컨테이너 시작 시 로드됨

배포 시나리오

시나리오조치재시작?다운타임
DAG 변경EC2에서 git pull아니오없음(~30초)
ETL 코드 변경ECR push아니오없음
Airflow 업그레이드이미지 리빌드 + 재시작~1-2분

세 저장소 패턴

저장소포함 내용배포 방법재시작?
arch-airflowDAG 파일EFS로 git pull아니오
arch-airflowAirflow 이미지ECR + docker restart예(드묾)
arch-etlETL 작업 코드ECR push아니오(자동으로 latest pull)
backend-infra인프라Terraform(1회)해당 없음

핵심 정리

  1. DAG = 레시피(무엇을/언제/순서), ETL = 요리(실제 작업)
  2. DAG는 데이터를 건드리지 않아요 - 워커에게 “이 컨테이너를 지금 실행해”라고 지시할 뿐
  3. 대부분의 배포는 재시작이 필요 없어요 - DAG와 ETL은 hot-reload돼요
  4. Airflow 이미지 변경 시에만 재시작 (버전 업그레이드, 새 패키지)
  5. arch-etl 컨테이너는 일회성 - 실행하고, 작업하고, 종료되고, 삭제돼요

Comments

enko