--apps core / --apps execution
Core API Server와 Execution API Server를 독립적으로 확장하거나 별도 머신에 배포하기 위해 분리 실행하는 옵션.
웹 스택: API 서버 설정과 운영
· administration-and-deployment/web-stack.rst (전체)
Learn · Glossary
총 413개 용어
Core API Server와 Execution API Server를 독립적으로 확장하거나 별도 머신에 배포하기 위해 분리 실행하는 옵션.
웹 스택: API 서버 설정과 운영
· administration-and-deployment/web-stack.rst (전체)
airflow state-store clean 명령의 옵션. 실제 삭제 없이 삭제 대상 행을 미리 보여준다.
태스크/에셋 상태 저장소 정리 (가비지 컬렉션 운영)
· administration-and-deployment/task-and-asset-state-store-cleanup.rst (전체)
airflow db migrate에서 실제 마이그레이션을 실행하지 않고 실행될 SQL 문만 출력하는 옵션(-s). --from-version/--to-version(-n)과 함께 사용해 오프라인 마이그레이션 스크립트를 얻는다.
Airflow 업그레이드하기: 절차와 마이그레이션 트러블슈팅
· installation/upgrading.rst (전체, L1-287)
Dag 번들 또는 PLUGINS_FOLDER에서 Airflow가 무시할 파일/디렉터리 패턴을 지정하는 파일. Airflow 3 기본 문법은 glob이다.
Dag 시각화, 문서화, 패키징, 라이프사이클 관리
· core-concepts/dags.rst - Dynamic Dags, Dag Visualization, TaskGroups, Edge Labels, Documentation, Packaging, .airflowignore, Dag Dependencies, Dag pausing/deactivation/deletion, Auto-pausing, Deadline Alerts, Testing a Dag
dags 폴더 루트에 두는 파일로, 스케줄러가 Dag를 스캔할 때 제외할 파일/폴더를 정규식(기본) 또는 glob 문법으로 지정한다.
Modules Management — PYTHONPATH, 패키징, 이름 충돌 함정
· administration-and-deployment/modules_management.rst (전체)
매핑 대상 iterable의 각 항목을 다운스트림 태스크의 전처리 단계에서 변환하는 함수. 넘기는 콜러블은 태스크가 아닌 순수 함수여야 하고, 항목을 건너뛰려면 AirflowSkipException을 raise해야 한다.
매핑 데이터 필터링·변환·결합 (filter, map(), zip, concat)
· authoring-and-scheduling/dynamic-task-mapping.rst - Filtering items from a mapped task, Transforming expanding data, Combining upstream data (aka zipping), Concatenating multiple upstreams (약 479-601줄)
데코레이팅된 태스크를 재사용하면서 task_id, retries 등 일부 메타데이터만 바꿔 다시 호출할 수 있게 해주는 메서드.
TaskFlow API로 파이썬답게 ETL 작성하기
· docs/Airflow/docs/tutorial/taskflow.rst (전반부: The Big Picture ~ Task Parameterization)
여러 업스트림 iterable을 매핑 대상으로 결합하는 두 방식. zip은 같은 인덱스끼리 튜플로 묶고(기본은 최단 길이 기준), concat은 여러 iterable을 순서대로 이어붙인다.
매핑 데이터 필터링·변환·결합 (filter, map(), zip, concat)
· authoring-and-scheduling/dynamic-task-mapping.rst - Filtering items from a mapped task, Transforming expanding data, Combining upstream data (aka zipping), Concatenating multiple upstreams (약 479-601줄)
Asset과 그 Asset을 발행하는 단일 태스크짜리 Dag를 자동 생성하는 데코레이터. @asset.multi는 한 태스크가 여러 Asset에 발행하는 경우의 shorthand다.
Asset 이벤트 발행·소비와 AssetAlias, 크로스팀 접근제어
· authoring-and-scheduling/assets.rst - Creating a task to emit asset events, Fetching information from previously emitted asset events, Output to multiple assets, Dynamic data events emitting and asset creation through AssetAlias, Cross-team asset event filtering with producer_teams
Annotation 기반 API의 세 핵심 어노테이션. 각각 태스크 컨테이너 클래스, 태스크 메서드, 업스트림 XCom 주입 파라미터를 표시하며 컴파일 타임에 보일러플레이트가 생성된다.
Java SDK - 실행 모델과 두 가지 태스크 작성 API
· authoring-and-scheduling/language-sdks/java.rst - Java SDK (도입부), Prerequisites, Quick start, Writing tasks: Annotation-based API, Interface-based API (약 18-256줄)
TaskFlow 인자로 쓰이는 커스텀 객체가 XCom으로 직렬화 가능하도록 지원되는 데코레이터. 커스텀 serialize()/deserialize() 메서드로 직접 제어할 수도 있다.
TaskFlow API — @task로 Dag 작성하기
· core-concepts/taskflow.rst
다운스트림 태스크 ID(또는 목록, 또는 None)를 반환하는 함수를 분기 태스크로 만드는 TaskFlow 데코레이터. BranchPythonOperator의 TaskFlow 대응 버전이다.
Dag 제어 흐름 — 분기, Trigger Rule, Depends On Past
· core-concepts/dags.rst - Control Flow (Branching, Latest Only, Depends On Past, Trigger Rules, Setup and teardown)
Dag의 그래프 구조를 바꾸지 않고, 런타임 조건에 따라 특정 태스크의 실행 여부만 제어하는 TaskFlow 데코레이터.
TaskFlow 고급 패턴: 실행 환경 격리, 센서, 조건부 실행
· docs/Airflow/docs/tutorial/taskflow.rst (후반부: Advanced TaskFlow Patterns)
Python 함수만으로 재사용 가능한 센서를 정의하는 TaskFlow 데코레이터. poke/reschedule 모드를 지원한다.
TaskFlow 고급 패턴: 실행 환경 격리, 센서, 조건부 실행
· docs/Airflow/docs/tutorial/taskflow.rst (후반부: Advanced TaskFlow Patterns)
DB 마이그레이션 중 발견된 호환되지 않는(손상된) 데이터를 원본 테이블에서 옮겨 담아두는 임시 테이블. 검토 후 직접 삭제해야 웹서버 경고가 사라진다.
Airflow 업그레이드하기: 절차와 마이그레이션 트러블슈팅
· installation/upgrading.rst (전체, L1-287)
auth manager가 발급한 JWT를 Airflow UI에 전달하는 데 쓰는, httponly로 설정해야 하는 쿠키 이름.
Auth Manager 개념과 커스텀 구현
· core-concepts/auth-manager/index.rst 전체
구독자가 [triggerer] shared_stream_ack_timeout(기본 5분) 안에 이벤트 처리를 끝내지 못했을 때 filter_shared_stream 안에서 발생하는 예외. 그 구독자의 트리거만 강제 실패한다.
이벤트 기반 스케줄링 심화: Shared Stream 패턴
· authoring-and-scheduling/event-scheduling.rst - Sharing one poll across sibling triggers (What is and isn't shared, Suitable upstreams, Producer-side ack channel, Ordering guarantee, Triggerer restart/Durability/queue overflow) (versionadded 3.3)
producer.advance에 전달되는, 한 이벤트를 각 구독자가 어떻게 resolve했는지(수락/실패/거부) 개수를 담은 정보. is_clean으로 전원 수락 여부를 확인할 수 있다.
이벤트 기반 스케줄링 심화: Shared Stream 패턴
· authoring-and-scheduling/event-scheduling.rst - Sharing one poll across sibling triggers (What is and isn't shared, Suitable upstreams, Producer-side ack channel, Ordering guarantee, Triggerer restart/Durability/queue overflow) (versionadded 3.3)
airflow-go-pack이 실행 파일에 덧붙이는 메타데이터 푸터 매직. Dag 소스와 airflow-metadata.yaml 매니페스트를 실행 파일 하나에 embed해 별도 아카이브 없이 배포 가능하게 한다.
Go SDK - 번들 빌드/패키징과 배포, 코디네이터 설정
· authoring-and-scheduling/language-sdks/go.rst - Go entry point, Coordinator configuration, Building and packaging, Cross-platform builds, Deploying, ExecutableCoordinator configuration, Limitations (약 133-427줄)
async 태스크 안에서 이벤트 루프를 막지 않고 task state store에 접근하는 비동기 메서드.
Task State Store API 상세 — get/set/delete/clear와 활용 패턴
· core-concepts/task-state-store.rst 전체 (Airflow 3.3에 추가)
Asset을 기술하는 표준 포맷을 정의하는 Airflow Improvement Proposal. HookLineageCollector가 이 포맷에 맞춰 Asset을 구성한다.
Lineage — HookLineageCollector와 수집 한도(실험적 기능)
· administration-and-deployment/lineage.rst (전체)
Flask AppBuilder(FAB)를 Airflow core 의존성에서 제거하기로 한 Airflow 개선 제안(Airflow Improvement Proposal).
레거시 권한 모듈 폐기와 API 엔드포인트 권한 참조
· security/deprecated_permissions.rst (전체), security/api_permissions_ref.rst (자동 생성 레퍼런스, 요약)
ruff의 Airflow 전용 lint 규칙 그룹. AIR301/302는 Airflow 3의 파괴적 변경, AIR311/312는 파괴적이지 않지만 권장되는 변경을 탐지한다.
Airflow 3 업그레이드 (1): 아키텍처 변화, 사전 준비, Dag 호환성 점검
· installation/upgrading_to_airflow3.rst, 'Understanding Airflow 3.x Architecture Changes' ~ 'Step 4' (L1-194)
기존 설정을 Airflow 3 호환 여부로 점검(및 --fix로 자동 수정)하는 CLI 명령.
Airflow 3 업그레이드 (2): DB 직접 접근 제거 대응과 배포 전환
· installation/upgrading_to_airflow3.rst, 'Step 5' ~ 'Step 8' (L196-347)
Dag run 전체를 로컬에서 실행하고 메타데이터 DB에 상태를 기록하는 CLI 명령. 프로그래밍적으로는 dag.test()에 대응한다.
로지컬 데이트와 파이프라인 테스트
· docs/Airflow/docs/tutorial/fundamentals.rst (후반부: 타임존 ~ Testing Your Pipeline)
메타데이터 데이터베이스에 쌓인 오래된 Dag/태스크 실행 이력과 이벤트 로그를 정리하는 Airflow CLI 명령.
메타데이터 DB 유지보수, 안전한 업그레이드/다운그레이드 절차
· best-practices.rst - "Metadata DB maintenance" ~ "Prune data before upgrading" 섹션 (약 914-952행)
메타데이터 DB에 필요한 테이블/마이그레이션을 적용하는 명령. 이미 적용된 마이그레이션을 추적해 반복 실행해도 안전하다. 2.7.0부터 airflow db upgrade를 대체.
프로덕션 배포: 인프라 구성과 무중단 라이브 업그레이드
· administration-and-deployment/production-deployment.rst (DB 백엔드 ~ Kerberos 절)
Airflow 메타데이터 DB 스키마를 생성하거나 최신 버전으로 갱신하는 CLI 명령. Airflow 2.7.0부터 airflow db upgrade를 대체했다.
데이터베이스 준비하기: airflow db migrate
· installation/setting-up-the-database.rst (전체, L1-39)
스케줄러 Job 테이블의 하트비트를 확인해 스케줄러 생존 여부를 판단하는 CLI 명령.
Airflow 헬스체크: HTTP 엔드포인트와 CLI 체크
· administration-and-deployment/logging-monitoring/check-health.rst (전체)
REST API를 감싼 공식 클라이언트 라이브러리(apache-airflow-client). Airflow 3에서 태스크가 메타데이터에 접근하는 권장 방법.
Airflow 3 업그레이드 (2): DB 직접 접근 제거 대응과 배포 전환
· installation/upgrading_to_airflow3.rst, 'Step 5' ~ 'Step 8' (L196-347)
DB 초기화, 관리자 계정 생성, scheduler/dag-processor/triggerer/api-server 전체 컴포넌트 기동을 한 번에 처리하는 로컬 실행용 명령.
빠르게 설치하고 첫 실행해보기 (Quick Start)
· docs/Airflow/docs/start.rst - Quick Start
태스크 상태 저장소의 만료된 행을 삭제하는 CLI 명령. 자동 스케줄 없이 사용자가 명시적으로 실행해야 한다.
태스크/에셋 상태 저장소 정리 (가비지 컬렉션 운영)
· administration-and-deployment/task-and-asset-state-store-cleanup.rst (전체)
태스크 인스턴스 하나를 로컬에서 즉석 실행해 로그를 확인하는 CLI 명령. DB에 상태를 기록하지 않는다.
로지컬 데이트와 파이프라인 테스트
· docs/Airflow/docs/tutorial/fundamentals.rst (후반부: 타임존 ~ Testing Your Pipeline)
Dag 번들 설정의 team_name들을 DB 팀 목록과 동기화하고 누락된 기본 풀을 만드는 CLI 명령(3.3.0+).
Multi-Team 개요와 리소스 격리
· core-concepts/multi-team.rst - 개요, Core Concepts, Resource Isolation, Enabling Multi-Team Mode, Creating/Managing Teams, Configuring Team Resources (L18-343)
apache-airflow 메타 패키지가 의존하는, Airflow 핵심 기능을 실제로 구현하는 패키지.
의존성 구조: Extras, Provider 패키지, 시스템 의존성
· installation/dependencies.rst (전체, L1-91)
BashOperator, PythonOperator 등 과거 airflow-core에 번들되어 있던 기본 Operator/Sensor를 분리해 담은 provider 패키지.
Airflow 3 업그레이드 (1): 아키텍처 변화, 사전 준비, Dag 호환성 점검
· installation/upgrading_to_airflow3.rst, 'Understanding Airflow 3.x Architecture Changes' ~ 'Step 4' (L1-194)
Dag 작성자가 Dag을 구현할 때 사용하는 별도 배포 패키지. Airflow 3 아키텍처에서 태스크 실행 인터페이스의 기반이 된다.
의존성 구조: Extras, Provider 패키지, 시스템 의존성
· installation/dependencies.rst (전체, L1-91)
esbuild로 TypeScript 엔트리 모듈과 의존성을 bundle.mjs 하나로 묶고 매니페스트를 base64 주석으로 embed하는 빌드 도구.
TypeScript SDK - Dag/DagRegistry 구조와 빌드·배포
· authoring-and-scheduling/language-sdks/typescript.rst - TypeScript SDK (전체, 실험적/베타, 약 324줄)
스케줄러의 Dag 프로세서 매니저가 Dag 파일 처리 활동을 보고할 때 사용하는 로거.
로깅과 모니터링 개요 및 아키텍처
· administration-and-deployment/logging-monitoring/index.rst, logging-architecture.rst (전체)
Airflow 3.0부터 Dag 작성자와 태스크 실행의 1차 Public Interface가 된 네임스페이스(AIP-72). DAG, task, Connection, Variable 등을 포함한다.
Airflow 3.0+ Public Interface란 무엇인가 - airflow.sdk와 Dag 작성자 인터페이스
· public-airflow-interface.rst - 문서 도입부 ~ "Hooks" 섹션 (약 18-256행)
태스크 로그의 부모 로거. 오퍼레이터/훅은 각각 airflow.task.operators.*, airflow.task.hooks.* 하위 자식 로거를 사용한다.
로깅과 모니터링 개요 및 아키텍처
· administration-and-deployment/logging-monitoring/index.rst, logging-architecture.rst (전체)
Dag run conf의 예약 키. true/false로 그 실행의 헤드 샘플링 여부를 강제하며, 생략하면 샘플러가 결정한다.
트레이스 설정: OpenTelemetry 트레이싱과 Run Conf 제어
· administration-and-deployment/logging-monitoring/traces.rst (전체)
Airflow가 설정 파일, 로그, Dag 등을 저장하는 홈 디렉터리를 가리키는 환경변수. 기본값은 ~/airflow이며 설치 전에 지정해야 한다.
빠르게 설치하고 첫 실행해보기 (Quick Start)
· docs/Airflow/docs/start.rst - Quick Start
DB 접근 없이 Variable/Connection의 존재를 시뮬레이션하기 위해 os.environ에 설정하는 환경 변수 네이밍 규칙.
Dag 테스트 전략 - Loader Test, 단위 테스트, Self-Check, 스테이징
· best-practices.rst - "Testing a Dag" ~ "Staging environment" 섹션 (약 669-912행)
Dag를 의도적으로 스킵할 때 던지는 예외. Violation과 달리 UI나 import_error 테이블에 기록되지 않는다.
Cluster Policies — 클러스터 전역 Dag/Task 검증과 변형
· administration-and-deployment/cluster-policies.rst (전체)
cluster policy 안에서 발생시켜 특정 Dag를 특정 Airflow 배포의 DagBag에 로드하지 않도록 건너뛰게 만드는 예외. Airflow 2.7에서 추가됨.
Dag 변경 직후 트리거 자제, Watcher 패턴, AirflowClusterPolicySkipDag
· best-practices.rst - "Triggering Dags after changes" ~ "Using AirflowClusterPolicySkipDag..." 섹션 (약 497-621행)
Dag/태스크가 클러스터 정책을 위반했을 때 던지는 예외. Airflow UI와 import_error 테이블에 기록된다.
Cluster Policies — 클러스터 전역 Dag/Task 검증과 변형
· administration-and-deployment/cluster-policies.rst (전체)
java.util.logging 사용 시 태스크 실행 전 명시적으로 호출해야 하는 초기화 함수. 기본 ConsoleHandler를 제거하고 AirflowJulHandler로 교체해 로그 중복/오분류를 막는다.
Java SDK - 로깅 프레임워크 연동 (JPL/SLF4J/Log4j2/JUL)
· authoring-and-scheduling/language-sdks/java.rst - Logging, System.Logger (JPL), SLF4J 2.x, Log4j 2, java.util.logging, Other frameworks (약 258-412줄)
플러그인이 상속해야 하는 베이스 클래스. name·macros·external_views·react_apps·fastapi_apps 등 등록 가능한 빌딩 블록을 클래스 속성으로 정의한다.
Plugins — External View/React App/FastAPI 확장과 스코핑
· administration-and-deployment/plugins.rst (전체)
Execution API가 Connection/Variable 조회를 401/403으로 거부했을 때 SDK가 raise하는 PermissionError 서브클래스. 덜 제한적인 백엔드로의 fall-through를 막는다.
현재 격리의 한계 - DB 자격증명 탈취와 JWT 우회 리스크
· security/security_model.rst - "Current isolation limitations" 섹션 (약 433-544행)
태스크 코드 안에서 raise해 상태를 직접 제어하는 특수 예외. 전자는 skipped로, 후자는 남은 재시도를 무시하고 즉시 failed로 표시한다.
Task와 Task Instance — 상태와 생명주기
· core-concepts/tasks.rst - Relationships, Task Instances, Task states, Timeouts, SLAs, Special Exceptions
executor = alias:ExecutorClass 문법으로 동일 클래스의 서로 다른 인스턴스를 구분해 참조하는 이름.
다중 실행기 동시 운용과 별칭(Alias)
· core-concepts/executor/index.rst - Using Multiple Executors Concurrently (2.10.0+), Statically-coded Hybrid Executors
전역과 팀에서 동일 실행기 클래스를 쓸 때 특정 인스턴스를 구분해 가리키기 위한 실행기 별칭 문법.
Multi-Team 실행기 설정과 트리거러 스코핑
· core-concepts/multi-team.rst - Team-based Executor Configuration, Dag Bundle to Team Association, How Scheduling Works, Team-scoped Triggerer (L345-665)
팀 없는(글로벌) Dag 또는 API 사용자가 이 자산의 이벤트를 트리거할 수 있는지를 제어하는 AssetAccessControl 필드(기본 True).
Multi-Team 자산 이벤트 필터링과 메트릭
· core-concepts/multi-team.rst - Team-Based Asset Event Filtering, Team-based Metrics, Important Considerations (L666-1156)
schedule에서 여러 Asset 조건을 조합하는 논리 연산자. &는 모두 갱신, |는 하나라도 갱신되면 트리거된다.
조건식 기반 Asset 스케줄링과 확장
· authoring-and-scheduling/asset-scheduling.rst - Event-driven scheduling (Push/Pull), Advanced asset scheduling with conditional expressions, Scheduling based on asset aliases, Combining asset and time-based schedules
Airflow 3에서 메타데이터 DB에 접근하는 유일한 창구. REST API, UI 내부 API, 태스크 실행 인터페이스(Task Execution API)를 함께 서빙한다.
Airflow 3 업그레이드 (1): 아키텍처 변화, 사전 준비, Dag 호환성 점검
· installation/upgrading_to_airflow3.rst, 'Understanding Airflow 3.x Architecture Changes' ~ 'Step 4' (L1-194)
REST API와 UI를 제공하는 컴포넌트. Task SDK를 쓰는 태스크가 메타데이터 DB에 직접 접근하지 않고 상태를 전달하는 통로 역할도 한다.
Airflow 아키텍처 개요 (컴포넌트와 배포 형태)
· core-concepts/overview.rst
API 서버를 가변 URL 경로 prefix 뒤에 배포할 때 설정하는 옵션. 함께 core__execution_api_server_url도 갱신해야 한다.
웹 스택: API 서버 설정과 운영
· administration-and-deployment/web-stack.rst (전체)
Airflow 3용 Helm 차트에서 과거 webserver 아래 있던 설정 키들이 이동한 새 최상위 키.
Airflow 3 업그레이드 (2): DB 직접 접근 제거 대응과 배포 전환
· installation/upgrading_to_airflow3.rst, 'Step 5' ~ 'Step 8' (L196-347)
External View·React App을 특정 dag_tags/dag_ids/task_ids/operators/operator_names로 스코핑하는 선택적 블록. UI 표시 편의 기능일 뿐 인가 경계가 아니다.
Plugins — External View/React App/FastAPI 확장과 스코핑
· administration-and-deployment/plugins.rst (전체)
데이터의 논리적 그룹을 URI로 표현한 Airflow의 개체. Airflow 2.4에서 'Dataset'이라는 이름으로 도입되었고 3.0에서 'Asset'으로 개명되었다.
Asset란 무엇인가 (정의, URI 규칙, 보안)
· authoring-and-scheduling/assets.rst - Asset Definitions, What is valid URI?, Extra information on assets, Security Warnings (앞부분, versionadded 2.4 / versionchanged 3.0)
특정 asset의 업스트림 생산자·다운스트림 소비자를 포함한 리니지를 시각화하고, asset 이벤트를 수동 트리거할 수 있는 뷰.
Asset Views(Asset List/Graph, Dag 오버레이)와 Admin Views
· ui.rst - "Asset Views" ~ "Admin Views" 섹션 (약 464-574행)
특정 run과 무관하게 자산(asset)에 스코프되어 무기한 보존되는 key/value 저장소.
Task/Asset State Store 개요 — 언제 무엇을 쓰나
· core-concepts/task-and-asset-state-store.rst 전체 (Airflow 3.3에 추가)
Asset materialization이 Dag를 트리거하는 기능. "Trigger Dag" 권한(수동 트리거 통제)과는 별개의 권한 경로다.
RBAC 예외 사항, Asset 트리거, Deployment Manager의 책임
· security/security_model.rst - "Custom RBAC limitations" ~ "Future: multi-team isolation" 섹션 (약 830-924행)
Multi-Team 모드에서 어느 팀이 발행한(producer_teams) 또는 소비할 수 있는(consumer_teams) Asset 이벤트인지, 글로벌 Dag 참여를 허용할지(allow_global)를 지정하는 설정.
Asset 이벤트 발행·소비와 AssetAlias, 크로스팀 접근제어
· authoring-and-scheduling/assets.rst - Creating a task to emit asset events, Fetching information from previously emitted asset events, Output to multiple assets, Dynamic data events emitting and asset creation through AssetAlias, Cross-team asset event filtering with producer_teams
Asset의 고정 속성(URI 등)이 실행 전에 정해지지 않을 때 쓰는 안정적인 이름. 태스크 실행 시점에 실제 Asset으로 해석(resolve)된다.
Asset 이벤트 발행·소비와 AssetAlias, 크로스팀 접근제어
· authoring-and-scheduling/assets.rst - Creating a task to emit asset events, Fetching information from previously emitted asset events, Output to multiple assets, Dynamic data events emitting and asset creation through AssetAlias, Cross-team asset event filtering with producer_teams
Asset 갱신 1회를 나타내는 레코드. extra, timestamp, source_dag_run 등의 정보를 담는다.
Asset 기반 스케줄링 기초 (schedule=[asset]과 트리거 이벤트 조회)
· authoring-and-scheduling/asset-scheduling.rst - Quickstart, Schedule Dags with assets, Multiple assets, Fetching information from a triggering asset event (versionadded 2.4)
Asset 조건식 기반 트리거와 시간 기반 타임테이블을 함께 쓸 수 있게 해주는 스케줄. 두 종류의 실행이 서로 독립적으로 발생한다.
조건식 기반 Asset 스케줄링과 확장
· authoring-and-scheduling/asset-scheduling.rst - Event-driven scheduling (Push/Pull), Advanced asset scheduling with conditional expressions, Scheduling based on asset aliases, Combining asset and time-based schedules
시간 기반 타임테이블과 Asset 조건식을 함께 지정해, 정기 실행과 Asset 트리거 실행을 독립적으로 만들어내는 특수 타임테이블.
Timetable - Data Interval 계열, EventsTimetable, AssetOrTimeSchedule
· authoring-and-scheduling/timetable.rst - Built-in Timetables: DeltaDataIntervalTimetable, CronDataIntervalTimetable, EventsTimetable, AssetOrTimeSchedule
외부 이벤트 소스(메시지 큐 등)를 모니터링하다가 관련 이벤트가 발생하면 대응하는 Asset을 갱신하는 클래스. Asset의 watchers 파라미터로 연결한다.
이벤트 기반 스케줄링 기초 (AssetWatcher와 BaseEventTrigger)
· authoring-and-scheduling/event-scheduling.rst - Event-driven scheduling (개요), Supported triggers for event-driven scheduling, Avoid infinite scheduling, Use cases for event-driven Dags (versionadded 3.0)
HITL 승인/거부 태스크에서 응답 가능한 사용자를 제한하는 설정. {id, name}을 모두 포함한 딕셔너리 리스트로 지정한다.
HITL(Human-in-the-Loop)로 사람의 판단을 워크플로우에 통합하기
· docs/Airflow/docs/tutorial/hitl.rst
async def로 정의되어 이벤트 루프 위에서 동시 I/O를 처리하는 Python 전용 태스크(3.2+).
Resumable Tasks와 Durable Execution — 세 가지 접근법
· core-concepts/resumable-tasks.rst 전체 (Airflow 3.3.0에 추가)
하나의 태스크가 한 가지 책임만 수행하도록 설계해, 실패 시 처음부터 재시작해도 중간 상태가 남지 않게 하는 설계 원칙.
프로덕션 Dag 설계 원칙 — 멱등성, Atomic Task, 코드 구조
· Section 3, 5 (pp.7, 10-11) — Idempotency, Atomic Execution, Gold Standard 구조
감사 로그 전체 열람을 허용하는 권한. 개별 DAG 접근 권한과 별도로 부여되며, 이 권한이 있으면 모든 DAG의 감사 기록을 볼 수 있다.
감사 로그(Audit Log)와 이벤트 로그의 구분
· security/audit_logs.rst — Understanding Audit/Event Logs, Scope of Audit Logging, Event Catalog, Anatomy, Query 섹션
인증/인가 로직을 캡슐화해 /auth/token 같은 엔드포인트와 권한 체크를 구현하는 Airflow의 플러그형 컴포넌트.
보안 섹션 개요와 Public API 인증 기초
· security/index.rst, security/api.rst (전체)
Airflow 3.3부터 도입된, HITL 태스크가 사람의 응답을 기다리는 동안 사용하는 스케줄러 관리 태스크 상태. 워커 슬롯과 트리거러를 점유하지 않는다.
HITL(Human-in-the-Loop)로 사람의 판단을 워크플로우에 통합하기
· docs/Airflow/docs/tutorial/hitl.rst
Human-in-the-loop 태스크가 사람의 응답을 기다리는 Task Instance 상태. 스케줄러가 관리하며 워커 슬롯과 트리거러 어느 쪽도 사용하지 않는다는 점에서 deferred와 구별된다.
Task와 Task Instance — 상태와 생명주기
· core-concepts/tasks.rst - Relationships, Task Instances, Task states, Timeouts, SLAs, Special Exceptions
휴먼 인 더 루프(Human-in-the-loop) 기능에서 태스크 인스턴스가 사람의 입력을 기다리는 상태를 나타내는 감사 이벤트.
감사 로그(Audit Log)와 이벤트 로그의 구분
· security/audit_logs.rst — Understanding Audit/Event Logs, Scope of Audit Logging, Event Catalog, Anatomy, Query 섹션
[secrets] 섹션에서 Secrets Backend의 __init__에 전달할 추가 인자를 JSON으로 지정하는 설정. 개별 키는 AIRFLOW__SECRETS__BACKEND_KWARG__<KEY> 환경 변수로도 지정 가능하다.
Secrets Backend 아키텍처와 Local Filesystem 백엔드
· security/secrets/secrets-backend/index.rst (전체), security/secrets/secrets-backend/local-filesystem-secrets-backend.rst (전체)
사용자가 UI/CLI로 명시적인 과거 날짜 범위를 지정해 Dag를 다시 실행시키는 절차. catchup과 달리 명시적 트리거가 필요하다.
Catchup, Backfill, 재실행과 태스크 클리어
· core-concepts/dag-run.rst - Catchup, Backfill, Re-run Tasks, Task Instance History, External Triggers, Passing Parameters, Wait for a Dag Run
Dag의 과거 논리적 날짜 구간에 대해 run을 생성하는 기능.
Backfill — 과거 날짜 재처리
· core-concepts/backfill.rst 전체
과거 날짜들에 대해 Dag Run을 트리거하는 UI 창. Single Run(즉시 1회 트리거)과 구분된다.
Dag Run View/트리거 창과 Task Instance View의 탭 구성
· ui.rst - "Dag Run View" ~ "Task Instance Tabs" 섹션 (약 260-462행)
모든 Airflow auth manager 구현체가 따라야 하는 공개 인터페이스 클래스.
Auth Manager 개념과 커스텀 구현
· core-concepts/auth-manager/index.rst 전체
사용자 인증/인가를 담당하는 auth manager의 베이스 클래스. 인터페이스는 공개이나 FabAuthManager 등 구체 구현체는 공개가 아니다.
Public Interface 확장 지점 - Trigger, Timetable, Executor, Auth Manager, Secrets Backend
· public-airflow-interface.rst - "Public Airflow utilities" ~ "Lineage" 섹션 (약 258-528행)
self.asset_state_store를 통해 워처(watcher) 방식으로 자산 이벤트를 감시하는 Trigger 기반 클래스.
Asset State Store API 상세 — 워터마크 패턴과 Watcher Trigger
· core-concepts/asset-state-store.rst 전체 (Airflow 3.3에 추가)
이벤트 기반 스케줄링에 쓸 수 있는 트리거의 베이스 클래스. BaseTrigger의 부분집합이며, 이 클래스를 상속한 트리거만 Asset 스케줄링에 쓸 수 있다.
이벤트 기반 스케줄링 기초 (AssetWatcher와 BaseEventTrigger)
· authoring-and-scheduling/event-scheduling.rst - Event-driven scheduling (개요), Supported triggers for event-driven scheduling, Avoid infinite scheduling, Use cases for event-driven Dags (versionadded 3.0)
모든 executor가 파생되는 공개 베이스 클래스. 인터페이스 자체는 공개지만 KubernetesExecutor 등 내장 구현체는 공개가 아니다.
Public Interface 확장 지점 - Trigger, Timetable, Executor, Auth Manager, Secrets Backend
· public-airflow-interface.rst - "Public Airflow utilities" ~ "Lineage" 섹션 (약 258-528행)
모든 오퍼레이터가 상속하는 기반 클래스. task_id, retries 등 태스크 실행에 필요한 공통 인자를 정의한다.
첫 Dag 작성하기: Operator와 Task, 의존성
· docs/Airflow/docs/tutorial/index.rst + docs/Airflow/docs/tutorial/fundamentals.rst (전반부: Dag 정의 파일 ~ 의존성 설정)
커스텀 Secrets Backend가 상속해야 하는 기반 클래스. get_connection/get_conn_value, get_variable, get_config를 구현한다.
Secrets Backend 아키텍처와 Local Filesystem 백엔드
· security/secrets/secrets-backend/index.rst (전체), security/secrets/secrets-backend/local-filesystem-secrets-backend.rst (전체)
모든 secrets backend가 파생되는 베이스 클래스. Executor와 달리 커뮤니티의 모든 구현체가 공개로 취급된다.
Public Interface 확장 지점 - Trigger, Timetable, Executor, Auth Manager, Secrets Backend
· public-airflow-interface.rst - "Public Airflow utilities" ~ "Lineage" 섹션 (약 258-528행)
모든 센서가 상속하는 기반 클래스(Task SDK에 구현). poke_interval, timeout, mode, soft_fail, exponential_backoff, max_wait 등 공통 파라미터를 제공한다.
Sensors — 외부 이벤트를 기다리는 Operator
· core-concepts/sensors.rst
태스크/에셋 상태 저장소의 백엔드가 구현해야 하는 베이스 클래스. get/set/delete/clear와 비동기 버전을 정의한다.
태스크/에셋 상태 저장소 설정 (Airflow 3.3+)
· administration-and-deployment/task-and-asset-state-store.rst (전체)
커스텀 Trigger가 상속하는 베이스 클래스. __init__/run/serialize를 구현하고, 선택적으로 cleanup/on_kill 훅을 둘 수 있다.
Deferrable Operator와 Trigger 직접 작성하기
· authoring-and-scheduling/deferring.rst - Writing Deferrable Operators, Writing Triggers, Sensitive information in triggers (약 70-183줄)
실행 바이너리에 Dag 소스와 dag_id/task_id 매니페스트를 푸터로 embed한, 하나의 실행 파일로 배포 가능한 산출물.
비-Python 언어 SDK 개요 (Stub Task, Coordinator, 실행 모델)
· authoring-and-scheduling/language-sdks/index.rst - Non-Python Task SDKs (전체, 실험적 기능)
DagModel이 갖는 파싱 버전 필드. Dag processor가 파일을 재파싱할 때마다 갱신되며, 각 Dag 실행은 생성 시점의 이 값을 기록한다.
Dag Bundles — Dag 소스 관리와 버저닝
· administration-and-deployment/dag-bundles.rst (전체)
Go 번들의 엔트리 포인트 인터페이스. RegisterDags가 등록하는 dag_id/task 목록이 번들이 실행 가능한 유일한 목록이자 매니페스트의 진실 공급원이 된다.
Go SDK - 번들 빌드/패키징과 배포, 코디네이터 설정
· authoring-and-scheduling/language-sdks/go.rst - Go entry point, Coordinator configuration, Building and packaging, Cross-platform builds, Deploying, ExecutableCoordinator configuration, Limitations (약 133-427줄)
Asset 이벤트를 생성할 수 있는 권한. 암묵적 신뢰 모델 아래에서는 그 Asset에 의존하는 모든 다운스트림 Dag를 트리거할 수 있는 권한과 사실상 동등하다.
Asset란 무엇인가 (정의, URI 규칙, 보안)
· authoring-and-scheduling/assets.rst - Asset Definitions, What is valid URI?, Extra information on assets, Security Warnings (앞부분, versionadded 2.4 / versionchanged 3.0)
Dag의 start_date~현재 사이 놓친 예약 실행 시각들에 대해 스케줄러가 Dag Run을 소급 생성하는 동작. catchup=True로 켜며, 기본값은 False다.
Catchup, Backfill, 재실행과 태스크 클리어
· core-concepts/dag-run.rst - Catchup, Backfill, Re-run Tasks, Task Instance History, External Triggers, Passing Parameters, Wait for a Dag Run
과거 시점부터의 미실행 스케줄을 한꺼번에 실행할지 여부를 결정하는 설정. 기본값 False이며 [scheduler] catchup_by_default로 전역 변경 가능하다.
Timetable 비교: Trigger vs Data Interval, catchup
· authoring-and-scheduling/timetable.rst - Timetables comparisons (Differences between trigger and data interval timetables, Differences between the cron and delta data interval timetables)
kinit으로 생성된 Kerberos 티켓 캐시 파일. 기본 위치(/tmp/airflow_krb5_ccache)는 world-readable이라 프로덕션에서는 전용 디렉터리로 옮겨야 한다.
Kerberos 인증 설정과 운영상 주의점
· security/kerberos.rst (전체)
chain은 태스크를 순차적으로(또는 같은 크기 리스트 간 페어와이즈로) 잇는 헬퍼, cross_downstream은 한 태스크 목록을 다른 태스크 목록 전체에 교차 의존시키는 헬퍼.
Dag 선언과 태스크 의존성
· core-concepts/dags.rst - Declaring a Dag, Task Dependencies, Loading Dags, Dag Assignment, Default Arguments, The Dag decorator
run()이 어떤 사유로든(성공, 타임아웃, 트리거러 종료, 사용자 kill) 종료된 뒤 항상 호출되는 훅. 로컬 리소스(연결, 임시 파일) 정리에 사용한다.
Deferrable Operator와 Trigger 직접 작성하기
· authoring-and-scheduling/deferring.rst - Writing Deferrable Operators, Writing Triggers, Sensitive information in triggers (약 70-183줄)
[state_store] 설정. True면 태스크가 success 상태가 될 때 해당 태스크의 task state store 키를 모두 자동 삭제한다.
Task State Store API 상세 — get/set/delete/clear와 활용 패턴
· core-concepts/task-state-store.rst 전체 (Airflow 3.3에 추가)
Airflow 3.1+ 직렬화 Dag JSON에 포함되는 섹션으로, Task SDK별 공통 기본값(tasks.retry_delay, tasks.owner 등)을 담는다.
Dag Serialization — Webserver 경량화와 3.1 버전 계약
· administration-and-deployment/dag-serialization.rst (전체)
Celery Executor에서 큐 단위로 태스크를 분리해 워커 간 격리를 강화하는 데 사용할 수 있는 Airflow의 정책 메커니즘.
Executor별 코드 실행 컨텍스트와 Scheduler/API Server 보호
· security/security_model.rst - "Security contexts for Dag author submitted code" ~ "Access to all Dags" 섹션 (약 267-350행)
supports_pickling, is_local, is_single_threaded 등 실행기가 지원하는 기능을 Airflow 코어에 알리는 불리언 속성들.
커스텀 실행기 작성하기 — BaseExecutor 인터페이스
· core-concepts/executor/index.rst - Writing Your Own Executor (Workloads, BaseExecutor Methods, Compatibility Attributes, CLI, Logging)
Google OS Login을 활용해 GCE 인스턴스에 SSH 접근하는 Airflow Hook. 단명 키, PAM, nsswitch 통합, 인스턴스 이름 기반 접근을 지원한다.
프로덕션 배포: GCP 환경에서의 보안 접근 구성
· administration-and-deployment/production-deployment.rst (Secured Server and Service Access on Google Cloud 절)
하나의 Connection을 식별하는 고유 이름. Hook과 템플릿에서 이 이름으로 접속 정보를 조회한다.
커넥션과 훅 (Connections & Hooks)
· authoring-and-scheduling/connections.rst - Connections & Hooks, Hooks, Custom connections (전체, 52줄)
ObjectStoragePath URL의 사용자 이름 부분이나 키워드 인자로 지정하는, 인증에 사용할 Airflow 커넥션 식별자. 키워드 인자가 URL 값보다 우선한다.
Object Storage로 클라우드 네이티브 워크플로우 만들기
· docs/Airflow/docs/tutorial/objectstorage.rst
Airflow가 외부 시스템(DB, 클라우드 등)에 연결하는 데 필요한 자격증명·호스트 정보를 저장하는 오브젝트. conn_id로 Dag 코드에서 참조한다.
SQL 기반 데이터 파이프라인 구축하기
· docs/Airflow/docs/tutorial/pipeline.rst
Connection을 구성할 수 있는 역할. Airflow 3부터 민감 자격증명에 write-only 권한만 가지며 값을 조회할 수 없다.
보안 모델 개요 - Deployment Manager, Dag Author, Authenticated UI User
· security/security_model.rst - "Airflow security model - user types" ~ "Capabilities of authenticated UI users" 섹션 (약 18-186행)
특정 Airflow 버전·Python 버전 조합에서 검증된 의존성 버전을 고정해, 설치를 재현 가능하게 만들어주는 파일.
빠르게 설치하고 첫 실행해보기 (Quick Start)
· docs/Airflow/docs/start.rst - Quick Start
Airflow 릴리스 시점에 검증된 의존성 버전 조합을 고정해 놓은 파일. pip install 시 --constraint로 지정해 반복 가능한 설치를 보장한다.
Airflow 설치 방법 개요: 로컬 빠른 시작부터 관리형 서비스까지
· installation/index.rst (전체, L1-415)
릴리스 시점에 테스트를 통과한 의존성 버전 조합을 고정한 파일. constraints-<version> 태그의 Python 버전별 파일로 관리된다.
PyPI 설치 (1): pipx/uv 설치와 Constraint 파일의 원리
· installation/installing-from-pypi.rst, 'Installation via pipx/uv' ~ 'Fixing Constraints at release time' (L1-262)
Airflow 커뮤니티가 모든 커뮤니티 프로바이더를 포함해 충돌 없이 설치 가능함을 보장하는 고정된 의존성 버전 집합. 사전 정의된 오퍼레이터 사용 시 의존성 충돌 위험을 낮춘다.
충돌하는 Python 의존성 처리 - Virtualenv/ExternalPython/Docker/K8s Pod 비교
· best-practices.rst - "Handling conflicting/complex Python dependencies" ~ "Using multiple Docker Images and Celery Queues" 섹션 (약 954-1198행)
특정 Airflow 버전이 테스트를 통과한 의존성 버전의 스냅샷. 릴리스 이후에는 거의 갱신되지 않는다.
보안 패치 릴리스 정책, SBOM, 서드파티 취약점과 SQL Injection 신고 기준
· security/releasing_security_patches.rst, security/sbom.rst, security/vulnerabilities-in-3rd-party-dependencies.rst, security/sql.rst (모두 전체, 절차/정책 문서 특성상 핵심 원칙 위주로 압축)
Airflow core에만 의존성을 한정한, 일반 constraint보다 범위가 좁은 파일. provider를 설치하지 않는 환경에 적합하지만 기존 provider와 충돌 가능성이 있다.
PyPI 설치 (2): 설치·업그레이드 시나리오와 트러블슈팅
· installation/installing-from-pypi.rst, 'Installation and upgrade scenarios' ~ 끝 (L263-401)
생산 태스크의 outlet 자산 정의(AssetAccessControl)에 선언하는, 이 태스크의 이벤트를 받을 수 있는 소비자 팀 목록. None(무제한)과 [](자기 팀만)은 의미가 다르다.
Multi-Team 자산 이벤트 필터링과 메트릭
· core-concepts/multi-team.rst - Team-Based Asset Event Filtering, Team-based Metrics, Important Considerations (L666-1156)
[sdk] coordinators에 등록되는, Airflow 워커의 일부로 취급되는 파이썬 객체. stub 태스크의 queue에 매핑되어 대상 언어 런타임을 실행하고 결과를 중계한다.
비-Python 언어 SDK 개요 (Stub Task, Coordinator, 실행 모델)
· authoring-and-scheduling/language-sdks/index.rst - Non-Python Task SDKs (전체, 실험적 기능)
run_as_user가 지정되지 않은 태스크에 적용할 기본 impersonation 사용자를 지정하는 설정.
Workload 격리 - Impersonation과 실행 격리 현황
· security/workload.rst (전체)
Cross-Origin Resource Sharing. 브라우저 스크립트가 다른 오리진으로 보내는 요청을 제한하는 브라우저 보안 메커니즘.
보안 섹션 개요와 Public API 인증 기초
· security/index.rst, security/api.rst (전체)
schedule=에 순수 cron 문자열을 쓴 Dag가 Trigger 계열과 Data Interval 계열 타임테이블 중 어느 쪽으로 해석될지를 결정하는 [scheduler] 설정. Airflow 3 기본값은 False, 2.x 기본값은 True다.
Timetable 비교: Trigger vs Data Interval, catchup
· authoring-and-scheduling/timetable.rst - Timetables comparisons (Differences between trigger and data interval timetables, Differences between the cron and delta data interval timetables)
@daily, @hourly 같이 자주 쓰는 cron 패턴을 이름으로 대체한 문자열. None/@once/@continuous는 대응하는 cron 표현식이 없는 특수 프리셋이다.
Cron 표현식과 스케줄 프리셋
· authoring-and-scheduling/cron.rst - Cron & Time Intervals, Cron Presets
Airflow가 cron 표현식을 파싱할 때 쓰는 라이브러리. 'MON#1'(매월 첫째 월요일) 같은 확장 문법을 지원한다.
Cron 표현식과 스케줄 프리셋
· authoring-and-scheduling/cron.rst - Cron & Time Intervals, Cron Presets
파티션 기반 스케줄링을 지원하는 타임테이블로, backfill 시 날짜 범위를 파티션 범위로 해석시킨다.
Backfill — 과거 날짜 재처리
· core-concepts/backfill.rst 전체
cron 주기마다 파티션 키가 있는 Asset 이벤트를 만드는 producer용 타임테이블. 사전 결정 파티셔닝 방식을 쓴다.
Asset 파티션 기초 (partition_key와 PartitionedAssetTimetable)
· authoring-and-scheduling/assets.rst - Asset partitions (Pre-determined vs runtime partitioning ~ 기본 매퍼 부분, versionadded 3.2.0)
cron 표현식이 가리키는 시점마다 Dag를 실행하는 Trigger 계열 타임테이블.
Timetable 개요와 Trigger 계열 타임테이블
· authoring-and-scheduling/timetable.rst - Timetables (개요), Built-in Timetables: DeltaTriggerTimetable, CronTriggerTimetable, MultipleCronTriggerTimetable
cron 스케줄을 해석하는 두 가지 타임테이블. 전자(Airflow 3 기본)는 트리거 시각 = 데이터 인터벌 시작=끝이고, 후자는 연속된 전체 기간을 데이터 인터벌로 다룬다.
Dag Run과 데이터 인터벌
· core-concepts/dag-run.rst - Dag Run Status, Data Interval, Manual Triggering and Data Intervals
Airflow에서 워크플로우를 나타내는 핵심 단위. 태스크들의 모음과 그 사이의 의존 관계(방향 있는 비순환 그래프)로 구성된다.
Airflow란 무엇인가
· docs/Airflow/docs/index.rst - What is Airflow?, Workflows as code, Dags, Why/Why not Airflow
Dag 파일을 작성/제출하는 사용자. 그 코드는 워커, Dag File Processor, Triggerer에서 실행되며 사실상 임의 코드 실행 권한을 가진 것으로 취급된다.
보안 모델 개요 - Deployment Manager, Dag Author, Authenticated UI User
· security/security_model.rst - "Airflow security model - user types" ~ "Capabilities of authenticated UI users" 섹션 (약 18-186행)
Dag들을 담는 배포 단위로, 팀 소유권은 Dag가 아니라 이 번들 단위로 부여된다(최대 한 팀).
Multi-Team 개요와 리소스 격리
· core-concepts/multi-team.rst - 개요, Core Concepts, Resource Isolation, Enabling Multi-Team Mode, Creating/Managing Teams, Configuring Team Resources (L18-343)
Dag 파일과 딸린 리소스의 묶음. 로컬 디렉터리·Git·S3·GCS 등 다양한 소스에서 가져올 수 있으며, 타입에 따라 버저닝을 지원한다.
Dag Bundles — Dag 소스 관리와 버저닝
· administration-and-deployment/dag-bundles.rst (전체)
멀티노드 클러스터에서 모든 노드에 Dag를 동기화하고 버전 관리까지 지원하는 메커니즘. GitDagBundle이 대표적 구현체다.
프로덕션 배포: 인프라 구성과 무중단 라이브 업그레이드
· administration-and-deployment/production-deployment.rst (DB 백엔드 ~ Kerberos 절)
여러 CLI 명령의 --subdir/-S 인자를 대체하는, Dag 소스 코드 묶음을 다루는 새로운 개념.
Airflow 3 업그레이드 (3): 파괴적 변경 목록과 logical_date/data_interval 의미 변화
· installation/upgrading_to_airflow3.rst, 'Breaking Changes' ~ 끝 (L348-455)
Dag 정의 파일을 주기적으로 재파싱하여 Dag 구조 변경을 감지하는 컴포넌트. 이 때문에 Dag 파일은 빠르게 평가되어야 한다.
첫 Dag 작성하기: Operator와 Task, 의존성
· docs/Airflow/docs/tutorial/index.rst + docs/Airflow/docs/tutorial/fundamentals.rst (전반부: Dag 정의 파일 ~ 의존성 설정)
환경 내 모든 Dag를 상태/스케줄/태그와 함께 요약해 보여주는 목록 뷰. 필터/검색/정렬을 지원한다.
Airflow 3 UI 개요 - Home Page, Dag List View, Dag Details Page
· ui.rst - "UI Overview" ~ "Dag Details Page" 섹션 (약 20-128행)
python your-dag-file.py 실행만으로 Dag 로딩 에러와 파싱 시간을 확인하는, 추가 코드 작성이 필요 없는 테스트.
Dag 테스트 전략 - Loader Test, 단위 테스트, Self-Check, 스테이징
· best-practices.rst - "Testing a Dag" ~ "Staging environment" 섹션 (약 669-912행)
Dag 처리기가 Dag 파일을 파싱해오는 대상이자 워커가 올바른 버전의 Dag 파일에 접근하도록 해주는 저장소. 기본값은 로컬 디스크 폴더이며 Git 등 버전 관리 백엔드도 쓸 수 있다.
Airflow 아키텍처 개요 (컴포넌트와 배포 형태)
· core-concepts/overview.rst
Airflow가 Python 파일을 실행한 뒤 그 안에서 오직 최상위(globals()) 레벨의 Dag 인스턴스만 골라 로드하는 규칙.
Dag 선언과 태스크 의존성
· core-concepts/dags.rst - Declaring a Dag, Task Dependencies, Loading Dags, Dag Assignment, Default Arguments, The Dag decorator
일시정지는 UI/API로 즉시 전환 가능한 스케줄링 중단 상태이고, 비활성화는 DAGS_FOLDER에서 파일을 제거해야만 스케줄러가 감지해 표시하는 상태로, 서로 다른 개념이다.
Dag 시각화, 문서화, 패키징, 라이프사이클 관리
· core-concepts/dags.rst - Dynamic Dags, Dag Visualization, TaskGroups, Edge Labels, Documentation, Packaging, .airflowignore, Dag Dependencies, Dag pausing/deactivation/deletion, Auto-pausing, Deadline Alerts, Testing a Dag
Dag 번들에서 Dag 파일을 파싱해 메타데이터 데이터베이스에 직렬화하는 컴포넌트. Airflow 3부터 모든 배포에서 필수이며 항상 독립 프로세스로 실행된다.
Airflow 아키텍처 개요 (컴포넌트와 배포 형태)
· core-concepts/overview.rst
Dag 정의 파일을 주기적으로 파싱해 Dag 구조 변경을 감지·반영하는 컴포넌트.
빠르게 설치하고 첫 실행해보기 (Quick Start)
· docs/Airflow/docs/start.rst - Quick Start
Dag 객체가 제공하는 메서드로, LocalExecutor와 유사한 시뮬레이션 실행(기본) 또는 실제 설정된 Executor(use_executor=True)로 Dag를 검증 실행할 수 있다.
Dag 시각화, 문서화, 패키징, 라이프사이클 관리
· core-concepts/dags.rst - Dynamic Dags, Dag Visualization, TaskGroups, Edge Labels, Documentation, Packaging, .airflowignore, Dag Dependencies, Dag pausing/deactivation/deletion, Auto-pausing, Deadline Alerts, Testing a Dag
Dag 전체를 단일 직렬화 프로세스에서 실행하는 로컬 디버깅용 메서드.
Dag 디버깅 — dag.test()와 pdb
· core-concepts/debug.rst 전체
API 서버가 캐시한 SerializedDAG의 TTL(초). min_serialized_dag_update_interval 이후 DB 대조 시에만 갱신되어 매 요청마다 갱신되지는 않는다.
웹 스택: API 서버 설정과 운영
· administration-and-deployment/web-stack.rst (전체)
Dag 검색 시 파일 내용에 airflow와 dag 문자열이 모두 있는지만 확인하는 최적화를 켜고 끄는 [core] 설정 플래그. 끄면 모든 Python 파일을 탐색한다.
Dag 선언과 태스크 의존성
· core-concepts/dags.rst - Declaring a Dag, Task Dependencies, Loading Dags, Dag Assignment, Default Arguments, The Dag decorator
DagBag이 Dag를 로드하는 시점에 실행되는 클러스터 정책. DAG 객체 전체를 검사·변형할 수 있다.
Cluster Policies — 클러스터 전역 Dag/Task 검증과 변형
· administration-and-deployment/cluster-policies.rst (전체)
Dag를 트리거할 때 JSON blob으로 전달하는 런타임 설정. 오퍼레이터의 템플릿 필드 안에서만 참조 가능하다.
Catchup, Backfill, 재실행과 태스크 클리어
· core-concepts/dag-run.rst - Catchup, Backfill, Re-run Tasks, Task Instance History, External Triggers, Passing Parameters, Wait for a Dag Run
Dag를 트리거할 때 Param 값을 런타임에 덮어쓸 수 있는지를 제어하는 core 설정. False면 기본 Param이 사실상 상수가 된다.
Variables와 Params — 런타임 설정 전달하기
· core-concepts/variables.rst, core-concepts/params.rst
어떤 Dag 파일을 처리할지 결정하는 무한 루프 프로세스. airflow dag-processor CLI로 독립 실행되며 사용자 코드를 실행한다.
Dag File Processing — 파싱 파이프라인과 성능 튜닝
· administration-and-deployment/dagfile-processing.rst (전체)
개별 Dag 파일 하나를 파싱해 Dag 객체로 변환하는 별도 프로세스. dag_file_processor_timeout·dagbag_import_timeout의 제약을 받는다.
Dag File Processing — 파싱 파이프라인과 성능 튜닝
· administration-and-deployment/dagfile-processing.rst (전체)
TypeScript SDK에서 여러 Dag를 모아(DagRegistry) Airflow에 서빙하는(serveDags) 진입점 API. serveDags는 번들당 한 번만 호출 가능하다.
TypeScript SDK - Dag/DagRegistry 구조와 빌드·배포
· authoring-and-scheduling/language-sdks/typescript.rst - TypeScript SDK (전체, 실험적/베타, 약 324줄)
Dag run conf의 예약 키. W3C traceparent 문자열을 담아 실행 전체를 외부 트레이스의 자식으로 편입시킨다.
트레이스 설정: OpenTelemetry 트레이싱과 Run Conf 제어
· administration-and-deployment/logging-monitoring/traces.rst (전체)
Dag 실행 전체가 지정한 시간을 넘기면 강제로 실패 처리되도록 하는 Dag 레벨 타임아웃 설정.
SQL 기반 데이터 파이프라인 구축하기
· docs/Airflow/docs/tutorial/pipeline.rst
GET /api/v2/dagSources/{dag_id}. 현재 파일-Dag 매핑을 기준으로 Dag별 읽기 스코핑을 적용해 소스 코드를 반환하거나 redacted placeholder를 반환한다.
Dag Author의 Dag 접근 범위와 격리 한계 (multi-team, Per-Dag 소스 조회)
· security/security_model.rst - "Capabilities of Dag authors" ~ "Per-Dag read access and source-code retrieval" 섹션 (약 188-264행)
PostgresHook/MySqlHook 등으로 메타데이터 DB에 직접 SQL을 쿼리하는 비권장 방식. Airflow 3.2+에서 깨질 수 있다고 명시적으로 경고된다.
Airflow 3 업그레이드 (2): DB 직접 접근 제거 대응과 배포 전환
· installation/upgrading_to_airflow3.rst, 'Step 5' ~ 'Step 8' (L196-347)
Airflow 3.1에 추가된 기능으로, Dag Run의 큐잉/시작 시각 등을 기준으로 시간 임계값을 넘으면 콜백을 트리거해 알림 등을 수행한다.
Dag 시각화, 문서화, 패키징, 라이프사이클 관리
· core-concepts/dags.rst - Dynamic Dags, Dag Visualization, TaskGroups, Edge Labels, Documentation, Packaging, .airflowignore, Dag Dependencies, Dag pausing/deactivation/deletion, Auto-pausing, Deadline Alerts, Testing a Dag
Dag run이 설정된 시간 임계값을 초과했을 때 트리거되는, 생명주기 콜백과 별개인 콜백 메커니즘. AsyncCallback/SyncCallback으로 실행된다.
콜백: Dag/Task 상태 변화에 대응하기
· administration-and-deployment/logging-monitoring/callbacks.rst (전체)
Airflow 3에서 제거된 SLA를 대체하는 새 개념. 태스크/Dag의 기한 초과를 알리는 기능이다.
Airflow 3 업그레이드 (3): 파괴적 변경 목록과 logical_date/data_interval 의미 변화
· installation/upgrading_to_airflow3.rst, 'Breaking Changes' ~ 끝 (L348-455)
Debian 12 배포판. Airflow CI/CD와 공식 DockerHub 이미지에서 사용하는 기준 Linux 배포판.
사전 요구사항: 지원 Python/DB/K8s 버전과 OS 정책
· installation/prerequisites.rst (전체, L1-63)
Dag 내 여러 태스크에 공통으로 적용할 기본 파라미터를 모아둔 딕셔너리. 명시적 인자보다는 낮고, 오퍼레이터 기본값보다는 높은 우선순위를 가진다.
첫 Dag 작성하기: Operator와 Task, 의존성
· docs/Airflow/docs/tutorial/index.rst + docs/Airflow/docs/tutorial/fundamentals.rst (전반부: Dag 정의 파일 ~ 의존성 설정)
Dag 생성 시 전달하는 딕셔너리로, 그 Dag에 속한 모든 Operator에 공통 기본 인자(예: retries)를 자동 적용한다.
Dag 선언과 태스크 의존성
· core-concepts/dags.rst - Declaring a Dag, Task Dependencies, Loading Dags, Dag Assignment, Default Arguments, The Dag decorator
Sentry SDK의 기본 통합(StdlibIntegration 등)을 켜고 끄는 옵션. False로 끄면 서브프로세스 전체 환경변수 전달 부작용도 함께 사라지지만 다른 기본 통합도 꺼진다.
에러 트래킹: Sentry 연동
· administration-and-deployment/logging-monitoring/errors.rst (전체)
pool이 지정되지 않은 태스크가 배정되는 기본 Pool. 128슬롯으로 초기화되며 수정은 가능하지만 삭제할 수 없다.
Pools — 실행 병렬성 제한과 pool_slots
· administration-and-deployment/pools.rst (전체)
[core] 섹션의 설정값으로, naive datetime을 해석할 때 쓰는 기본 타임존. 기본값은 utc이며 워커를 포함한 모든 노드에서 동일해야 한다.
타임존 처리
· authoring-and-scheduling/timezone.rst - Time Zones
폴링을 Triggerer에 위임하고 워커 슬롯을 반환하는 오퍼레이터 패턴.
Resumable Tasks와 Durable Execution — 세 가지 접근법
· core-concepts/resumable-tasks.rst 전체 (Airflow 3.3.0에 추가)
대기가 필요한 시점에 자신을 defer해 워커 슬롯을 반환하고, 트리거러에서 실행되는 트리거에 폴링/대기를 위임하는 오퍼레이터.
Deferrable Operator란 무엇인가 (워커 슬롯 절약의 원리)
· authoring-and-scheduling/deferring.rst - Deferrable Operators & Triggers (도입부), Using Deferrable Operators (약 18-68줄)
각 실행에 실제 data interval(시작-끝)을 부여하는 타임테이블. CronDataIntervalTimetable은 각 인터벌이 끝나는 시점에 실행을 트리거한다.
Timetable - Data Interval 계열, EventsTimetable, AssetOrTimeSchedule
· authoring-and-scheduling/timetable.rst - Built-in Timetables: DeltaDataIntervalTimetable, CronDataIntervalTimetable, EventsTimetable, AssetOrTimeSchedule
timedelta/relativedelta 간격이 지날 때마다 Dag를 실행하는 Trigger 계열 타임테이블. data interval 개념을 다루지 않는다.
Timetable 개요와 Trigger 계열 타임테이블
· authoring-and-scheduling/timetable.rst - Timetables (개요), Built-in Timetables: DeltaTriggerTimetable, CronTriggerTimetable, MultipleCronTriggerTimetable
FastAPI 라우터 레벨에 선언된 인증 의존성. 실제 방어보다는 인증 누락 라우트 추가를 CI에서 잡아내는 회귀 방지 목적이 크다.
JWT 인증 아키텍처와 컨트롤플레인/워커플레인 신뢰 경계
· security/security_model.rst - "JWT authentication and workload isolation" 섹션, mermaid 신뢰 경계 다이어그램과 "Defense in depth at the router level" (약 352-431행)
Airflow 설치 전체를 책임지는 최고 권한 사용자. 설치/설정/기술 선택을 담당하며 모든 자격증명에 접근할 수 있다.
보안 모델 개요 - Deployment Manager, Dag Author, Authenticated UI User
· security/security_model.rst - "Airflow security model - user types" ~ "Capabilities of authenticated UI users" 섹션 (약 18-186행)
매핑된 태스크 그룹에서 그룹 내 모든 태스크가 같은 입력에 대해 함께 확장되고, 각 태스크가 같은 그룹 인스턴스의 선행 태스크에만 의존하는 실행 방식. 그룹 없이 개별 태스크를 확장하는 breadth-first 방식과 대비된다.
태스크 그룹 매핑과 depth-first 실행
· authoring-and-scheduling/dynamic-task-mapping.rst - Mapping over a task group, Value references in a task group function, Depth-first execution, Depending on a mapped task group's output, Branching on a mapped task group's output (약 346-478줄)
헬스체크 응답에서 scheduler/triggerer/dag_processor 각각의 전체 인스턴스 상태를 healthy/degraded/down으로 나타내는 필드. 레거시 status보다 HA 배포에서 유용하다.
Airflow 헬스체크: HTTP 엔드포인트와 CLI 체크
· administration-and-deployment/logging-monitoring/check-health.rst (전체)
Bundle 버전 추적 자체를 끄는 설정. 켜져 있으면 Dag 실행에 bundle_version이 기록되지 않는다.
Dag Bundles — Dag 소스 관리와 버저닝
· administration-and-deployment/dag-bundles.rst (전체)
태스크나 Dag에 Markdown 형식의 문서를 첨부하는 속성. Task Instance Details 페이지에서 KaTeX 수식, Mermaid 다이어그램까지 렌더링된다.
첫 Dag 작성하기: Operator와 Task, 의존성
· docs/Airflow/docs/tutorial/index.rst + docs/Airflow/docs/tutorial/fundamentals.rst (전반부: Dag 정의 파일 ~ 의존성 설정)
프로세스 손실에도 태스크가 처음부터 다시 시작하지 않고 이전 지점에서 이어갈 수 있는 성질.
Resumable Tasks와 Durable Execution — 세 가지 접근법
· core-concepts/resumable-tasks.rst 전체 (Airflow 3.3.0에 추가)
스케줄러에 독립적인 /health HTTP 서버를 띄우는 [scheduler] 설정. 기본값은 False.
Airflow 헬스체크: HTTP 엔드포인트와 CLI 체크
· administration-and-deployment/logging-monitoring/check-health.rst (전체)
더 이상 어떤 수정도 제공되지 않는 버전 상태. Airflow 라이프사이클 표에서 Terminated와 함께 표기된다.
버전 지원 정책과 라이프사이클
· installation/supported-versions.rst (전체, L1-71)
고정된 datetime 목록으로 Dag를 실행하는 타임테이블. 불규칙하지만 예측 가능한 일정에 쓴다.
Timetable - Data Interval 계열, EventsTimetable, AssetOrTimeSchedule
· authoring-and-scheduling/timetable.rst - Built-in Timetables: DeltaDataIntervalTimetable, CronDataIntervalTimetable, EventsTimetable, AssetOrTimeSchedule
런타임/VM/인터프리터 설치 없이 실행되는 독립 바이너리(Go, Rust 등) 전용 코디네이터. 번들 파일을 직접 실행해 태스크를 수행한다.
비-Python 언어 SDK 개요 (Stub Task, Coordinator, 실행 모델)
· authoring-and-scheduling/language-sdks/index.rst - Non-Python Task SDKs (전체, 실험적 기능)
ExecutableCoordinator가 재귀적으로 스캔해 번들을 찾는 하나 이상의 디렉터리 경로 kwargs.
Go SDK - 번들 빌드/패키징과 배포, 코디네이터 설정
· authoring-and-scheduling/language-sdks/go.rst - Go entry point, Coordinator configuration, Building and packaging, Cross-platform builds, Deploying, ExecutableCoordinator configuration, Limitations (약 133-427줄)
워커 프로세스가 태스크의 단명 자격 증명을 사용해 통신하는 대상. 태스크 코드를 실행하는 서브프로세스는 이를 거치지 않고 메타데이터 DB에 직접 접근할 수 없다.
Airflow 아키텍처 개요 (컴포넌트와 배포 형태)
· core-concepts/overview.rst
워커가 메타데이터 DB에 직접 접근하지 않고 Dag/태스크 상태 조회 및 조작을 수행하기 위해 통신하는 API. Airflow 3.0+ 아키텍처 분리의 핵심 축.
Public Interface가 아닌 것 - DB 구조/Web UI, 그리고 태스크 코드의 DB 직접 접근 금지
· public-airflow-interface.rst - "What is not part of the Public Interface" 섹션 (약 533-597행)
워커가 태스크 실행 중 사용하는 짧은 수명(기본 10분)의 표준 JWT 스코프. 자동 갱신 대상이다.
JWT 인증 (2) Execution API 스코프와 워크로드 격리 한계
· security/jwt_token_authentication.rst — Execution API Authentication Flow, Dag File Processor and Triggerer 섹션
태스크(센서 포함)의 매 실행 시도마다 허용되는 최대 시간. 초과 시 AirflowTaskTimeout이 발생한다.
Task와 Task Instance — 상태와 생명주기
· core-concepts/tasks.rst - Relationships, Task Instances, Task states, Timeouts, SLAs, Special Exceptions
태스크 인스턴스를 실제로 실행하는, 스케줄러가 사용하는 pluggable 컴포넌트.
Executor란 무엇인가 — 유형과 LocalExecutor
· core-concepts/executor/index.rst - Executor, Executor Types; core-concepts/executor/local.rst 전체
Task/Operator 인자로, KubernetesExecutor의 파드 이미지 지정처럼 사용 중인 Executor별 태스크 단위 설정을 전달하는 딕셔너리.
재시도 정책(Retry Policy)과 Heartbeat Timeout
· core-concepts/tasks.rst - Retry Policies, Task Instance Heartbeat Timeout, Executor Configuration
태스크의 특정 키워드 인자를 실행 시점 값의 리스트/딕셔너리로 매핑해, 그 개수만큼 태스크 인스턴스를 동적으로 생성하는 함수.
동적 태스크 매핑 기초 (expand, partial, task-generated/repeated mapping)
· authoring-and-scheduling/dynamic-task-mapping.rst - Simple mapping, Task-generated Mapping, Repeated mapping, Adding parameters that do not expand, Mapping over multiple parameters (약 18-182줄)
완전한 kwargs 딕셔너리의 시퀀스를 받아, 각 딕셔너리당 하나씩 태스크 인스턴스를 만드는 매핑 함수. 여러 파라미터의 cross product를 만드는 expand()와 달리 원소 개수만큼만 인스턴스가 생긴다.
이름 있는 매핑과 Classic Operator 매핑 (map_index_template, expand_kwargs)
· authoring-and-scheduling/dynamic-task-mapping.rst - Named mapping, Mapping with non-TaskFlow operators, Mapping over result of classic operators, Mixing TaskFlow and classic operators, Assigning multiple parameters to a non-TaskFlow operator (약 183-345줄)
사전에 준비되고 배포된 불변 Python 환경에서 콜러블을 실행하는 오퍼레이터(Airflow 2.4+). @task.external_python 데코레이터로도 사용 가능.
충돌하는 Python 의존성 처리 - Virtualenv/ExternalPython/Docker/K8s Pod 비교
· best-practices.rst - "Handling conflicting/complex Python dependencies" ~ "Using multiple Docker Images and Celery Queues" 섹션 (약 954-1198행)
Python setuptools의 선택적 의존성 묶음 기능. apache-airflow[postgres]처럼 대괄호 표기로 지정해 선택적 기능을 추가 설치한다.
의존성 구조: Extras, Provider 패키지, 시스템 의존성
· installation/dependencies.rst (전체, L1-91)
Asset 정의에 붙일 수 있는 부가 메타데이터 딕셔너리. Asset의 정체성에는 영향을 주지 않으며, 같은 URI에 값이 여러 번 선언되면 어느 값이 저장될지 보장되지 않는다.
Asset란 무엇인가 (정의, URI 규칙, 보안)
· authoring-and-scheduling/assets.rst - Asset Definitions, What is valid URI?, Extra information on assets, Security Warnings (앞부분, versionadded 2.4 / versionchanged 3.0)
감사 로그 엔트리에 담기는 JSON 형식의 부가 컨텍스트(파라미터, 에러 상세 등).
감사 로그(Audit Log)와 이벤트 로그의 구분
· security/audit_logs.rst — Understanding Audit/Event Logs, Scope of Audit Logging, Event Catalog, Anatomy, Query 섹션
RollupMapper의 반대 개념으로, 하나의 업스트림 이벤트를 Window가 열거하는 멤버 수만큼의 다운스트림 실행으로 펼치는 파티션 매퍼.
Asset 파티션 심화 (Rollup·FanOut 매퍼와 대기 정책)
· authoring-and-scheduling/assets.rst - Rollup mappers, Wait policies, Segment (categorical) rollup, Setting partition keys at runtime, Fan-out mappers, Window direction, Custom partition mappers/windows/timetables (versionadded 3.3.0)
Connection 비밀번호와 Variable 값을 저장 시 암호화하는 데 쓰이는 대칭키. airflow.cfg의 [core] fernet_key 또는 AIRFLOW__CORE__FERNET_KEY 환경 변수로 설정한다.
Fernet 암호화와 민감정보 마스킹
· security/secrets/fernet.rst (전체), security/secrets/mask-sensitive-values.rst (전체), security/secrets/index.rst (개요)
Dag 파일 하나를 파싱하는 단위 프로세스. 파일 하나는 FileProcessor 하나로만 처리되므로 한 파일에 Dag가 많으면 확장성이 떨어진다.
Dag 복잡도를 낮추는 네 가지 실천 방향
· best-practices.rst - "Reducing Dag complexity" 섹션 (약 622-667행)
Airflow 코어가 제공하는 태스크 로그 파일 핸들러 인터페이스. 파일 저장과 실행 중 로그 서빙을 함께 담당한다.
태스크 로깅: 파일 저장, 원격 로깅, 로그 서빙
· administration-and-deployment/logging-monitoring/logging-tasks.rst (전체)
Celery 클러스터의 태스크/워커 상태를 모니터링·관리하는 웹 기반 도구. Airflow CeleryExecutor 환경에서 선택적으로 사용한다.
Flower 웹 UI 보안
· security/flower.rst (전체)
Flower에 HTTP Basic 인증을 적용하기 위한 [celery] 섹션의 Airflow 설정 키. user:password 쌍을 콤마로 구분해 지정한다.
Flower 웹 UI 보안
· security/flower.rst (전체)
Airflow가 프로덕션 로그 수집 도구로 권장하는 로그 포워더. 로그를 ElasticSearch나 Splunk 등으로 전달한다.
로깅과 모니터링 개요 및 아키텍처
· administration-and-deployment/logging-monitoring/index.rst, logging-architecture.rst (전체)
Python 멀티프로세싱 워커 생성 방식. fork는 parallelism만큼 한꺼번에, spawn은 필요할 때마다 하나씩 워커를 만든다.
Executor란 무엇인가 — 유형과 LocalExecutor
· core-concepts/executor/index.rst - Executor, Executor Types; core-concepts/executor/local.rst 전체
다양한 파일시스템·오브젝트 스토리지 백엔드를 공통 인터페이스로 다룰 수 있게 해주는 Python 라이브러리. ObjectStoragePath와 DuckDB가 공유해 상호운용성을 얻는다.
Object Storage로 클라우드 네이티브 워크플로우 만들기
· docs/Airflow/docs/tutorial/objectstorage.rst
Airflow의 Object Storage 추상화가 기반으로 삼는, 파일시스템 스펙을 통일하는 Python 라이브러리.
Object Storage 추상화 — ObjectStoragePath
· core-concepts/objectstorage.rst 전체 (Airflow 2.8.0에 추가)
advance 호출의 순서 보장 범위를 전체가 아닌 레인 단위로 좁히는 오버라이드 메서드. Kafka에서는 (topic, partition)을 레인으로 써서 파티션별로만 순서를 보장한다.
이벤트 기반 스케줄링 심화: Shared Stream 패턴
· authoring-and-scheduling/event-scheduling.rst - Sharing one poll across sibling triggers (What is and isn't shared, Suitable upstreams, Producer-side ack channel, Ordering guarantee, Triggerer restart/Durability/queue overflow) (versionadded 3.3)
FAB 전용인 Dag.access_control 대신, 커스텀 auth manager가 Dag 레벨 접근 제어를 구현할 때 쓰도록 권장되는 메서드.
Auth Manager 개념과 커스텀 구현
· core-concepts/auth-manager/index.rst 전체
태스크 콜러블에 컨텍스트 변수를 직접 전달하지 않고도, 호출 스택 어디서든 실행 컨텍스트를 조회할 수 있게 해주는 함수.
TaskFlow 고급 패턴: 실행 환경 격리, 센서, 조건부 실행
· docs/Airflow/docs/tutorial/taskflow.rst (후반부: Advanced TaskFlow Patterns)
Task Context(ti)가 제공하는 메서드들. 직접 DB 접근 없이 각각 Dag Run 개수, 특정 run의 상태, 태스크 상태 정보를 조회한다.
Public Interface가 아닌 것 - DB 구조/Web UI, 그리고 태스크 코드의 DB 직접 접근 금지
· public-airflow-interface.rst - "What is not part of the Public Interface" 섹션 (약 533-597행)
공개키 암호를 이용해 배포 파일이 실제로 해당 서명자(릴리스 매니저)가 만든 것인지 확인하는 절차. gpg --verify로 수행한다.
소스에서 설치하기: 공식 배포판과 무결성 검증
· installation/installing-from-sources.rst (전체, L1-163)
태스크 간 의존성(노드=태스크, 엣지=의존성)을 보여주는 뷰. 특정 Dag Run을 선택해 그 실행의 태스크 상태를 구조 위에 겹쳐 볼 수 있다.
Grid View / Graph View와 Dag 하위 탭(Runs/Tasks/Events/Code/Details)
· ui.rst - "Grid View" ~ "Details Tab" 섹션 (약 129-259행)
행=태스크, 열=Dag Run으로 배치된 상태 매트릭스. 태스크 셀을 클릭해 로그 확인이나 상태 수동 변경(성공/실패/clear)이 가능하다.
Grid View / Graph View와 Dag 하위 탭(Runs/Tasks/Events/Code/Details)
· ui.rst - "Grid View" ~ "Details Tab" 섹션 (약 129-259행)
Hadoop에서 특정 서비스 계정(Airflow)이 다른 사용자를 대신해(impersonate) 작업을 수행할 수 있게 허용하는 core-site.xml 설정 그룹.
Kerberos 인증 설정과 운영상 주의점
· security/kerberos.rst (전체)
워크플로우를 일시 정지시키고 사람의 입력(승인, 옵션 선택 등)을 기다렸다가 재개하는 Airflow 3.1+ 기능.
HITL(Human-in-the-Loop)로 사람의 판단을 워크플로우에 통합하기
· docs/Airflow/docs/tutorial/hitl.rst
HITL 요청을 조회(GET)하고 응답을 제출(PATCH)하는 Airflow REST API 엔드포인트. UI 없이도 응답을 자동화할 수 있게 해준다.
HITL(Human-in-the-Loop)로 사람의 판단을 워크플로우에 통합하기
· docs/Airflow/docs/tutorial/hitl.rst
Airflow 3의 기본 랜딩 페이지. 시스템 컴포넌트 헬스, 상태별 빠른 링크, Dag/Task 이력, 최근 asset 이벤트를 보여준다.
Airflow 3 UI 개요 - Home Page, Dag List View, Dag Details Page
· ui.rst - "UI Overview" ~ "Dag Details Page" 섹션 (약 20-128행)
Connection의 자격증명을 이용해 외부 시스템과 통신하는 고수준 파이썬 인터페이스. Operator 구현의 빌딩 블록으로 쓰인다.
커넥션과 훅 (Connections & Hooks)
· authoring-and-scheduling/connections.rst - Connections & Hooks, Hooks, Custom connections (전체, 52줄)
훅이 보고하는 입력/출력 asset과 부가 데이터를 모으는 전역 수집기. AIP-60 호환 Asset을 구성한다.
Lineage — HookLineageCollector와 수집 한도(실험적 기능)
· administration-and-deployment/lineage.rst (전체)
수집된 lineage 데이터를 읽어내는 인터페이스. Airflow 플러그인의 hook_lineage_readers에 등록해야 동작하며, 미등록 시 NoOpCollector가 대체된다.
Lineage — HookLineageCollector와 수집 한도(실험적 기능)
· administration-and-deployment/lineage.rst (전체)
리스너가 구현해야 하는 이벤트별 함수 시그니처(파라미터 이름 포함)를 정의한 명세. 구현체는 이 파라미터 이름을 정확히 따라야 한다.
Listeners — Pluggy 기반 이벤트 알림과 버전 호환성
· administration-and-deployment/listeners.rst (전체)
대칭키 기반 HMAC-SHA512 서명 알고리즘. 발급자와 검증자가 동일한 비밀키(jwt_secret)를 공유해야 한다.
JWT 인증 (1) REST API 흐름과 서명 방식
· security/jwt_token_authentication.rst — Overview, Signing and Cryptography, REST API Authentication Flow 섹션
Dag File Processor/Triggerer가 네트워크 호출 없이 같은 프로세스 안에서 Execution API를 호출하며 JWT 검증과 리소스 접근 제어를 건너뛰는 방식.
JWT 인증 (2) Execution API 스코프와 워크로드 격리 한계
· security/jwt_token_authentication.rst — Execution API Authentication Flow, Dag File Processor and Triggerer 섹션
Task 인터페이스를 직접 구현해 등록과 XCom 처리를 완전히 제어하는 방식. 리플렉션으로 인스턴스화되므로 public, 구체 클래스, public 무인자 생성자, static 중첩 클래스라는 네 제약을 따라야 한다.
Java SDK - 실행 모델과 두 가지 태스크 작성 API
· authoring-and-scheduling/language-sdks/java.rst - Java SDK (도입부), Prerequisites, Quick start, Writing tasks: Annotation-based API, Interface-based API (약 18-256줄)
블롭 스토리지 원격 로깅 핸들러가 여러 파일의 로그를 시간순으로 병합할 때 사용하는 타임스탬프 파서를 오버라이드하는 설정.
태스크 로깅: 파일 저장, 원격 로깅, 로그 서빙
· administration-and-deployment/logging-monitoring/logging-tasks.rst (전체)
Multi-Team을 지원하려면 auth manager가 구현해야 하는 두 메서드. 팀 소속 인가 확인과 팀 목록 반환을 담당한다.
Multi-Team 개요와 리소스 격리
· core-concepts/multi-team.rst - 개요, Core Concepts, Resource Isolation, Enabling Multi-Team Mode, Creating/Managing Teams, Configuring Team Resources (L18-343)
멀티팀 배포에서 읽기 전용 뷰를 특정 팀으로 제한하기 위해 3.4.0에 추가된 선택 인자.
Auth Manager 개념과 커스텀 구현
· core-concepts/auth-manager/index.rst 전체
.jar 파일을 재귀적으로 스캔하는 하나 이상의 디렉터리를 지정하는 JavaCoordinator 필수 kwargs.
Java SDK - XCom 타입 매핑, 빌드/패키징(Gradle·Maven), 코디네이터 설정과 제약
· authoring-and-scheduling/language-sdks/java.rst - XCom type mapping, Building and packaging (Gradle/Maven), JavaCoordinator configuration, Pinning the Java executable, Limitations (약 413-750줄)
태스크 인스턴스마다 새 JVM 서브프로세스를 띄워 Java 태스크를 실행하는 코디네이터.
Java SDK - 실행 모델과 두 가지 태스크 작성 API
· authoring-and-scheduling/language-sdks/java.rst - Java SDK (도입부), Prerequisites, Quick start, Writing tasks: Annotation-based API, Interface-based API (약 18-256줄)
{{ var.value.<name> }} 같은 템플릿 필드는 Dag 파싱 시점이 아니라 태스크가 실제 실행되는 시점에 값이 평가되는 성질.
동적 Dag 생성과 Airflow Variables/Timetable의 top-level 성능 함정
· best-practices.rst - "Dynamic Dag Generation" ~ "Timetables" 섹션 (약 369-495행)
JWT ID claim. 토큰을 고유하게 식별하는 UUID4 값으로, revoked_token 테이블에서 폐기 여부를 추적하는 키로 쓰인다.
JWT 인증 (1) REST API 흐름과 서명 방식
· security/jwt_token_authentication.rst — Overview, Signing and Cryptography, REST API Authentication Flow 섹션
JSON Web Key Set. 비대칭 서명 검증에 쓰이는 공개키 목록을 제공하는 엔드포인트 또는 파일 포맷.
JWT 인증 (1) REST API 흐름과 서명 방식
· security/jwt_token_authentication.rst — Overview, Signing and Cryptography, REST API Authentication Flow 섹션
JSON Web Key Set. 비대칭 키 JWT 서명에서 API Server가 토큰 검증에 사용하는 공개 키를 제공하는 엔드포인트.
배포 하드닝 - 컴포넌트별 민감정보 분리와 향후 개선 방향
· security/security_model.rst - "Deployment hardening for improved isolation" 섹션, 컴포넌트별 민감정보 표와 mermaid 다이어그램 (약 546-827행)
JSON Web Token. 요청자의 신원과 권한 정보를 담아 서명한 토큰으로, Airflow Public API 인증의 기본 수단이다.
보안 섹션 개요와 Public API 인증 기초
· security/index.rst, security/api.rst (전체)
토큰 검증 시 컴포넌트 간 시계 오차(clock skew)를 허용하는 여유 시간(기본 10초).
JWT 인증 (1) REST API 흐름과 서명 방식
· security/jwt_token_authentication.rst — Overview, Signing and Cryptography, REST API Authentication Flow 섹션
쿠버네티스에서 Keytab 접근 권한을 가진 토큰 갱신 컨테이너와, 그 토큰만 공유 볼륨으로 읽는 워커 컨테이너를 같은 파드에 두는 보안 패턴.
프로덕션 배포: 인프라 구성과 무중단 라이브 업그레이드
· administration-and-deployment/production-deployment.rst (DB 백엔드 ~ Kerberos 절)
Kerberos principal의 장기 자격증명을 담은 파일. kadmin의 xst 명령으로 생성하며 chmod 600으로 보호해야 한다.
Kerberos 인증 설정과 운영상 주의점
· security/kerberos.rst (전체)
Airflow의 모든 태스크를 K8s 위에서 각각 별도 파드로 실행하는 executor. 클러스터 전역 실행 방식을 결정한다.
Kubernetes — Executor, KubernetesPodOperator, Pod Mutation Hook
· administration-and-deployment/kubernetes.rst (전체)
태스크를 별도의 Kubernetes 파드에서, 메인 Airflow 환경과 완전히 분리해 실행하는 오퍼레이터. Airflow 2.4+와 Kubernetes 프로바이더가 필요하다.
TaskFlow 고급 패턴: 실행 환경 격리, 센서, 조건부 실행
· docs/Airflow/docs/tutorial/taskflow.rst (후반부: Advanced TaskFlow Patterns)
Dag 안의 한 태스크로서 K8s 파드를 생성·실행하는 오퍼레이터. executor 종류와 무관하게 쓸 수 있다.
Kubernetes — Executor, KubernetesPodOperator, Pod Mutation Hook
· administration-and-deployment/kubernetes.rst (전체)
현재 실행이 '최신' Dag Run이 아닌 경우 자신의 모든 다운스트림 태스크를 스킵시키는 특수 오퍼레이터로, 분기의 한 형태다.
Dag 제어 흐름 — 분기, Trigger Rule, Depends On Past
· core-concepts/dags.rst - Control Flow (Branching, Latest Only, Depends On Past, Trigger Rules, Setup and teardown)
[core] 설정. 기본 True로, 플러그인을 프로세스 시작 시 한 번만 로드하고 재로드하지 않는다. False로 하면 매 프로세스 시작마다 로드한다.
Plugins — External View/React App/FastAPI 확장과 스코핑
· administration-and-deployment/plugins.rst (전체)
매핑된 태스크들의 결과를 모아 받을 때 쓰이는 지연 시퀀스 타입. 인덱싱/순회는 가능하지만 list()로 변환하면 전체 값을 즉시 로드한다.
동적 태스크 매핑 기초 (expand, partial, task-generated/repeated mapping)
· authoring-and-scheduling/dynamic-task-mapping.rst - Simple mapping, Task-generated Mapping, Repeated mapping, Adding parameters that do not expand, Mapping over multiple parameters (약 18-182줄)
보안 패치와 치명적 버그 수정만 제공되는 버전 지원 단계. 신규 기능이나 일반 버그 수정은 제공되지 않는다.
버전 지원 정책과 라이프사이클
· installation/supported-versions.rst (전체, L1-71)
문자열을 매크로 렌더링과 파일 참조 렌더링 모두로부터 제외하고 그대로 값을 쓰도록 감싸는 헬퍼(2.8 추가).
Operators와 Jinja 템플릿
· core-concepts/operators.rst
JSON/YAML/.env 파일로부터 Connection/Variable/Config를 읽어오는 내장 Secrets Backend. 개발 환경 동기화와 Kubernetes Secret 마운트에 적합하다.
Secrets Backend 아키텍처와 Local Filesystem 백엔드
· security/secrets/secrets-backend/index.rst (전체), security/secrets/secrets-backend/local-filesystem-secrets-backend.rst (전체)
queue 필드를 이용해 두 실행기를 정적으로 결합했던 하이브리드 실행기. Airflow 3.0.0부터 폐지됨.
다중 실행기 동시 운용과 별칭(Alias)
· core-concepts/executor/index.rst - Using Multiple Executors Concurrently (2.10.0+), Statically-coded Hybrid Executors
Airflow 메타데이터 DB에서 감사 로그를 저장하는 구조화된 테이블. dttm/event/owner/extra 등의 컬럼을 가진다.
감사 로그(Audit Log)와 이벤트 로그의 구분
· security/audit_logs.rst — Understanding Audit/Event Logs, Scope of Audit Logging, Event Catalog, Anatomy, Query 섹션
태스크 정의 시 지정하는 속성으로, 같은 오퍼레이터를 쓰는 여러 태스크의 로거를 서로 다르게 분리할 수 있게 한다.
고급 로깅 설정: 커스텀 로거와 로그 크기 제한
· administration-and-deployment/logging-monitoring/advanced-logging-configuration.rst (전체)
airflow.cfg에서 커스텀 로깅 dictConfig 딕셔너리의 임포트 경로를 지정하는 옵션. 이름과 달리 클래스가 아니라 dict를 가리킨다.
고급 로깅 설정: 커스텀 로거와 로그 크기 제한
· administration-and-deployment/logging-monitoring/advanced-logging-configuration.rst (전체)
Dag 실행(Dag run)에 이름을 붙이는 기준 타임스탬프. 태스크가 실제로 실행되는 시각이 아니라, 그 실행이 "어느 시점을 위한" 것인지를 나타낸다.
로지컬 데이트와 파이프라인 테스트
· docs/Airflow/docs/tutorial/fundamentals.rst (후반부: 타임존 ~ Testing Your Pipeline)
Dag run의 run_id에 반영되는 논리적 기준 시각. Trigger 타임테이블은 트리거 시각을, Data Interval 타임테이블은 data_interval_start를 앵커로 계산한다.
Timetable 비교: Trigger vs Data Interval, catchup
· authoring-and-scheduling/timetable.rst - Timetables comparisons (Differences between trigger and data interval timetables, Differences between the cron and delta data interval timetables)
logical_date는 사용자가 트리거 시 지정/의도한 논리적 실행 시점, data_interval은 timetable이 계산한 실제 처리 구간. Airflow 3의 수동 트리거에서는 둘이 자동으로 일치한다고 가정할 수 없다.
Airflow 3 업그레이드 (3): 파괴적 변경 목록과 logical_date/data_interval 의미 변화
· installation/upgrading_to_airflow3.rst, 'Breaking Changes' ~ 끝 (L348-455)
매핑된 태스크 인스턴스의 UI 표시 이름을 정수 인덱스 대신 Jinja 템플릿으로 지정하는 옵션. 각 확장 인스턴스 실행 후 태스크 컨텍스트로 렌더링된다.
이름 있는 매핑과 Classic Operator 매핑 (map_index_template, expand_kwargs)
· authoring-and-scheduling/dynamic-task-mapping.rst - Named mapping, Mapping with non-TaskFlow operators, Mapping over result of classic operators, Mixing TaskFlow and classic operators, Assigning multiple parameters to a non-TaskFlow operator (약 183-345줄)
dag.test() 호출 시 지정한 task_id 정규식에 매칭되는 태스크를 실행하지 않고 성공 처리하는 인자.
Dag 디버깅 — dag.test()와 pdb
· core-concepts/debug.rst 전체
airflow.sdk.log가 제공하는 함수. Dag/Operator 코드에서 특정 값을 로그 출력 전에 마스킹 대상으로 등록한다.
Fernet 암호화와 민감정보 마스킹
· security/secrets/fernet.rst (전체), security/secrets/mask-sensitive-values.rst (전체), security/secrets/index.rst (개요)
한 태스크의 동시 실행 인스턴스 수를 제한하는 설정. 매핑 태스크에 적용하면 해당 태스크의 모든 활성 DagRun에 걸쳐 동시 실행 복사본 수를 제한한다.
매핑 가능한 데이터 타입, 템플릿 필드와의 상호작용, 매핑 상한과 빈 매핑 처리
· authoring-and-scheduling/dynamic-task-mapping.rst - What data types can be expanded?, How do templated fields and mapped arguments interact?, Placing limits on mapped tasks, Automatically skipping zero-length maps (약 603-709줄)
FanOutMapper가 하나의 업스트림 이벤트로부터 만들 수 있는 다운스트림 실행 개수의 상한. 초과 시 큐잉되지 않고 감사 로그만 남는다.
Asset 파티션 심화 (Rollup·FanOut 매퍼와 대기 정책)
· authoring-and-scheduling/assets.rst - Rollup mappers, Wait policies, Segment (categorical) rollup, Setting partition keys at runtime, Fan-out mappers, Window direction, Custom partition mappers/windows/timetables (versionadded 3.3.0)
[core] 설정(기본 1024). expand()가 생성할 수 있는 태스크 인스턴스 총 개수 상한. 초과 시 소스 태스크가 실패한다.
매핑 가능한 데이터 타입, 템플릿 필드와의 상호작용, 매핑 상한과 빈 매핑 처리
· authoring-and-scheduling/dynamic-task-mapping.rst - What data types can be expanded?, How do templated fields and mapped arguments interact?, Placing limits on mapped tasks, Automatically skipping zero-length maps (약 603-709줄)
스케줄러 메인 루프 쿼리의 배치 크기 설정. core.parallelism을 넘지 않아야 하며 0이면 core.parallelism 값을 사용한다.
스케줄러 성능 튜닝
· administration-and-deployment/scheduler.rst (Fine-tuning your Scheduler performance 절)
[triggerer] 섹션 설정(기본 50). 트리거러가 한 루프당 새로 가져가는 트리거 수 상한으로, HA 환경에서 특정 트리거러가 트리거를 독식하지 못하게 막는다.
트리거러 고가용성과 큐 기반 호스트 할당, reschedule과의 비교
· authoring-and-scheduling/deferring.rst - High Availability, Balance the workload for HA Triggerers, Controlling Triggerer Host Assignment Per Trigger, Difference between Mode='reschedule' and Deferrable=True in Sensors (약 472-607줄)
허용할 메트릭 이름 패턴(정규식)의 콤마 구분 목록. 설정되어 있으면 block list보다 우선하며 목록에 없는 메트릭은 드롭된다.
메트릭 설정: StatsD와 OpenTelemetry
· administration-and-deployment/logging-monitoring/metrics.rst (전체)
Dag 파일 처리(top-level 코드 재실행 포함) 사이의 최소 간격을 정하는 dag_processor 설정 파라미터.
Top-level 코드가 스케줄러 성능에 미치는 영향과 Ruff/mypy 활용
· best-practices.rst - "Top level Python Code" ~ "Static Type Checking for Dags" 섹션 (약 99-367행)
RollupMapper의 wait_policy 중 하나로, 기대 키 중 최소 n개만 도착해도 조기에 다운스트림을 발동시킨다.
Asset 파티션 심화 (Rollup·FanOut 매퍼와 대기 정책)
· authoring-and-scheduling/assets.rst - Rollup mappers, Wait policies, Segment (categorical) rollup, Setting partition keys at runtime, Fan-out mappers, Window direction, Custom partition mappers/windows/timetables (versionadded 3.3.0)
Java SDK에서 primitive 타입 파라미터가 존재하지 않는 업스트림 XCom을 읽으려 할 때 발생하는 예외. null을 표현할 수 없는 primitive 타입 대신 boxed 타입을 쓰면 방지할 수 있다.
Java SDK - XCom 타입 매핑, 빌드/패키징(Gradle·Maven), 코디네이터 설정과 제약
· authoring-and-scheduling/language-sdks/java.rst - XCom type mapping, Building and packaging (Gradle/Maven), JavaCoordinator configuration, Pinning the Java executable, Limitations (약 413-750줄)
실험적 설정([core] multi_team). UI/REST API 레벨의 팀 간 RBAC 격리와 Execution API의 팀-스코프 Variable/Connection/XCom 접근 제한을 제공하지만, 태스크 레벨 격리는 아직 보장하지 않는다.
Dag Author의 Dag 접근 범위와 격리 한계 (multi-team, Per-Dag 소스 조회)
· security/security_model.rst - "Capabilities of Dag authors" ~ "Per-Dag read access and source-code retrieval" 섹션 (약 188-264행)
@task 데코레이터의 옵션. True로 설정하면 함수가 반환하는 딕셔너리의 각 키를 개별 XCom 항목으로 분리해 저장한다.
TaskFlow API로 파이썬답게 ETL 작성하기
· docs/Airflow/docs/tutorial/taskflow.rst (전반부: The Big Picture ~ Task Parameterization)
do_xcom_push와 함께 True로 설정하면 태스크가 반환한 딕셔너리의 각 키를 개별 XCom으로 push하게 하는 옵션.
XCom을 통한 태스크 간 통신
· core-concepts/xcoms.rst
여러 cron 표현식 중 하나라도 매칭되면 Dag를 실행하는 Trigger 계열 타임테이블.
Timetable 개요와 Trigger 계열 타임테이블
· authoring-and-scheduling/timetable.rst - Timetables (개요), Built-in Timetables: DeltaTriggerTimetable, CronTriggerTimetable, MultipleCronTriggerTimetable
tzinfo에 오프셋 정보가 없으면 naive, 있으면 aware datetime. Airflow는 내부적으로 항상 aware datetime을 쓴다.
타임존 처리
· authoring-and-scheduling/timezone.rst - Time Zones
Newline-Delimited JSON. 한 줄에 하나의 JSON 객체를 담아 스트리밍하는 포맷. `/wait` 엔드포인트가 DAG 런 상태 변화를 이 포맷으로 스트리밍한다.
DAG Result - 결과값을 API로 바로 받기 (실험적 기능, 3.3+)
· authoring-and-scheduling/dag-result.rst - DAG Result (전체, versionadded 3.3, 실험적 기능)
airflow.sdk에서 import하는 sentinel 값으로, set()의 retention에 넘기면 해당 키가 가비지 컬렉션 대상에서 영구 제외된다.
Task State Store API 상세 — get/set/delete/clear와 활용 패턴
· core-concepts/task-state-store.rst 전체 (Airflow 3.3에 추가)
태스크 상태 저장소 키를 시간 기반 가비지 컬렉션에서 영구히 제외시키는 retention 값. expires_at=NULL과 전용 플래그로 표시된다.
태스크/에셋 상태 저장소 설정 (Airflow 3.3+)
· administration-and-deployment/task-and-asset-state-store.rst (전체)
트레이싱이 비활성화됐을 때 OpenTelemetry API가 제공하는, 아무 동작도 하지 않는 트레이서. 오버헤드 없는 실행을 보장한다.
트레이스 설정: OpenTelemetry 트레이싱과 Run Conf 제어
· administration-and-deployment/logging-monitoring/traces.rst (전체)
HITL 태스크가 대기·성공·실패할 때 호출되는 콜백. LocalLogNotifier처럼 내장된 것을 쓰거나 직접 구현할 수 있다.
HITL(Human-in-the-Loop)로 사람의 판단을 워크플로우에 통합하기
· docs/Airflow/docs/tutorial/hitl.rst
on_*_callback에 함수 대신 직접 전달하는 재사용 가능한 콜백 객체. 커뮤니티가 다양한 서비스용 Notifier를 제공한다.
콜백: Dag/Task 상태 변화에 대응하기
· administration-and-deployment/logging-monitoring/callbacks.rst (전체)
S3/GCS/Azure Blob 같은 클라우드 오브젝트 스토어의 경로를 pathlib.Path와 비슷한 방식으로 다루는 Airflow 2.8+ 추상화.
Object Storage로 클라우드 네이티브 워크플로우 만들기
· docs/Airflow/docs/tutorial/objectstorage.rst
s3/gcs/azure blob 등 다양한 객체 스토리지를 pathlib 스타일의 동일한 Path API로 다루게 해주는 Airflow의 추상화 클래스.
Object Storage 추상화 — ObjectStoragePath
· core-concepts/objectstorage.rst 전체 (Airflow 2.8.0에 추가)
사용자가 태스크를 명시적으로 kill(마크 실패/clear/마크 성공)했을 때만 호출되는 훅. 트리거러 재시작이나 재배치에서는 호출되지 않아 외부 작업 취소 로직을 안전하게 넣을 수 있다.
Deferrable Operator와 Trigger 직접 작성하기
· authoring-and-scheduling/deferring.rst - Writing Deferrable Operators, Writing Triggers, Sensitive information in triggers (약 70-183줄)
태스크가 AirflowSkipException으로 스킵될 때 호출되는 콜백. 분기/트리거 규칙으로 아예 스케줄되지 않은 스킵에는 호출되지 않는다.
콜백: Dag/Task 상태 변화에 대응하기
· administration-and-deployment/logging-monitoring/callbacks.rst (전체)
Admin과 동일한 접근권을 갖되 권한 관리/부여와 감사 로그 접근만 제외된 역할.
보안 모델 개요 - Deployment Manager, Dag Author, Authenticated UI User
· security/security_model.rst - "Airflow security model - user types" ~ "Capabilities of authenticated UI users" 섹션 (약 18-186행)
applies_to에서 오퍼레이터를 매칭할 때 쓰는, UI에 표시되는 이름(custom_operator_name). 데코레이터 기반 태스크는 클래스명(operators)과 표시 이름이 달라 구분해서 써야 한다.
Plugins — External View/React App/FastAPI 확장과 스코핑
· administration-and-deployment/plugins.rst (전체)
비활성화된 자산의 asset state store 행을 다음 가비지 컬렉션 패스에서 제거하는 유일한 자동 정리 절차.
Asset State Store API 상세 — 워터마크 패턴과 Watcher Trigger
· core-concepts/asset-state-store.rst 전체 (Airflow 3.3에 추가)
고아 태스크나 죽은 SchedulerJob을 확인하는 주기. 죽은 스케줄러가 감독하던 태스크가 다른 스케줄러로 재입양되는 지연을 좌우한다.
스케줄러 성능 튜닝
· administration-and-deployment/scheduler.rst (Fine-tuning your Scheduler performance 절)
태스크가 Asset 이벤트를 발행(outlets)하거나 소비(inlets)할 때 지정하는 파라미터.
Asset 이벤트 발행·소비와 AssetAlias, 크로스팀 접근제어
· authoring-and-scheduling/assets.rst - Creating a task to emit asset events, Fetching information from previously emitted asset events, Output to multiple assets, Dynamic data events emitting and asset creation through AssetAlias, Cross-team asset event filtering with producer_teams
LocalExecutor가 스폰할 수 있는 최대 프로세스 수를 제한하는 [core] 설정값(기본 32).
Executor란 무엇인가 — 유형과 LocalExecutor
· core-concepts/executor/index.rst - Executor, Executor Types; core-concepts/executor/local.rst 전체
Dag/태스크 단위로 정의되고 JSON Schema로 타입·제약을 검증하는 런타임 파라미터. 트리거 시 사용자 제공값 > 태스크 레벨 > Dag 레벨 순으로 우선순위가 적용된다.
Variables와 Params — 런타임 설정 전달하기
· core-concepts/variables.rst, core-concepts/params.rst
expand()와 짝을 이뤄, 매핑되지 않고 모든 확장 인스턴스에 고정값으로 전달할 인자를 지정하는 함수.
동적 태스크 매핑 기초 (expand, partial, task-generated/repeated mapping)
· authoring-and-scheduling/dynamic-task-mapping.rst - Simple mapping, Task-generated Mapping, Repeated mapping, Adding parameters that do not expand, Mapping over multiple parameters (약 18-182줄)
Asset 이벤트에 붙는 파티션 식별 값. 같은 Asset을 더 세밀한 단위(예: 시간별)로 모델링할 수 있게 해준다.
Asset 파티션 기초 (partition_key와 PartitionedAssetTimetable)
· authoring-and-scheduling/assets.rst - Asset partitions (Pre-determined vs runtime partitioning ~ 기본 매퍼 부분, versionadded 3.2.0)
파티션이 있는 Asset 이벤트만 소비하는 consumer용 타임테이블. 파티션 매퍼로 업스트림 키를 다운스트림 키로 변환해 일치 여부를 판단한다.
Asset 파티션 기초 (partition_key와 PartitionedAssetTimetable)
· authoring-and-scheduling/assets.rst - Asset partitions (Pre-determined vs runtime partitioning ~ 기본 매퍼 부분, versionadded 3.2.0)
파티션 키 결정을 태스크 실행 시점까지 미루는 producer 타임테이블. can_be_scheduled=False라 스스로는 스케줄되지 않는다.
Asset 파티션 기초 (partition_key와 PartitionedAssetTimetable)
· authoring-and-scheduling/assets.rst - Asset partitions (Pre-determined vs runtime partitioning ~ 기본 매퍼 부분, versionadded 3.2.0)
Airflow가 타임존 인식 날짜를 다룰 때 권장하는 서드파티 날짜/시간 라이브러리. 표준 라이브러리 timezone의 한계를 보완한다.
로지컬 데이트와 파이프라인 테스트
· docs/Airflow/docs/tutorial/fundamentals.rst (후반부: 타임존 ~ Testing Your Pipeline)
Airflow가 타임존 처리에 쓰는 라이브러리(pytz보다 정확). 자체 타임존 DB를 쓰며 PYTZDATA_TZDATADIR로 시스템 DB를 대신 쓸 수 있다.
타임존 처리
· authoring-and-scheduling/timezone.rst - Time Zones
Postgres용 커넥션 풀링 프록시. 프로세스 기반인 Postgres 커넥션 처리 특성상 중간 규모 이상 Airflow 배포에서 권장되며 공식 Helm Chart가 기본 지원한다.
Dag File Processing — 파싱 파이프라인과 성능 튜닝
· administration-and-deployment/dagfile-processing.rst (전체)
Postgres 기반 Airflow 배포에서 프로세스 기반 연결 처리의 한계를 완화하기 위해 앞단에 두는 커넥션 풀링 프록시. Helm 차트가 기본 지원한다.
스케줄러 성능 튜닝
· administration-and-deployment/scheduler.rst (Fine-tuning your Scheduler performance 절)
현재 환경에 설치된 Python 패키지 집합이 서로 충돌하지 않는지 검증하는 명령. 충돌 없으면 종료코드 0과 'No broken requirements found'를 출력한다.
PyPI 설치 (1): pipx/uv 설치와 Constraint 파일의 원리
· installation/installing-from-pypi.rst, 'Installation via pipx/uv' ~ 'Fixing Constraints at release time' (L1-262)
Airflow의 리스너·클러스터 정책 등 훅 시스템을 뒷받침하는 플러그인 프레임워크. hookspec으로 인터페이스를, hookimpl로 구현체를 정의한다.
Listeners — Pluggy 기반 이벤트 알림과 버전 호환성
· administration-and-deployment/listeners.rst (전체)
dags/config와 달리 plugins 폴더의 모든 .py 파일은 서브디렉터리 깊이와 무관하게 파일명 그대로 최상위 모듈로 실제 임포트되어, 표준 라이브러리·서드파티 모듈과 충돌할 수 있는 Airflow 고유의 동작.
Modules Management — PYTHONPATH, 패키징, 이름 충돌 함정
· administration-and-deployment/modules_management.rst (전체)
Airflow 1.10에서 유래한 레거시 커스텀 코드 등록 폴더. Deployment Manager가 관리해야 하며 Dag Author의 쓰기 권한을 차단해야 한다.
Executor별 코드 실행 컨텍스트와 Scheduler/API Server 보호
· security/security_model.rst - "Security contexts for Dag author submitted code" ~ "Access to all Dags" 섹션 (약 267-350행)
K8s 클라이언트로 파드를 보내기 전에 파드 객체를 변형하는 airflow_local_settings.py의 훅 함수. 사이드카 컨테이너 추가 등에 쓰인다.
Kubernetes — Executor, KubernetesPodOperator, Pod Mutation Hook
· administration-and-deployment/kubernetes.rst (전체)
센서의 기본 실행 모드. 전체 런타임 동안 워커 슬롯을 점유하며 짧은 확인 주기에 적합하다.
Sensors — 외부 이벤트를 기다리는 Operator
· core-concepts/sensors.rst
임의의 태스크 집합에 대해 실행 병렬성을 제한하는 Airflow 메커니즘. 이름과 슬롯 수를 UI/CLI로 관리한다.
Pools — 실행 병렬성 제한과 pool_slots
· administration-and-deployment/pools.rst (전체)
태스크가 점유하는 Pool 슬롯 수를 지정하는 파라미터. 기본값은 1이며, 더 '무거운' 태스크에 더 큰 값을 줄 수 있다.
Pools — 실행 병렬성 제한과 pool_slots
· administration-and-deployment/pools.rst (전체)
이름이 붙은 pool에 배정된 동시 실행 태스크 수를 제한해 리소스 컨텐션/쿼터 제약을 관리하는 Admin 설정 페이지.
Asset Views(Asset List/Graph, Dag 오버레이)와 Admin Views
· ui.rst - "Asset Views" ~ "Admin Views" 섹션 (약 464-574행)
Postgres 커넥션을 얻어와 저수준 DB 작업(커서, COPY 등)을 수행할 수 있게 해주는 훅 클래스.
SQL 기반 데이터 파이프라인 구축하기
· docs/Airflow/docs/tutorial/pipeline.rst
리눅스 프로세스를 non-dumpable로 표시하는 시스템 콜. /proc/<pid>/mem·environ 읽기와 ptrace attach를 차단해 같은 UID의 다른 프로세스로부터 자격증명을 보호한다.
배포 하드닝 - 컴포넌트별 민감정보 분리와 향후 개선 방향
· security/security_model.rst - "Deployment hardening for improved isolation" 섹션, 컴포넌트별 민감정보 표와 mermaid 다이어그램 (약 546-827행)
오퍼레이터 실행 직전/직후에 호출되는 훅 메서드로, 태스크 인스턴스 컨텍스트를 인자로 받는다. Dag Run 전체에 걸친 setup/teardown과는 다른 개념이다.
Operators와 Jinja 템플릿
· core-concepts/operators.rst
executor 큐 안에서 태스크의 우선순위를 정하는 값. 기본값 1, 클수록 우선순위가 높으며 weight_rule에 따라 실효 값이 재계산된다.
Priority Weight — 세 가지 weight_rule과 Pool의 관계
· administration-and-deployment/priority-weight.rst (전체)
커스텀 weight_rule을 구현하기 위해 확장하는 클래스(2.9.0+). 플러그인으로 등록해 태스크의 weight_rule에 지정한다.
Priority Weight — 세 가지 weight_rule과 Pool의 관계
· administration-and-deployment/priority-weight.rst (전체)
소비 자산 정의(AssetAccessControl)에 선언하는, 이 소비자가 받아들일 생산자 팀 목록. 자기 팀 이벤트는 항상 별도로 허용된다.
Multi-Team 자산 이벤트 필터링과 메트릭
· core-concepts/multi-team.rst - Team-Based Asset Event Filtering, Team-based Metrics, Important Considerations (L666-1156)
Airflow core와 분리되어 독립 배포되는 통합 기능 패키지(예: apache-airflow-providers-amazon). 80개 이상 존재하며 필요한 것만 선택 설치한다.
Airflow 설치 방법 개요: 로컬 빠른 시작부터 관리형 서비스까지
· installation/index.rst (전체, L1-415)
특정 외부 시스템/서비스와의 통합 기능을 담은 독립 배포 패키지(예: apache-airflow-providers-amazon). extra 설치 시 자동으로 함께 설치되는 경우가 많다.
의존성 구조: Extras, Provider 패키지, 시스템 의존성
· installation/dependencies.rst (전체, L1-91)
Airflow에서 변경이 시맨틱 버저닝으로 관리되는 인터페이스와 동작의 집합. 명시적으로 문서화된 클래스/함수만 해당하며 _, __로 시작하는 이름은 제외된다.
Airflow 3.0+ Public Interface란 무엇인가 - airflow.sdk와 Dag 작성자 인터페이스
· public-airflow-interface.rst - 문서 도입부 ~ "Hooks" 섹션 (약 18-256행)
태스크 실행마다 동적으로 virtualenv를 생성해 격리된 Python 의존성으로 콜러블을 실행하는 오퍼레이터. @task.virtualenv 데코레이터로도 사용 가능.
충돌하는 Python 의존성 처리 - Virtualenv/ExternalPython/Docker/K8s Pod 비교
· best-practices.rst - "Handling conflicting/complex Python dependencies" ~ "Using multiple Docker Images and Celery Queues" 섹션 (약 954-1198행)
여러 Asset을 요구하는 Dag에서 일부 Asset만 먼저 갱신되었을 때, 나머지 Asset이 갱신되면 트리거해야 함을 기억해두는 레코드. queuedEvent REST 엔드포인트로 조회·삭제할 수 있다.
조건식 기반 Asset 스케줄링과 확장
· authoring-and-scheduling/asset-scheduling.rst - Event-driven scheduling (Push/Pull), Advanced asset scheduling with conditional expressions, Scheduling based on asset aliases, Combining asset and time-based schedules
delimiter 경계에 맞춰 파일의 특정 구간을 읽어오는 확장 연산.
Object Storage 추상화 — ObjectStoragePath
· core-concepts/objectstorage.rst 전체 (Airflow 2.8.0에 추가)
airflow.sdk.serde.serializers 네임스페이스에 등록하는 serialize/deserialize 함수 쌍. Airflow가 통제하지 않는 외부 타입(numpy, decimal 등)을 다룰 때 쓰며 버전 정보를 함께 관리한다.
직렬화(Serialization) 해석 순서와 커스텀 직렬화기 작성
· authoring-and-scheduling/serializers.rst - Serialization, Serialization resolution order, Airflow Object, Registered (전체, 144줄)
원격 로깅 커스텀 모듈에 정의해야 하는 RemoteLogIO 인스턴스. 태스크 로그 업로드와 UI 재조회를 담당한다.
고급 로깅 설정: 커스텀 로거와 로그 크기 제한
· administration-and-deployment/logging-monitoring/advanced-logging-configuration.rst (전체)
Dag Run 시작 이후 Dag 정의에서 사라진 태스크의 터미널 상태. all_done류 trigger rule에서는 완료로 집계되지만 success/failed/skipped로는 집계되지 않는다.
Dag 제어 흐름 — 분기, Trigger Rule, Depends On Past
· core-concepts/dags.rst - Control Flow (Branching, Latest Only, Depends On Past, Trigger Rules, Setup and teardown)
True로 설정하면 Jinja가 NativeEnvironment로 값을 Python 리터럴 타입(dict/list/int 등)으로 렌더링하게 하는 Dag 옵션. 숫자형 문자열이 의도치 않게 숫자로 바뀔 수 있다.
Operators와 Jinja 템플릿
· core-concepts/operators.rst
태스크 실행 전 렌더링된 템플릿 필드의 사본을 저장하는 모델. num_dag_runs_to_retain_rendered_fields로 보존 범위가 제어된다.
Dag Serialization — Webserver 경량화와 3.1 버전 계약
· administration-and-deployment/dag-serialization.rst (전체)
이미 존재하는 run에 대해 새 run을 만들지 결정하는 backfill 옵션(none/failed/completed).
Backfill — 과거 날짜 재처리
· core-concepts/backfill.rst 전체
Dag 실행/태스크 인스턴스를 clear할 때 최신 Bundle 버전과 원본 버전 중 무엇을 기본으로 쓸지 결정하는 설정. 버저닝 지원 Bundle에만 의미가 있다.
Dag Bundles — Dag 소스 관리와 버저닝
· administration-and-deployment/dag-bundles.rst (전체)
센서가 확인하는 순간에만 워커 슬롯을 점유하고 확인 사이에는 슬롯을 반납하는 실행 모드. 긴 확인 주기에 적합하다.
Sensors — 외부 이벤트를 기다리는 Operator
· core-concepts/sensors.rst
BaseAuthManager가 정의하는, 리소스에 허용 가능한 조작 방법(GET/POST/PUT/DELETE 등)을 나타내는 타입. 폐기된 ACTION_*를 대체한다.
레거시 권한 모듈 폐기와 API 엔드포인트 권한 참조
· security/deprecated_permissions.rst (전체), security/api_permissions_ref.rst (자동 생성 레퍼런스, 요약)
DAG의 대표 반환값으로 지정된 태스크. `@result` 데코레이터나 `@dag` 함수의 직접 반환으로 지정하며, `/wait` API 응답의 results에 노출된다.
DAG Result - 결과값을 API로 바로 받기 (실험적 기능, 3.3+)
· authoring-and-scheduling/dag-result.rst - DAG Result (전체, versionadded 3.3, 실험적 기능)
외부 작업 ID를 task state store에 저장해 재시도 시 중복 제출 대신 기존 작업에 재접속하게 하는 믹스인.
Resumable Tasks와 Durable Execution — 세 가지 접근법
· core-concepts/resumable-tasks.rst 전체 (Airflow 3.3.0에 추가)
재시도 정책의 evaluate()가 반환하는 값으로, retry(지연 포함)/fail(사유 포함)/default 중 하나를 나타낸다.
재시도 정책(Retry Policy)과 Heartbeat Timeout
· core-concepts/tasks.rst - Retry Policies, Task Instance Heartbeat Timeout, Executor Configuration
do_xcom_push=True인 오퍼레이터와 @task 함수가 결과를 자동으로 push할 때 쓰는 기본 XCom 키. BaseXCom.XCOM_RETURN_KEY 상수로 정의된다.
XCom을 통한 태스크 간 통신
· core-concepts/xcoms.rst
여러 세밀한 업스트림 파티션(Window로 선언된 전체 집합)이 모두 도착해야 하나의 굵은 다운스트림 실행을 트리거하도록 묶는 파티션 매퍼.
Asset 파티션 심화 (Rollup·FanOut 매퍼와 대기 정책)
· authoring-and-scheduling/assets.rst - Rollup mappers, Wait policies, Segment (categorical) rollup, Setting partition keys at runtime, Fan-out mappers, Window direction, Custom partition mappers/windows/timetables (versionadded 3.3.0)
HA 스케줄러가 스케줄링 루프의 크리티컬 섹션에 오직 하나의 스케줄러만 진입하도록 Pool 테이블 전체 행에 거는 DB 수준의 쓰기 락.
스케줄러 기본 동작과 다중 스케줄러(HA)
· administration-and-deployment/scheduler.rst (개요 ~ Database Requirements 절)
Ruff 린터가 제공하는 Airflow 전용 규칙 집합. deprecated 패턴, Airflow 3.0 제거/이동된 API 등을 정적으로 탐지한다.
Top-level 코드가 스케줄러 성능에 미치는 영향과 Ruff/mypy 활용
· best-practices.rst - "Top level Python Code" ~ "Static Type Checking for Dags" 섹션 (약 99-367행)
태스크 인스턴스 실행 시 impersonate할 유닉스 사용자를 지정하는 태스크 파라미터. sudo와 대상 사용자의 실존이 필요하다.
Workload 격리 - Impersonation과 실행 격리 현황
· security/workload.rst (전체)
Airflow 3부터 태스크 인스턴스 리스너가 worker 실행 중에 전달받는 인스턴스 타입. API를 통한 상태 변경 시에는 대신 TaskInstance가 전달된다.
Listeners — Pluggy 기반 이벤트 알림과 버전 호환성
· administration-and-deployment/listeners.rst (전체)
소프트웨어를 구성하는 모든 컴포넌트(이름, 버전, 공급자, 전이 의존성)의 인벤토리. Airflow는 버전/파이썬 버전별로 SBOM 파일을 생성해 공개한다.
보안 패치 릴리스 정책, SBOM, 서드파티 취약점과 SQL Injection 신고 기준
· security/releasing_security_patches.rst, security/sbom.rst, security/vulnerabilities-in-3rd-party-dependencies.rst, security/sql.rst (모두 전체, 절차/정책 문서 특성상 핵심 원칙 위주로 압축)
소스 배포판(source distribution). 컴파일되지 않은 소스 코드 형태의 Python 패키지 배포 포맷.
소스에서 설치하기: 공식 배포판과 무결성 검증
· installation/installing-from-sources.rst (전체, L1-163)
Variable/Connection/XCom 접근을 하나로 묶은 인터페이스. VariableClient/ConnectionClient/XComClient 세 개의 좁은 인터페이스로 구성되어 필요한 것만 선언해 쓸 수 있다.
Go SDK - 실행 아키텍처와 태스크 작성
· authoring-and-scheduling/language-sdks/go.rst - Go SDK (도입부), Prerequisites, Execution architecture, Quick start, Writing tasks, sdk.Client surface, Reading the task runtime context, XCom type mapping (약 18-320줄)
Go 태스크 함수에 주입되는 실행 컨텍스트. context.Context를 임베드하며 취소/데드라인 신호와 태스크 인스턴스·Dag 런 식별자를 제공한다.
Go SDK - 실행 아키텍처와 태스크 작성
· authoring-and-scheduling/language-sdks/go.rst - Go SDK (도입부), Prerequisites, Execution architecture, Quick start, Writing tasks, sdk.Client surface, Reading the task runtime context, XCom type mapping (약 18-320줄)
Airflow Variable/Connection 조회 결과를 캐싱하는 실험적 기능을 켜는 설정. top-level에서 불가피하게 Variable을 쓸 때 성능 저하를 완화한다.
동적 Dag 생성과 Airflow Variables/Timetable의 top-level 성능 함정
· best-practices.rst - "Dynamic Dag Generation" ~ "Timetables" 섹션 (약 369-495행)
공격자가 주입한 페이로드가 그 공격자 자신에게만 영향을 주는 XSS. Airflow에서는 취약점으로 간주하지 않는다.
보안 취약점으로 간주하지 않는 경우
· security/security_model.rst - "What is NOT considered a security vulnerability" 섹션 전체 (약 927-1069행)
VariableNotFound/ConnectionNotFound/XComNotFound처럼 값이 없을 때 반환되는 지정된 에러 값. errors.Is로 존재 여부를 분기 처리하는 데 쓴다.
Go SDK - 실행 아키텍처와 태스크 작성
· authoring-and-scheduling/language-sdks/go.rst - Go SDK (도입부), Prerequisites, Execution architecture, Quick start, Writing tasks, sdk.Client surface, Reading the task runtime context, XCom type mapping (약 18-320줄)
Sentry 프로젝트의 접속 정보를 담은 DSN 문자열. 설정 파일에 없으면 SENTRY_DSN 환경변수에서 읽는다.
에러 트래킹: Sentry 연동
· administration-and-deployment/logging-monitoring/errors.rst (전체)
Dag processor가 파싱한 Dag를 JSON으로 직렬화해 저장하는 메타데이터 DB 모델. Webserver와 Scheduler가 Dag 파일 대신 이를 참조한다.
Dag Serialization — Webserver 경량화와 3.1 버전 계약
· administration-and-deployment/dag-serialization.rst (전체)
OpenTelemetry 리소스 속성 중 하나로, 같은 컴포넌트를 실행하는 서로 다른 프로세스(예: HA 스케줄러)를 구분하는 데 쓰인다.
메트릭 설정: StatsD와 OpenTelemetry
· administration-and-deployment/logging-monitoring/metrics.rst (전체)
airflow-sdk-jpl, airflow-sdk-slf4j 등이 쓰는 방식. JAR을 클래스패스에 두기만 하면 별도 설정 없이 JVM/SLF4J가 자동으로 Airflow용 구현체를 찾아 쓴다.
Java SDK - 로깅 프레임워크 연동 (JPL/SLF4J/Log4j2/JUL)
· authoring-and-scheduling/language-sdks/java.rst - Logging, System.Logger (JPL), SLF4J 2.x, Log4j 2, java.util.logging, Other frameworks (약 258-412줄)
프로세스 타이틀을 변경하는 데 쓰이는 Airflow 의존 라이브러리. 비공개 Python API를 사용해 특정 macOS Python 빌드에서 심볼 오류를 일으킬 수 있다.
PyPI 설치 (2): 설치·업그레이드 시나리오와 트러블슈팅
· installation/installing-from-pypi.rst, 'Installation and upgrade scenarios' ~ 끝 (L263-401)
동일 업스트림을 폴링하는 형제 트리거들이 폴 루프를 공유하도록 묶는 결정론적 키. None을 반환하면 공유에서 빠진다.
이벤트 기반 스케줄링 심화: Shared Stream 패턴
· authoring-and-scheduling/event-scheduling.rst - Sharing one poll across sibling triggers (What is and isn't shared, Suitable upstreams, Producer-side ack channel, Ordering guarantee, Triggerer restart/Durability/queue overflow) (versionadded 3.3)
메시지 브로커처럼 모든 구독자 처리 완료 후에만 커밋/ack해야 하는 업스트림을 위해 create_shared_stream_producer가 반환하는 객체. open_stream과 advance를 구현한다.
이벤트 기반 스케줄링 심화: Shared Stream 패턴
· authoring-and-scheduling/event-scheduling.rst - Sharing one poll across sibling triggers (What is and isn't shared, Suitable upstreams, Producer-side ack channel, Ordering guarantee, Triggerer restart/Durability/queue overflow) (versionadded 3.3)
gunicorn에서 가장 오래된 워커(FIFO)를 종료시켜 진짜 롤링 재시작을 가능하게 하는 시그널.
웹 스택: API 서버 설정과 운영
· administration-and-deployment/web-stack.rst (전체)
Airflow 3 기본 탑재 auth manager. 설정 파일 기반 사용자 관리, 개발·테스트 전용.
Simple Auth Manager와 JWT 토큰 발급
· core-concepts/auth-manager/simple/index.rst 전체; core-concepts/auth-manager/simple/token.rst 전체; core-concepts/auth-manager/simple/sam-token-api-ref.rst(Swagger 참조 페이지, 별도 서술 내용 없음)
True로 설정하면 인증을 생략하고 누구나 admin으로 접근하게 하는 개발용 옵션.
Simple Auth Manager와 JWT 토큰 발급
· core-concepts/auth-manager/simple/index.rst 전체; core-concepts/auth-manager/simple/token.rst 전체; core-concepts/auth-manager/simple/sam-token-api-ref.rst(Swagger 참조 페이지, 별도 서술 내용 없음)
'username:role[:team1|team2]' 쌍을 콤마로 나열해 사용자·역할·(멀티팀 시)소속 팀을 정의하는 [core] 설정.
Simple Auth Manager와 JWT 토큰 발급
· core-concepts/auth-manager/simple/index.rst 전체; core-concepts/auth-manager/simple/token.rst 전체; core-concepts/auth-manager/simple/sam-token-api-ref.rst(Swagger 참조 페이지, 별도 서술 내용 없음)
센서의 True 설정 시 타임아웃 도달을 FAILED가 아니라 SKIPPED로 처리하게 하는 파라미터.
Sensors — 외부 이벤트를 기다리는 Operator
· core-concepts/sensors.rst
등록된 Connection을 이용해 SQL을 실행하는 범용 오퍼레이터. 여러 SQL 프로바이더(Postgres, MySQL 등)에 공통으로 쓰인다.
SQL 기반 데이터 파이프라인 구축하기
· docs/Airflow/docs/tutorial/pipeline.rst
pipx/uvx로 즉시 실행되는 단일 프로세스 Airflow 실행 방식. SQLite와 자동 생성 admin 계정을 사용하며 로컬 개발/학습 전용이다.
Airflow 설치 방법 개요: 로컬 빠른 시작부터 관리형 서비스까지
· installation/index.rst (전체, L1-415)
각각 워커를 거치지 않고 트리거러에서 태스크를 직접 시작/종료하는 옵션 (2.10.0+). 새 워커 기동 비용을 절약한다.
self.defer() 호출 방식과 Task Start/End 직결 최적화
· authoring-and-scheduling/deferring.rst - Triggering Deferral, Deferring multiple times, Triggering Deferral from Task Start, Exiting deferred task from Triggers (약 185-470줄)
trigger_cls, trigger_kwargs, next_method, next_kwargs, timeout을 담는 객체. start_from_trigger=True인 오퍼레이터가 워커를 거치지 않고 바로 트리거러에서 시작하도록 지정한다.
self.defer() 호출 방식과 Task Start/End 직결 최적화
· authoring-and-scheduling/deferring.rst - Triggering Deferral, Deferring multiple times, Triggering Deferral from Task Start, Exiting deferred task from Triggers (약 185-470줄)
정리 명령이 한 번에 삭제하는 행 수. 0(기본)은 단일 statement, 값을 주면 배치 단위로 커밋하며 락 시간을 줄인다.
태스크/에셋 상태 저장소 정리 (가비지 컬렉션 운영)
· administration-and-deployment/task-and-asset-state-store-cleanup.rst (전체)
UDP 대신 유닉스 도메인 소켓으로 StatsD 메트릭을 보내도록 하는 설정. 설정 시 statsd_host/port/ipv6는 무시된다.
메트릭 설정: StatsD와 OpenTelemetry
· administration-and-deployment/logging-monitoring/metrics.rst (전체)
@task.stub으로 선언하는, 실제 파이썬 구현 없이 비-파이썬 언어에서 실행될 태스크의 껍데기. 스케줄러 입장에서는 일반 태스크와 동일하게 취급된다.
비-Python 언어 SDK 개요 (Stub Task, Coordinator, 실행 모델)
· authoring-and-scheduling/language-sdks/index.rst - Non-Python Task SDKs (전체, 실험적 기능)
실행기 클래스가 멀티팀 팀별 구성으로 쓰일 수 있음을 나타내는 불리언 속성. False면 팀 실행기로 쓸 수 없다.
Multi-Team 실행기 설정과 트리거러 스코핑
· core-concepts/multi-team.rst - Team-based Executor Configuration, Dag Bundle to Team Association, How Scheduling Works, Team-scoped Triggerer (L345-665)
파이썬이 모듈을 찾을 때 탐색하는 디렉터리 목록. 현재 디렉터리 -> PYTHONPATH -> site 모듈 관리 경로 순으로 우선순위를 갖는다.
Modules Management — PYTHONPATH, 패키징, 이름 충돌 함정
· administration-and-deployment/modules_management.rst (전체)
Dag을 구성하는 실행 단위. 오퍼레이터를 인스턴스화하거나 @task로 데코레이팅한 함수로 정의된다.
Airflow란 무엇인가
· docs/Airflow/docs/index.rst - What is Airflow?, Workflows as code, Dags, Why/Why not Airflow
Task SDK와 Airflow 서버 컴포넌트 사이의 런타임 통신을 규정하는 API 계약. Dag 직렬화 스키마와 함께 클라이언트/서버 분리 아키텍처를 뒷받침한다.
Dag Serialization — Webserver 경량화와 3.1 버전 계약
· administration-and-deployment/dag-serialization.rst (전체)
워커의 태스크 코드가 상태 전이, 하트비트, XCom, 리소스 조회 등을 수행할 때 DB 대신 경유하는 API. Airflow 3 태스크 격리의 핵심 장치다.
Airflow 3 업그레이드 (1): 아키텍처 변화, 사전 준비, Dag 호환성 점검
· installation/upgrading_to_airflow3.rst, 'Understanding Airflow 3.x Architecture Changes' ~ 'Step 4' (L1-194)
특정 Dag Run(데이터 인터벌) 안에서 한 태스크의 구체적인 실행을 나타내는 객체. 상태(state)를 가지며 생명주기 동안 여러 상태를 거친다.
Task와 Task Instance — 상태와 생명주기
· core-concepts/tasks.rst - Relationships, Task Instances, Task states, Timeouts, SLAs, Special Exceptions
(dag_id, task_id, run_id, try_number, map_index)로 구성된, 태스크 인스턴스를 식별하는 고유 튜플.
Airflow 3.0+ Public Interface란 무엇인가 - airflow.sdk와 Dag 작성자 인터페이스
· public-airflow-interface.rst - 문서 도입부 ~ "Hooks" 섹션 (약 18-256행)
Dag Run View에서 특정 태스크를 클릭해 진입하는 뷰. 그 태스크 실행 하나에 대한 로그/템플릿/XCom/이벤트/코드/상세 메타데이터를 탭으로 제공한다.
Dag Run View/트리거 창과 Task Instance View의 탭 구성
· ui.rst - "Dag Run View" ~ "Task Instance Tabs" 섹션 (약 260-462행)
Airflow 3.0에서 도입된, 태스크 실행 코드가 메타데이터 DB에 직접 접근하지 않고 API를 통해서만 스케줄러와 통신하도록 만드는 아키텍처. 제어 평면과 워커 평면의 신뢰 경계를 분리한다.
Airflow의 탄생과 진화 (히스토리로 보는 아키텍처 변화)
· 전체 (역사 부분, pp.1-2) + 저자 서문
단일 태스크 인스턴스(dag_id+run_id+task_id+map_index)에 스코프된 영구 key/value 저장소.
Task/Asset State Store 개요 — 언제 무엇을 쓰나
· core-concepts/task-and-asset-state-store.rst 전체 (Airflow 3.3에 추가)
특정 DagRun에 속한 태스크 인스턴스가 생성/조정될 때 스케줄러 쪽에서 실행되는 훅. 커밋 금지 트랜잭션 안에서 돌기 때문에 새 DB 세션을 열거나 커밋하면 안 된다.
Cluster Policies — 클러스터 전역 Dag/Task 검증과 변형
· administration-and-deployment/cluster-policies.rst (전체)
DagBag 로드 중 태스크가 파싱되어 생성되는 시점에 실행되는 클러스터 정책. 이후 실행될 모든 태스크 인스턴스에 적용된다.
Cluster Policies — 클러스터 전역 Dag/Task 검증과 변형
· administration-and-deployment/cluster-policies.rst (전체)
TypeScript SDK에서 Variable/Connection/XCom을 읽고 쓰는 클라이언트. 각 조회는 null을 반환하는 관대한 버전과 예외를 던지는 OrThrow 버전 쌍으로 제공된다.
TypeScript SDK - Dag/DagRegistry 구조와 빌드·배포
· authoring-and-scheduling/language-sdks/typescript.rst - TypeScript SDK (전체, 실험적/베타, 약 324줄)
self.defer() 호출 시 내부적으로 발생하는 예외. Airflow가 이를 감지해 오퍼레이터를 트리거러로 넘긴다.
self.defer() 호출 방식과 Task Start/End 직결 최적화
· authoring-and-scheduling/deferring.rst - Triggering Deferral, Deferring multiple times, Triggering Deferral from Task Start, Exiting deferred task from Triggers (약 185-470줄)
deferrable 오퍼레이터가 트리거로 실행을 넘길 때 발생시키는 예외(airflow.sdk.exceptions). 테스트에서는 pytest.raises(TaskDeferred)로 포착해 트리거와 resume 메서드를 검증한다.
Dag 테스트 전략 - Loader Test, 단위 테스트, Self-Check, 스테이징
· best-practices.rst - "Testing a Dag" ~ "Staging environment" 섹션 (약 669-912행)
Airflow 2.0에서 도입된, @dag/@task 데코레이터로 일반 Python 함수를 태스크로 변환하고 의존성·XCom 전달을 자동화하는 워크플로우 작성 방식.
TaskFlow API로 파이썬답게 ETL 작성하기
· docs/Airflow/docs/tutorial/taskflow.rst (전반부: The Big Picture ~ Task Parameterization)
Airflow 2.0에서 추가된 @task 데코레이터 기반 API. XCom을 이용한 태스크 간 입출력 전달과 의존성 계산을 자동화해 PythonOperator 대비 보일러플레이트를 줄인다.
TaskFlow API — @task로 Dag 작성하기
· core-concepts/taskflow.rst
Graph 뷰에서 태스크를 계층적으로 묶어 시각적 잡음을 줄이는 기능. 원래 Dag의 설정·풀 설정을 그대로 따르며 자체 default_args를 가질 수 있다.
Dag 시각화, 문서화, 패키징, 라이프사이클 관리
· core-concepts/dags.rst - Dynamic Dags, Dag Visualization, TaskGroups, Edge Labels, Documentation, Packaging, .airflowignore, Dag Dependencies, Dag pausing/deactivation/deletion, Auto-pausing, Deadline Alerts, Testing a Dag
상태 저장소 메서드가 받는 scope 타입. TaskScope는 태스크 인스턴스를, AssetScope는 asset_id/name/uri로 에셋을 식별한다.
태스크/에셋 상태 저장소 설정 (Airflow 3.3+)
· administration-and-deployment/task-and-asset-state-store.rst (전체)
조직 내 사용자 그룹을 나타내는 논리적 단위. 이름(3~50자)만 갖는 단순한 구조로 메타데이터 DB에 저장된다.
Multi-Team 개요와 리소스 격리
· core-concepts/multi-team.rst - 개요, Core Concepts, Resource Isolation, Enabling Multi-Team Mode, Creating/Managing Teams, Configuring Team Resources (L18-343)
--team-name으로 특정 팀 소속 Dag의 디퍼러블 트리거만 처리하도록 범위를 좁힌 Triggerer 인스턴스(3.3.0+).
Multi-Team 실행기 설정과 트리거러 스코핑
· core-concepts/multi-team.rst - Team-based Executor Configuration, Dag Bundle to Team Association, How Scheduling Works, Team-scoped Triggerer (L345-665)
Multi-Team 활성화 시 팀 소유 리소스의 운영 메트릭에 붙는 태그. 태그 인식 백엔드(StatsD 태깅/OTel)가 필요하다.
Multi-Team 자산 이벤트 필터링과 메트릭
· core-concepts/multi-team.rst - Team-Based Asset Event Filtering, Team-based Metrics, Important Considerations (L666-1156)
오퍼레이터가 특정 접미사로 끝나는 문자열을 파일 경로 참조로 간주하도록 정의하는 속성. literal()이나 오버라이드로 이 동작을 끌 수 있다.
Operators와 Jinja 템플릿
· core-concepts/operators.rst
오퍼레이터 클래스의 Sequence[str] 클래스 변수로, 여기 등록된 필드만 Jinja 템플릿 치환의 대상이 된다.
Operators와 Jinja 템플릿
· core-concepts/operators.rst
UI에서 Connection 설정을 즉시 테스트하는 기능. RCE·파일읽기·DoS로 이어질 수 있어 Airflow 2.7.0부터 기본 비활성화되어 있다.
보안 취약점으로 간주하지 않는 경우
· security/security_model.rst - "What is NOT considered a security vulnerability" 섹션 전체 (약 927-1069행)
토큰의 sub claim이 요청 경로의 task_instance_id와 일치해야 한다는 Execution API 라우트 제약 — 다른 태스크의 엔드포인트 접근을 차단한다.
JWT 인증 (2) Execution API 스코프와 워크로드 격리 한계
· security/jwt_token_authentication.rst — Execution API Authentication Flow, Dag File Processor and Triggerer 섹션
Execution JWT 토큰 스코프의 하나로, 다른 태스크 인스턴스의 heartbeat·상태 전이 같은 특정 엔드포인트에 대한 접근만 제한한다. Dag별 접근 제어는 아니다.
Dag Author의 Dag 접근 범위와 격리 한계 (multi-team, Per-Dag 소스 조회)
· security/security_model.rst - "Capabilities of Dag authors" ~ "Per-Dag read access and source-code retrieval" 섹션 (약 188-264행)
Execution API JWT 토큰의 claim을 검증하는 typed Pydantic 스키마. scope 리터럴 강제와 sub의 UUID 형식 검증을 담당한다.
현재 격리의 한계 - DB 자격증명 탈취와 JWT 우회 리스크
· security/security_model.rst - "Current isolation limitations" 섹션 (약 433-544행)
시간 기반 Dag의 스케줄, data interval, logical date를 결정하는 내부 컴포넌트. cron/timedelta 스케줄도 내부적으로 타임테이블로 변환된다.
Timetable 개요와 Trigger 계열 타임테이블
· authoring-and-scheduling/timetable.rst - Timetables (개요), Built-in Timetables: DeltaTriggerTimetable, CronTriggerTimetable, MultipleCronTriggerTimetable
Operator의 execute() 메서드 바깥에서, Dag 파일이 파싱될 때마다(min_file_process_interval 주기로) 실행되는 코드. DB 접근/무거운 연산/무거운 import를 두면 스케줄러 성능이 저하된다.
Top-level 코드가 스케줄러 성능에 미치는 영향과 Ruff/mypy 활용
· best-practices.rst - "Top level Python Code" ~ "Static Type Checking for Dags" 섹션 (약 99-367행)
트리거러 프로세스 안에서 비동기로 실행되는 경량 파이썬 코드. Deferrable Operator를 대신해 폴링이나 대기를 수행하고, 끝나면 오퍼레이터를 재개시킨다.
Deferrable Operator란 무엇인가 (워커 슬롯 절약의 원리)
· authoring-and-scheduling/deferring.rst - Deferrable Operators & Triggers (도입부), Using Deferrable Operators (약 18-68줄)
Dag 레벨 Param 정의를 바탕으로 'Trigger Dag' 클릭 시 자동 생성되는 UI 폼. Param이 없으면 생략되며, type/title/description/section 등 속성으로 폼 요소가 결정된다.
Variables와 Params — 런타임 설정 전달하기
· core-concepts/variables.rst, core-concepts/params.rst
태스크가 실행되기 위해 업스트림 태스크들이 어떤 상태 조합이어야 하는지를 지정하는 태스크 인자. 기본값은 all_success다.
Dag 제어 흐름 — 분기, Trigger Rule, Depends On Past
· core-concepts/dags.rst - Control Flow (Branching, Latest Only, Depends On Past, Trigger Rules, Setup and teardown)
커스텀 FileTaskHandler가 TriggerHandlerWrapper로 감싸져야 하는지를 나타내는 핸들러 속성. 트리거러 로깅에서 사용된다.
태스크 로깅: 파일 저장, 원격 로깅, 로그 서빙
· administration-and-deployment/logging-monitoring/logging-tasks.rst (전체)
지연(defer)된 태스크를 비동기로 관리하는 컴포넌트. HITL 등 대기 상태의 태스크와도 관련된다.
빠르게 설치하고 첫 실행해보기 (Quick Start)
· docs/Airflow/docs/start.rst - Quick Start
Deferrable operator의 폴링과 메시지 큐 이벤트 감시를 담당하는 Airflow 컴포넌트.
Message Queues — 이벤트 기반 Dag 스케줄링
· core-concepts/message-queues.rst 전체
여러 Trigger를 하나의 비동기 프로세스에서 동시에 실행하는 Airflow 컴포넌트.
Deferrable Operator란 무엇인가 (워커 슬롯 절약의 원리)
· authoring-and-scheduling/deferring.rst - Deferrable Operators & Triggers (도입부), Using Deferrable Operators (약 18-68줄)
트리거러의 하트비트 주기 설정. Airflow는 이 값의 2.1배만큼 기다린 뒤 응답 없는 트리거러의 트리거를 다른 호스트로 재배치한다.
트리거러 고가용성과 큐 기반 호스트 할당, reschedule과의 비교
· authoring-and-scheduling/deferring.rst - High Availability, Balance the workload for HA Triggerers, Controlling Triggerer Host Assignment Per Trigger, Difference between Mode='reschedule' and Deferrable=True in Sensors (약 472-607줄)
Asset 기반으로 트리거된 Dag run에서, 어떤 Asset의 어떤 이벤트가 이번 실행을 유발했는지 담은 {Asset: [AssetEvent]} 딕셔너리. 템플릿 변수이자 태스크 파라미터로 접근 가능하다.
Asset 기반 스케줄링 기초 (schedule=[asset]과 트리거 이벤트 조회)
· authoring-and-scheduling/asset-scheduling.rst - Quickstart, Schedule Dags with assets, Multiple assets, Fetching information from a triggering asset event (versionadded 2.4)
죽은 스케줄러 Job이 남긴(고아가 된) 태스크를 실행기가 인수하도록 하는 선택적 메서드.
커스텀 실행기 작성하기 — BaseExecutor 인터페이스
· core-concepts/executor/index.rst - Writing Your Own Executor (Workloads, BaseExecutor Methods, Compatibility Attributes, CLI, Logging)
업스트림이 dict/list가 아닌 값(예: 순수 문자열)을 반환해 매핑할 수 없을 때 런타임에 발생하는 예외.
매핑 가능한 데이터 타입, 템플릿 필드와의 상호작용, 매핑 상한과 빈 매핑 처리
· authoring-and-scheduling/dynamic-task-mapping.rst - What data types can be expanded?, How do templated fields and mapped arguments interact?, Placing limits on mapped tasks, Automatically skipping zero-length maps (약 603-709줄)
존재하면 업데이트, 없으면 삽입하는 연산. 재시도 시 INSERT로 인한 중복 행 생성을 막기 위해 사용.
Dag 작성 원칙 - 태스크를 트랜잭션처럼, 안전한 태스크 간 통신
· best-practices.rst - "Writing a Dag" ~ "Communication" 섹션 (약 33-96행)
스케줄러가 SELECT...FOR UPDATE를 쓸지 정하는 설정. False로 끄면 다중 스케줄러 실행이 금지된다.
스케줄러 성능 튜닝
· administration-and-deployment/scheduler.rst (Fine-tuning your Scheduler performance 절)
Airflow의 전역(또는 Team 단위) key/value 런타임 설정 저장소. Variable.get()이나 컨텍스트의 var를 통해 조회하며, 태스크 간 데이터 전달에는 쓰지 않는다.
Variables와 Params — 런타임 설정 전달하기
· core-concepts/variables.rst, core-concepts/params.rst
특정 도메인 객체가 아니라 IMPORT_ERRORS, JOBS, PLUGINS, PROVIDERS 같은 시스템 정보 페이지에 대응하는 singleton 권한 리소스.
레거시 권한 모듈 폐기와 API 엔드포인트 권한 참조
· security/deprecated_permissions.rst (전체), security/api_permissions_ref.rst (자동 생성 레퍼런스, 요약)
trigger_rule=ONE_FAILED로 설정되고 모든 다른 태스크의 다운스트림에 위치한 태스크를 이용해, teardown 등으로 가려질 수 있는 태스크 실패를 Dag Run 실패로 전파시키는 패턴.
Dag 변경 직후 트리거 자제, Watcher 패턴, AirflowClusterPolicySkipDag
· best-practices.rst - "Triggering Dags after changes" ~ "Using AirflowClusterPolicySkipDag..." 섹션 (약 497-621행)
priority_weight의 실효 총 가중치를 계산하는 방법. downstream(기본)·upstream·absolute 세 가지가 내장되어 있고 PriorityWeightStrategy로 커스텀 구현이 가능하다.
Priority Weight — 세 가지 weight_rule과 Pool의 관계
· administration-and-deployment/priority-weight.rst (전체)
하나의 다운스트림 파티션 키를 이루는 데 필요한 업스트림 키의 집합(또는 팬아웃 대상 집합)을 선언하는 클래스. HourWindow, DayWindow, WeekWindow, SegmentWindow 등이 있다.
Asset 파티션 심화 (Rollup·FanOut 매퍼와 대기 정책)
· authoring-and-scheduling/assets.rst - Rollup mappers, Wait policies, Segment (categorical) rollup, Setting partition keys at runtime, Fan-out mappers, Window direction, Custom partition mappers/windows/timetables (versionadded 3.3.0)
LocalExecutor/CeleryExecutor 환경에서 실행 중인 태스크의 로그를 실시간으로 서빙하는 HTTP 서버의 기본 포트(8793).
태스크 로깅: 파일 저장, 원격 로깅, 로그 서빙
· administration-and-deployment/logging-monitoring/logging-tasks.rst (전체)
워크플로우를 클릭 기반 UI가 아니라 Python 코드로 정의하는 Airflow의 핵심 철학. 동적 생성, 버전 관리, 협업, 테스트가 가능해진다.
Airflow란 무엇인가
· docs/Airflow/docs/index.rst - What is Airflow?, Workflows as code, Dags, Why/Why not Airflow
실행기가 워커에서 실행하는 최소 단위 작업을 표현하는 객체(예: ExecuteTask).
커스텀 실행기 작성하기 — BaseExecutor 인터페이스
· core-concepts/executor/index.rst - Writing Your Own Executor (Workloads, BaseExecutor Methods, Compatibility Attributes, CLI, Logging)
GKE에서 개별 쿠버네티스 파드에 GCP 서비스 계정 신원을 할당하는 메커니즘.
프로덕션 배포: GCP 환경에서의 보안 접근 구성
· administration-and-deployment/production-deployment.rst (Secured Server and Service Access on Google Cloud 절)
스케줄러가 태스크 디스패치 시 발급하는, 큐 대기 시간(task_queued_timeout)을 커버하는 JWT 스코프. /run 호출만 허용된다.
JWT 인증 (2) Execution API 스코프와 워크로드 격리 한계
· security/jwt_token_authentication.rst — Execution API Authentication Flow, Dag File Processor and Triggerer 섹션
Windows Subsystem for Linux 2. Windows에서 Airflow를 실행하는 두 가지 허용 방법(WSL2, Linux 컨테이너) 중 하나.
사전 요구사항: 지원 Python/DB/K8s 버전과 OS 정책
· installation/prerequisites.rst (전체, L1-63)
태스크 간에 소량의 데이터를 주고받기 위한 Airflow의 메커니즘. TaskFlow에서는 함수 반환값이 자동으로 XCom에 저장된다.
TaskFlow API로 파이썬답게 ETL 작성하기
· docs/Airflow/docs/tutorial/taskflow.rst (전반부: The Big Picture ~ Task Parameterization)
key, task_id, dag_id로 식별되는, 격리된 태스크 간에 소량의 데이터를 주고받는 메커니즘. xcom_push/xcom_pull로 명시적으로 다룬다.
XCom을 통한 태스크 간 통신
· core-concepts/xcoms.rst
Cross-Communication의 약자로, 태스크 간에 작은 데이터를 주고받기 위한 Airflow의 메커니즘.
Dag 작성 원칙 - 태스크를 트랜잭션처럼, 안전한 태스크 간 통신
· best-practices.rst - "Writing a Dag" ~ "Communication" 섹션 (약 33-96행)
XCom 값을 실제로 저장하는 저장소 구현. 기본값은 메타데이터 DB에 저장하는 BaseXCom이며, xcom_backend 설정으로 오브젝트 스토리지 등 커스텀 백엔드로 교체할 수 있다.
XCom을 통한 태스크 간 통신
· core-concepts/xcoms.rst
task_ids 없이 호출했을 때 검색하는 범위. Airflow 2는 DagRun 전체, Airflow 3는 현재 태스크로 한정된다.
Airflow 3 업그레이드 (3): 파괴적 변경 목록과 logical_date/data_interval 의미 변화
· installation/upgrading_to_airflow3.rst, 'Breaking Changes' ~ 끝 (L348-455)
TaskFlow 함수를 Dag 파일에서 호출했을 때 즉시 실행 대신 반환되는 객체로, 그 함수의 반환값(XCom)을 나타내며 다운스트림 태스크의 입력으로 쓰면 XCom 전달과 의존성 선언이 함께 이루어진다.
TaskFlow API — @task로 Dag 작성하기
· core-concepts/taskflow.rst
워커가 죽거나(OOMKill 등) 재시작되어 TaskInstance가 running 상태에 갇힌 경우를 가리키는 과거 용어. Airflow가 주기적으로 감지해 failed 처리하거나 재시도시킨다.
재시도 정책(Retry Policy)과 Heartbeat Timeout
· core-concepts/tasks.rst - Retry Policies, Task Instance Heartbeat Timeout, Executor Configuration
워커사이드 백엔드의 직렬화 훅이 반환해야 하는, 같은 입력에 항상 같은 값을 내는 참조 문자열. 고아 객체 복구 가능성을 보장하는 핵심 조건.
태스크/에셋 상태 저장소 설정 (Airflow 3.3+)
· administration-and-deployment/task-and-asset-state-store.rst (전체)
Dag Run의 데이터 인터벌 시작 시각(data_interval_start)을 가리키는 개념. Airflow 2.2 이전에는 execution_date로 불렸다.
Dag Run과 데이터 인터벌
· core-concepts/dag-run.rst - Dag Run Status, Data Interval, Manual Triggering and Data Intervals
inlet/outlet이 정확히 하나일 때 subscript 없이 context['asset_state_store']를 바로 쓰는 문법. 두 개 이상이면 ValueError.
Asset State Store API 상세 — 워터마크 패턴과 Watcher Trigger
· core-concepts/asset-state-store.rst 전체 (Airflow 3.3에 추가)
[api_auth] jwt_secret으로 토큰 생성과 검증에 같은 키를 쓰는 모드. 이 키에 접근하는 어떤 컴포넌트든 임의 토큰을 위조할 수 있다.
현재 격리의 한계 - DB 자격증명 탈취와 JWT 우회 리스크
· security/security_model.rst - "Current isolation limitations" 섹션 (약 433-544행)
데이터가 마지막으로 갱신된 시점이 현재 시각 기준으로 얼마나 최신인지를 나타내는 지표. 파이프라인이 정상 실행되어도 소스 데이터 자체가 오래되면 신선도가 낮게 측정될 수 있다.
파이프라인 모니터링과 관측성 실무
· "Monitoring and Observability" 절 (pp.4-5)
Dag Run이 다루는 시간 범위. 트리거 타임테이블에서는 트리거 시각과 동일한 제로 폭 구간이고, 데이터 인터벌 타임테이블에서는 실제 연속된 시간 윈도우다.
Dag Run과 데이터 인터벌
· core-concepts/dag-run.rst - Dag Run Status, Data Interval, Manual Triggering and Data Intervals
데이터의 구조와 값들 사이의 관계를 분석해 이상치나 예상치 못한 패턴을 탐지하는 기법.
데이터 품질 관리와 ETL vs ELT 아키텍처 선택
· "Understanding Data Quality" ~ "ETL Versus ELT" 절 (pp.1-3)
태스크 실행 시점에 임시 가상환경을 만들어 격리된 Python 의존성으로 실행하는 방식. 콜드 스타트 오버헤드가 있다.
TaskFlow 고급 패턴: 실행 환경 격리, 센서, 조건부 실행
· docs/Airflow/docs/tutorial/taskflow.rst (후반부: Advanced TaskFlow Patterns)
Dag 안에서 자식(다운스트림) 태스크가 없는 태스크. Dag Run의 최종 success/failed 상태는 리프 노드들의 상태로 결정된다.
Dag Run과 데이터 인터벌
· core-concepts/dag-run.rst - Dag Run Status, Data Interval, Manual Triggering and Data Intervals
동일한 태스크를 여러 번 재실행해도 항상 같은 결과를 내는 성질. Airflow 태스크 설계의 핵심 원칙.
Dag 작성 원칙 - 태스크를 트랜잭션처럼, 안전한 태스크 간 통신
· best-practices.rst - "Writing a Dag" ~ "Communication" 섹션 (약 33-96행)
동일한 입력으로 동일한 작업을 여러 번 수행해도 결과가 달라지지 않고 부작용(중복 등)이 발생하지 않는 성질.
프로덕션 Dag 설계 원칙 — 멱등성, Atomic Task, 코드 구조
· Section 3, 5 (pp.7, 10-11) — Idempotency, Atomic Execution, Gold Standard 구조
한 번 충족되면 영구히 참으로 남는 조건(예: 파일 존재 여부)을 기준으로 스케줄링할 때, 조건 확인마다 Dag가 계속 재트리거되는 문제.
이벤트 기반 스케줄링 기초 (AssetWatcher와 BaseEventTrigger)
· authoring-and-scheduling/event-scheduling.rst - Event-driven scheduling (개요), Supported triggers for event-driven scheduling, Avoid infinite scheduling, Use cases for event-driven Dags (versionadded 3.0)
password, secret, token 등 Variable/Connection extra 필드 이름에 포함되면 자동 마스킹을 트리거하는 기본 키워드 집합.
Fernet 암호화와 민감정보 마스킹
· security/secrets/fernet.rst (전체), security/secrets/mask-sensitive-values.rst (전체), security/secrets/index.rst (개요)
과거 특정 기간에 대한 Dag 실행을 다시(또는 처음으로) 수행하는 것. 과거 데이터를 재처리할 때 사용한다.
Airflow란 무엇인가
· docs/Airflow/docs/index.rst - What is Airflow?, Workflows as code, Dags, Why/Why not Airflow
태스크 실패 시 같은 Dag run에서 먼저 실행된 다른 태스크들의 상태/소요시간 등을 Sentry 이벤트에 덧붙이는 정보.
에러 트래킹: Sentry 연동
· administration-and-deployment/logging-monitoring/errors.rst (전체)
특정 다운스트림 시스템의 실패가 반복될 때, 무의미한 재시도를 계속하며 장애를 연쇄시키는 대신 일정 시간 해당 호출 자체를 차단해 전체 시스템을 보호하는 장애 격리 패턴.
파이프라인 검증, 보안, 버전관리, 에러 핸들링 실무 종합
· "Validation and Security" ~ "Version Control, Testing, and Error Handling" 절 (pp.5-6)
reschedule 모드 센서에서 첫 실행부터 성공까지 허용되는 총 시간. 초과 시 재시도 없이 AirflowSensorTimeout으로 즉시 실패하며, 재시도로 리셋되지 않는다.
Task와 Task Instance — 상태와 생명주기
· core-concepts/tasks.rst - Relationships, Task Instances, Task states, Timeouts, SLAs, Special Exceptions
분기 등으로 스킵된 태스크가 all_success/all_failed trigger rule을 가진 다운스트림 태스크까지 연쇄적으로 스킵시키는 현상.
Dag 제어 흐름 — 분기, Trigger Rule, Depends On Past
· core-concepts/dags.rst - Control Flow (Branching, Latest Only, Depends On Past, Trigger Rules, Setup and teardown)
너무 많은(또는 중요하지 않은) 알림에 반복적으로 노출되어, 팀이 점차 알림에 둔감해지고 실제로 중요한 알림까지 놓치게 되는 현상.
파이프라인 모니터링과 관측성 실무
· "Monitoring and Observability" 절 (pp.4-5)
INSERT ... ON CONFLICT DO UPDATE처럼, 레코드가 이미 있으면 갱신하고 없으면 삽입하는 단일 SQL 연산.
SQL 기반 데이터 파이프라인 구축하기
· docs/Airflow/docs/tutorial/pipeline.rst
메타데이터 DB 접근 권한이 없고 JWT 인증된 Execution API로만 데이터에 접근하는 컴포넌트군. 워커가 해당된다.
JWT 인증 아키텍처와 컨트롤플레인/워커플레인 신뢰 경계
· security/security_model.rst - "JWT authentication and workload isolation" 섹션, mermaid 신뢰 경계 다이어그램과 "Defense in depth at the router level" (약 352-431행)
시간/의존성 기반이 아니라 외부 리소스의 상태 변화(메시지 도착 등)로 Dag를 트리거하는 방식.
Message Queues — 이벤트 기반 Dag 스케줄링
· core-concepts/message-queues.rst 전체
서비스 계정 키를 발급/저장하지 않고 토큰 교환으로 다른 서비스 계정의 권한을 사용하는 방식.
프로덕션 배포: GCP 환경에서의 보안 접근 구성
· administration-and-deployment/production-deployment.rst (Secured Server and Service Access on Google Cloud 절)
태스크의 실행 순서가 아니라, 파이프라인이 만들어내는 데이터 산출물(테이블·파일·모델) 사이의 의존관계를 선언 단위로 삼는 오케스트레이션 모델. Dagster가 대표적이다.
오케스트레이터 3파전 — Airflow, Dagster, Prefect의 사고 모델 차이
· "How Each One Works" ~ "Developer Experience" 절 (pp.2-7)
예외 타입별로 재시도 동작(RETRY/FAIL/DEFAULT)을 선언적으로 구성하는 태스크 파라미터. 태스크 워커 프로세스 안에서 평가된다.
재시도 정책(Retry Policy)과 Heartbeat Timeout
· core-concepts/tasks.rst - Retry Policies, Task Instance Heartbeat Timeout, Executor Configuration
Airflow의 timing/timer 메트릭이 집계되는 OTel 히스토그램 형식. 버킷 경계가 관측 범위에 자동으로 맞춰진다.
메트릭 설정: StatsD와 OpenTelemetry
· administration-and-deployment/logging-monitoring/metrics.rst (전체)
Airflow가 값을 직렬화할 때 시도하는 순서: 원시값 → 등록된 직렬화기 → 객체의 serialize()/deserialize() → @dataclass/@attr.define 공개 필드.
직렬화(Serialization) 해석 순서와 커스텀 직렬화기 작성
· authoring-and-scheduling/serializers.rst - Serialization, Serialization resolution order, Airflow Object, Registered (전체, 144줄)
스케줄러가 스케줄링 결정을 내릴 때 사용하는, DB에 저장된 Dag의 직렬화 형태.
스케줄러 기본 동작과 다중 스케줄러(HA)
· administration-and-deployment/scheduler.rst (개요 ~ Database Requirements 절)
메타데이터 DB에 SQL로 직접 접근하는 컴포넌트군. API Server, Scheduler, Dag File Processor, Triggerer가 해당된다.
JWT 인증 아키텍처와 컨트롤플레인/워커플레인 신뢰 경계
· security/security_model.rst - "JWT authentication and workload isolation" 섹션, mermaid 신뢰 경계 다이어그램과 "Defense in depth at the router level" (약 352-431행)
재시도/클리어 시 보존되는 과거 시도들의 속성값과 로그. XCom과 렌더링된 템플릿 필드는 포함되지 않는다.
Catchup, Backfill, 재실행과 태스크 클리어
· core-concepts/dag-run.rst - Catchup, Backfill, Re-run Tasks, Task Instance History, External Triggers, Passing Parameters, Wait for a Dag Run
실패한 태스크 인스턴스를 재실행 가능한 상태로 되돌리는 조작. try_number 증가, max_tries=0, state=None으로 초기화된다.
Catchup, Backfill, 재실행과 태스크 클리어
· core-concepts/dag-run.rst - Catchup, Backfill, Re-run Tasks, Task Instance History, External Triggers, Passing Parameters, Wait for a Dag Run
S3, Snowflake, Vault 등 실제 사용하는 외부 서비스를 테스트/dev 계정으로 호출해보는 전용 Dag. 업그레이드 직후 가장 먼저 켜서 안전하게 검증하는 용도로 쓰인다.
메타데이터 DB 유지보수, 안전한 업그레이드/다운그레이드 절차
· best-practices.rst - "Metadata DB maintenance" ~ "Prune data before upgrading" 섹션 (약 914-952행)
지연(defer)된 태스크를 asyncio 이벤트 루프에서 실행하는 선택 컴포넌트. Human-in-the-loop 태스크는 트리거러를 쓰지 않는다.
Airflow 아키텍처 개요 (컴포넌트와 배포 형태)
· core-concepts/overview.rst
스케줄러가 한 반복에서 풀의 빈 슬롯 수만큼만 태스크를 스케줄링하는 방식. 대기량이 슬롯보다 많아야 우선순위가 실질적으로 작동한다.
스케줄러 기본 동작과 다중 스케줄러(HA)
· administration-and-deployment/scheduler.rst (개요 ~ Database Requirements 절)
워크플로우를 별도의 DAG 객체나 설정 파일 없이 일반 Python 함수(및 데코레이터)로 표현하는 모델. Prefect가 대표적이며, 그래프가 파싱 시점이 아니라 런타임에 동적으로 구성된다.
오케스트레이터 3파전 — Airflow, Dagster, Prefect의 사고 모델 차이
· "How Each One Works" ~ "Developer Experience" 절 (pp.2-7)