1. Task SDK — 태스크 실행의 분리
Airflow 3.0의 가장 근본적인 변화이다. 기존에는 Worker가 Airflow의 전체 코드베이스를 로드해야 태스크를 실행할 수 있었다. 3.0에서는 Task SDK라는 경량 런타임을 도입하여 태스크 실행을 오케스트레이터로부터 분리했다.Airflow 2.x
Airflow 3.0
새로운 import 경로
airflow.sdk 네임스페이스로 DAG 작성에 필요한 인터페이스가 통합되었다. 기존 import도 당분간 호환되지만, 새 프로젝트에서는 airflow.sdk를 사용해야 한다.
멀티 언어 지원 (로드맵)
Task SDK의 아키텍처는 Python 외의 언어도 지원할 수 있도록 설계되었다. 3.0 출시 시점에는 Python만 지원하지만, Java, Go, R 등의 SDK가 로드맵에 있다. Task Execution API가 언어 중립적인 HTTP/gRPC 인터페이스이기 때문에 가능한 구조이다.2. Asset 기반 스케줄링
Airflow 2.x에서 Dataset이라 불리던 기능이 3.0에서 Asset으로 재설계되었다. 단순히 이름만 바뀐 것이 아니라,@asset 데코레이터와 이벤트 드리븐 스케줄링이 추가되었다.
@asset 데코레이터
@asset 데코레이터는 함수 하나로 세 가지를 자동 생성한다:
- Asset (데이터 자산 정의)
- DAG (같은 이름의 DAG)
- Task (Asset을 생산하는 태스크)
조건부 Asset 스케줄링
AssetAll(AND), AssetAny(OR)로 복잡한 의존성을 선언적으로 표현할 수 있다. 2.x에서는 단순한 Dataset 트리거만 가능했다.
AssetWatcher — 외부 이벤트 감시
3. DAG Versioning
“지난주에 실행된 DAG가 지금과 같은 코드인가?” — Airflow 2.x에서는 답하기 어려운 질문이었다. DAG 파일을 업데이트하면 이전 버전이 사라졌다. Airflow 3.0은 DAG 버전을 자동으로 추적한다.- DAG 구조가 변경될 때마다 새 버전이 생성된다
- 각 DAG Run은 실행 시점의 DAG 버전에 고정된다. 실행 중에 새 버전이 업로드되어도 기존 Run은 원래 버전으로 완료된다
- UI와 API에서 과거 버전의 DAG 정의를 조회할 수 있다
4. React UI
Flask-Admin 기반의 레거시 UI가 React + FastAPI 기반으로 완전 재작성되었다.주요 개선
- 성능: DAG가 수천 개여도 빠르게 로드
- 다크 모드: 드디어 지원
- DAG 즐겨찾기/핀: 자주 사용하는 DAG를 상단에 고정
- 백필 관리: UI에서 직접 백필 생성·모니터링·중지
- 다국어: 17개 언어 지원
- Calendar/Gantt 뷰 재설계: 더 직관적인 시각화
5. Backfill 관리 개선
Airflow 2.x에서 백필은 CLI로만 실행할 수 있었고, 스케줄러와 별개로 동작했다.- UI/API/CLI 모든 경로에서 백필 실행 가능
- 비동기 실행: 여러 백필을 동시에 큐잉
- 진행 상황 추적: UI에서 태스크 단위 상태, 실시간 로그 확인
- 일시 중지/중단: UI에서 직접 제어
6. Edge Executor
Edge Executor가 GA(Generally Available)로 승격되었다. 원격/분산 환경에서 태스크를 실행할 수 있다.- 클라우드와 온프레미스를 넘나드는 하이브리드 실행
- IoT, 엣지 컴퓨팅 환경에서 태스크 실행
- 네트워크 경계를 넘는 크로스 환경 오케스트레이션
7. 조건부 태스크 실행
@task.skip_if와 @task.run_if 데코레이터로 태스크의 실행 조건을 선언적으로 정의할 수 있다. 2.x에서 BranchOperator나 ShortCircuitOperator로 복잡하게 구현하던 패턴이 한 줄로 줄어든다.
8. 제거된 기능
Airflow 2.x에서 deprecated 되었던 기능들이 3.0에서 공식 제거되었다.| 제거된 기능 | 대체 |
|---|---|
| SubDAG | TaskGroup, Asset 스케줄링 |
| SequentialExecutor | LocalExecutor |
| CeleryKubernetesExecutor | Multiple Executor 설정 |
| SLA | Deadline Alerts (로드맵) |
execution_date | logical_date |
tomorrow_ds, yesterday_ds 등 | 제거 (직접 계산) |
execution_date 제거이다. 2.x에서 광범위하게 사용되던 이 변수가 logical_date로 완전히 대체되었다. 기존 DAG에서 execution_date를 사용하고 있다면 마이그레이션이 필요하다.
마이그레이션 가이드
사전 조건
- Airflow 2.7 이상에서 업그레이드
- Python 3.9 ~ 3.12
- 메타데이터 DB 백업 필수
업그레이드 점검 도구
AIR301: 3.0에서 제거된 기능 사용AIR302: 3.0에서 변경된 기능 사용
주요 마이그레이션 포인트
- import 경로:
from airflow.sdk import ...로 전환 execution_date→logical_date: 모든 DAG에서 변경- DB 직접 접근 제거: 커스텀 Operator에서
session.query()등 제거 - SubDAG → TaskGroup: SubDAG를 사용하고 있다면 TaskGroup으로 리팩토링
- Dataset → Asset:
Dataset클래스를Asset으로 변경
핵심 정리
Airflow 3.0은 “Cron의 진화”에서 현대적 오케스트레이션 플랫폼으로의 전환이다.- Task SDK: 태스크 실행을 오케스트레이터에서 분리. 보안 강화, 원격 실행, 멀티 언어 로드맵
- Asset 스케줄링: Cron 기반에서 데이터/이벤트 기반으로.
@asset데코레이터,AssetAll/AssetAny,AssetWatcher - DAG Versioning: 실행 이력과 코드 버전의 연결. 감사 추적 가능
- React UI: 성능, 다크 모드, 백필 관리, 다국어
- Edge Executor: 하이브리드/크로스 환경 실행