Airflow 자체가 "워크플로우 실행 스케줄러"라서, 어떤 DAG이 언제 실행됐는지, 태스크 상태는 무엇인지 등을 기록하고 조회할 필요가 있다.
이 모든 정보를 저장하는 DB가 Metadata Database입니다.
PostgreSQL
MySQL/MariaDB
일반적으로 PostgreSQL을 제일 많이 사용한다.
개발/테스트용: SQLite (기본 제공, 동시성 약함)
| 구분 | 저장 내용 | 예시 |
|---|---|---|
| DAG 정보 | 어떤 DAG이 존재하는지, DAG 버전/구조, 스케줄러가 인식한 DAG run | dag_id, DAG 파일 버전, DAG 구조 그래프, dag_run 기록 |
| Task Instance 정보 | 태스크 실행 상태(success, failed, running, skipped), 시작/종료 시간, 로그 위치, 실행 횟수 | task_id, state, start_date, end_date, 로그 경로, 재시도 횟수 |
| 스케줄링 정보 | DAG이 언제 트리거 되었는지, 다음 실행 예정 시간 | execution_date, next_run_date, manual/cron trigger 여부 |
| 연결 및 설정 정보 | Connection(외부 DB, API, S3 등), Variables(사용자 정의 변수), XComs(태스크 간 데이터 전달) | conn_id(Postgres, MySQL), API Key, threshold 값, XCom JSON 데이터 |
docker compose 띄우고
airflow db check
[2025-09-19T09:24:30.037+0900] {db.py:1812} INFO - Connection successful.
airflw db shell ( sqllte 직접 붙기 가능 )
SQLite version 3.39.5 2022-10-14 20:58:05
Enter ".help" for usage hints.
sqlite>
| 테이블 | 기능 | 주요 컬럼 | 예시 |
|---|---|---|---|
| dag | DAG 정의 정보 | dag_id, fileloc, is_paused | 'my_dag', 활성(0) |
| dag_run | DAG 실행 이력 | dag_id, execution_date, state, run_id | 'my_dag', '2025-09-19 09:00', 'success' |
| task_instance | Task 실행 상태 | dag_id, task_id, execution_date, state, start_date, end_date | 'task_1', 'success' |
| log | Task/DAG 실행 로그 | dag_id, task_id, execution_date, event, message | 'Task started successfully.' |
| connection | 외부 시스템 연결 정보 | conn_id, conn_type, host, login, password, port, schema | 'my_postgres', 'postgres' |
| variable | DAG에서 참조 가능한 Key-Value 변수 | key, val | 'env' = 'prod' |
| xcom | Task 간 데이터 전달 | dag_id, task_id, execution_date, key, value | 'result' = 'Hello World' |