Apache Airflow 개념 정리
카테고리: Data Engineering · Airflow · Workflow
Airflow란
Apache Airflow는 워크플로우 오케스트레이션 도구다.
직접 작업을 수행하지 않고,
작업들이 언제, 어떤 순서로 실행될지를 관리한다.
즉, 실행 엔진이라기보다는
작업 흐름을 제어하는 관리자에 가깝다.
기존 스케줄러와의 차이
기존에도 작업 자동화는 가능하다. (cron, 윈도우 작업 스케줄러 등)
하지만 다음과 같은 한계가 존재한다.
한계
- 작업 간 의존성 관리 어려움
- 성공/실패에 따른 분기 처리 어려움
- 재시도 로직 구성의 제한
Airflow의 특징
Airflow는 Python 기반으로 워크플로우를 정의한다.
| 기능 | 설명 |
|---|---|
| 의존성 제어 | 작업 순서를 코드로 정의 |
| 재시도 | 실패 시 자동 재실행 |
| 분기 처리 | 조건에 따라 다른 흐름 실행 |
→ 단순 스케줄러가 아니라 조건 기반 자동화 시스템
Airflow를 사용하는 이유
의존성 관리
Task A → 성공 → Task B 실행
작업 간 실행 순서를 명확하게 정의할 수 있다.
재시도 및 장애 처리
- 실패 시 일정 시간 후 재시도
- 반복 실패 시 알림 처리 가능
운영 환경에서 필수적인 기능이다.
백필 (Backfill)
데이터 수집 중 장애로 과거 데이터가 누락된 경우:
과거 시점부터 현재까지 재실행 → 데이터 복구
데이터 파이프라인에서 중요한 기능이다.
Airflow 아키텍처
| 구성 요소 | 역할 |
|---|---|
| Scheduler | 실행 대상 작업을 지속적으로 탐지하고 실행 요청 |
| Web Server | UI 제공 (모니터링, 로그 확인) |
| Metadata DB | DAG, 실행 상태, 로그 등 모든 정보 저장 |
| Executor / Worker | 실제 작업 수행 |
구성 요소 설명
Scheduler
- 항상 실행 중
- 실행 조건이 맞는 작업을 탐지하여 Executor에 전달
Web Server
- 웹 UI 제공 (
localhost:8080) - DAG 상태 및 로그 확인
Metadata Database
- 상태 관리 중심 역할
저장 정보:
- DAG 스케줄
- 실행 결과
- 로그
- 시스템 상태
Executor / Worker
| 종류 | 설명 |
|---|---|
| LocalExecutor | 단일 머신 실행 |
| CeleryExecutor | 분산 처리 |
| KubernetesExecutor | 컨테이너 기반 확장 |
핵심 개념
DAG (Directed Acyclic Graph)
하나의 워크플로우
| 특징 | 설명 |
|---|---|
| 방향성 | 작업 순서 존재 |
| 비순환 | 루프 불가 |
A → B → C (O)
A → B → A (X)
Operator
작업을 정의하는 템플릿
| Operator | 설명 |
|---|---|
| BashOperator | 쉘 명령 실행 |
| PythonOperator | Python 함수 실행 |
| SqlOperator | DB 작업 수행 |
Task
- Operator의 실행 단위
- DAG 내 하나의 노드
Task Instance
- Task가 실행된 실제 객체
- 실행 상태 포함
| 상태 | 의미 |
|---|---|
| Success | 성공 |
| Failed | 실패 |
XCom
Task 간 데이터 전달 기능
Task A → 결과 저장 → Task B에서 사용
내부 메시지 공유 구조라고 보면 된다.
사용 시 주의사항
동일 결과 보장 (Idempotency)
같은 DAG를 여러 번 실행해도
결과는 항상 동일해야 한다
데이터 중복 방지
재실행 시 데이터가 중복 저장되지 않도록 설계 필요
정리하자면 airflow는 단순한 스케줄러가 아니라 작업 흐름을 정의하고 의존성을 관리해주며, 재시도 및 장애 처리까지 포함한 데이터 파이프라인 관리 도구이다.