Backfill - 과거 기간 실행

Backfill - 과거 기간 실행

DAG를 정의할 때 start_date를 잡아두면, 사실상 과거 데이터 구간들도 실행 대상에 포함돼요. 그런데 스케줄러는 기본적으로 가장 최근 구간만 실행하죠. 만약 지나간 날짜 범위의 실행을 별도로 만들어야 한다면, 그게 바로 Backfill이에요. Airflow는 CLI와 REST API로 Backfill을 지원해요.

출처: Backfill - Apache Airflow 공식 문서

Backfill이란

Backfill은 DAG의 과거 날짜들에 대한 실행(run)을 만들어 주는 기능이에요. DAG와 시작 날짜, 종료 날짜를 주면 Airflow가 그 범위의 구간들을 DAG의 스케줄에 따라 실행으로 만들어요. 당연히 시간 기반 스케줄이 없는 DAG에서는 Backfill이 의미가 없어요.

데이터 재처리 제어 (Data reprocessing)

재처리 동작에는 세 가지 옵션이 있어요.

  • none - 해당 논리적 날짜에 이미 실행이 있으면, 상태와 무관하게 새 실행을 만들지 않음
  • failed - 이미 실행이 있는데 상태가 failed면 그 날짜에 새 실행을 만듦
  • completed - 이미 실행이 있는데 상태가 completed 또는 failed면 새 실행을 만듦

최신 실행이 아직 running이거나 queued라면, 어떤 재처리 동작을 선택했든 새 실행을 만들지 않아요.

동시성 제어 (Concurrency control)

Backfill에 max_active_runs를 설정하면, 그 backfill 안에서 몇 개의 Dag run이 동시에 실행될 수 있는지 제어할 수 있어요. Backfill의 max_active_runs는 DAG 자체의 max_active_runs 설정과는 별개로 적용돼요.

실행 순서 (Run ordering)

Backfill을 역순으로 실행할 수도 있어요. 즉 최신 실행을 먼저 실행하는 거죠. CLI 옵션은 --run-backwards예요.

Dry run

Backfill dry run은 CLI 옵션으로, backfill이 실행을 만들지 고려할 날짜들을 출력만 해줘요. 실제로 실행이 생성될지는 선택한 재처리 동작과, 그 시점에 범위 내 기존 실행들의 상태에 따라 달라져요.

예시

Backfill은 CLI 또는 UI로 만들 수 있어요.

CLI로는 아래처럼 실행하면 돼요.

 airflow backfill create --dag-id tutorial \
 --from-date 2015-06-01 \
 --to-date 2015-06-07 \
 --reprocess-behavior failed \
 --max-active-runs 3 \
 --run-backwards \
 --dag-run-conf '{"my": "param"}'

UI로는 다음 순서를 따라가면 돼요.

  1. DAG의 Details 페이지로 이동해 Trigger를 클릭해요.
  2. 팝업 창에서 Backfill을 선택해요.
  3. 폼을 채워요.
  • Date range: Backfill 구간의 "From"과 "To" 논리적 날짜를 설정해요.
  • Reprocess behavior: MissingRuns, MissingandErroredRuns, AllRuns 중 하나를 골라요.
  • Max active runs: 이 backfill에서 동시에 실행할 최대 실행 수를 제한해요.
  • Run backwards: 가장 최근 구간부터 먼저 실행해요.
  • Advanced Config: 선택적으로 JSON dag_run.conf를 제공해요.
  • DAG가 paused 상태라면 같은 창에서 Unpause할 수 있어요.

Backfill 팝업 창 (Light Mode)

파티션 기반 DAG의 Backfill

파티션 기반 타임테이블(예: CronPartitionTimetable)을 쓰는 DAG도 모든 backfill에서 동일한 --from-date / --to-date 플래그를 사용해요. Airflow가 DAG가 파티션 기반인지 자동으로 감지해서, 날짜 범위를 파티션 날짜 범위로 해석해요. 즉 구간 내 각 파티션마다 Dag run이 하나씩 만들어져요.

예시: 2026-02-18부터 2026-02-20까지의 파티션을 backfill하려면:

 airflow backfill create --dag-id my_partitioned_dag \
 --from-date 2026-02-18 \
 --to-date 2026-02-20

동시성은 다른 backfill과 마찬가지로 --max-active-runs 옵션으로 제어해요.

더 알아보기