개요
Data Pipeline Orchestration(데이터 파이프라인 오케스트레이션)은 데이터 파이프라인(ETL/ELT), ML 파이프라인, 배치 작업 등을 스케줄링·실행·모니터링·관리하는 도구/방법론입니다. “워크플로우의 워크플로우를 관리”하는 역할입니다.
핵심 개념
| 개념 | 설명 |
|---|
| DAG (Directed Acyclic Graph) | 태스크 간 의존 관계를 방향성 비순환 그래프로 정의 |
| Task | 실행 단위 (Python 함수, SQL 쿼리, API 호출 등) |
| Flow / Pipeline / DAG | 태스크들의 워크플로우 |
| Schedule | 실행 주기 (Cron, 이벤트 트리거 등) |
| Retry | 실패 시 자동 재시도 |
| Backfill | 과거 시점 데이터 재처리 |
| Sensor / Trigger | 외부 이벤트 감지 후 실행 |
주요 도구
Prefect
| 항목 | 내용 |
|---|
| 개발 | Prefect Technologies |
| 언어 | Python |
| 핵심 | 데코레이터 기반 — 기존 Python 코드에 @flow, @task만 추가 |
| 호스팅 | Prefect Cloud (매니지드) / Prefect Server (셀프호스팅, 오픈소스) |
| 라이선스 | Apache 2.0 |
| GitHub | https://github.com/PrefectHQ/prefect |
from prefect import flow, task
@task(retries=3, retry_delay_seconds=10)
def extract():
return [1, 2, 3]
@task
def transform(data):
return [x * 2 for x in data]
@flow(name="my-pipeline", log_prints=True)
def my_pipeline():
data = extract()
result = transform(data)
print(result) # [2, 4, 6]
my_pipeline()
특징:
- 동적 워크플로우: DAG 사전 정의 불필요, 일반 Python if/for 사용
- Prefect Cloud: UI 대시보드, 스케줄링, 알림, RBAC
- Work Pools: K8s, Docker, AWS ECS, 로컬 프로세스 등 다양한 실행 환경
- 캐싱: 태스크 결과 캐싱 (재실행 시 스킵)
- 동시성/비동기:
async 네이티브 지원, 동시 실행
- 아티팩트: 결과물 추적 (마크다운 리포트, 테이블 등)
- 이벤트 트리거: Webhook, 파일 변경, 다른 Flow 완료 시 등
Prefect 2 vs 3:
- Prefect 3 (2024+):
prefect.yaml 기반 배포, Work Pools 중심
- Prefect 2→3: Agent → Worker 전환, 간소화
Apache Airflow
| 항목 | 내용 |
|---|
| 개발 | Apache Foundation (원래 Airbnb) |
| 언어 | Python |
| 핵심 | DAG 기반 워크플로우 오케스트레이션의 원조, 가장 큰 생태계 |
| 호스팅 | 셀프호스팅 / Google Cloud Composer / AWS MWAA / Astronomer |
| 라이선스 | Apache 2.0 |
| GitHub | https://github.com/apache/airflow |
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
def extract(): return [1, 2, 3]
def transform(): return [x * 2 for x in extract()]
with DAG('my_dag', start_date=datetime(2026, 1, 1), schedule='@daily'):
t1 = PythonOperator(task_id='extract', python_callable=extract)
t2 = PythonOperator(task_id='transform', python_callable=transform)
t1 >> t2
특징:
- 데이터 파이프라인 오케스트레이션의 사실상 표준
- 2,000+ 프로바이더 패키지 (AWS, GCP, Snowflake, dbt 등)
- 강력한 UI (DAG 시각화, 로그, Gantt 차트)
- XCom: 태스크 간 데이터 전달
- Sensor: 외부 이벤트 대기 (S3 파일 도착, DB 변경 등)
- TaskFlow API (2.0+): 데코레이터 기반으로 현대화
단점:
- 설정/운영 복잡 (Scheduler, Webserver, Worker, DB, Redis)
- DAG 사전 정의 필수 (동적 워크플로우 제한적)
- 로컬 테스트 어려움
- 무거움 (소규모 프로젝트에 과도)
Dagster
from dagster import asset
@asset
def raw_users():
"""원본 사용자 데이터"""
return extract_from_api()
@asset
def clean_users(raw_users):
"""정제된 사용자 데이터"""
return raw_users.dropna()
@asset
def user_report(clean_users):
"""사용자 리포트"""
return clean_users.describe()
특징:
- Software-Defined Assets: 태스크가 아닌 “자산”으로 파이프라인 정의
- Dagster+ (Cloud): 브랜치 배포, 인사이트, 알림
- IO Manager: 자산 저장/로드 추상화 (S3, DB 등)
- Type System: 입출력 타입 검증
- Partition: 시간/카테고리별 자동 파티셔닝
- dbt 네이티브 통합: dbt 모델을 Dagster 자산으로 자동 매핑
- 테스트 용이: 로컬에서 자산 단위 테스트 가능
Mage
특징:
- 브라우저에서 노트북처럼 코드 작성 → 파이프라인 자동 생성
- 블록 기반: Loader → Transformer → Exporter
- 실시간 스트리밍 파이프라인 지원
- AI 기반 파이프라인 생성 (자연어 → 코드)
- Airflow보다 훨씬 쉬운 시작
Temporal
특징:
- 데이터 파이프라인보다 비즈니스 워크플로우 특화 (주문 처리, 결제 등)
- Workflow = 코드, Activity = 외부 호출
- 자동 재시도, 상태 복구, 타이머
- 마이크로서비스 오케스트레이션에 강함
기타
| 도구 | 특징 |
|---|
| Luigi | Spotify 개발, Airflow 이전 세대, 경량 |
| Argo Workflows | Kubernetes 네이티브 워크플로우 (YAML) |
| Apache Beam | Google Dataflow, 통합 배치+스트리밍 |
| Kedro | ML 파이프라인 특화, 프로젝트 템플릿 |
| Kestra | YAML 기반, 언어 무관, UI 강점 |
| n8n | 노코드 자동화 (Zapier 대안, 셀프호스팅) |
| Apache NiFi | 데이터 흐름 자동화, GUI 기반, IoT/실시간 |
| dbt | SQL 변환 특화 (오케스트레이션보다 Transformation) |
비교
| 도구 | 패러다임 | 동적 워크플로우 | UI | 난이도 | 생태계 | 최적 용도 |
|---|
| Airflow | DAG (태스크 중심) | 제한적 | 강력 | 높음 | 최대 | 범용 배치, 엔터프라이즈 |
| Prefect | 데코레이터 (코드 중심) | 완전 | 좋음 | 낮음 | 중간 | Python 파이프라인, 현대적 |
| Dagster | Asset 중심 | 좋음 | 좋음 | 중간 | 중간 | 데이터 자산 관리, dbt |
| Mage | 노트북 블록 | 좋음 | 최고 | 최저 | 작음 | 빠른 시작, 프로토타입 |
| Temporal | 코드 중심 | 완전 | 기본 | 중간 | 중간 | 비즈니스 워크플로우 |
| Kestra | YAML 선언적 | 좋음 | 좋음 | 낮음 | 성장 중 | 언어 무관, 범용 |
| Argo Workflows | K8s YAML | 좋음 | 기본 | 높음 | K8s | K8s 네이티브 |
Airflow vs Prefect vs Dagster
| 항목 | Airflow | Prefect | Dagster |
|---|
| 철학 | ”태스크를 언제 실행?" | "코드를 관찰 가능하게" | "자산을 어떻게 만들지?” |
| 정의 방식 | DAG + Operator | @flow + @task | @asset |
| 동적 워크플로우 | △ (Dynamic Task Mapping) | O (순수 Python) | O |
| 로컬 테스트 | 어려움 | 쉬움 (그냥 Python 실행) | 쉬움 |
| 운영 복잡도 | 높음 (5+ 컴포넌트) | 낮음 | 중간 |
| 커뮤니티 | 최대 | 중간 | 중간 |
| 매니지드 | Astronomer, MWAA, Composer | Prefect Cloud | Dagster Cloud |
| dbt 통합 | Operator | 지원 | 네이티브 |
| 적합 규모 | 중~대 | 소~대 | 중~대 |
선택 가이드(Selection Guide)
| 상황 | 추천 |
|---|
| 기존 Airflow 사용 중 | Airflow (마이그레이션 비용) |
| 새 프로젝트, Python 중심 | Prefect (가장 쉬운 시작) |
| 데이터 자산/dbt 중심 | Dagster |
| 비개발자도 사용 | Mage or Kestra |
| 비즈니스 워크플로우 | Temporal |
| K8s 네이티브 | Argo Workflows |
| 엔터프라이즈 레거시 | Airflow (가장 큰 생태계) |