← 모든 글

Backfill, 어디까지 자동으로 믿을 수 있나

데이터 파이프라인 재처리 전략 — 자동화의 범위와 그 한계에 대한 실전 회고

Backfill 을 무조건 자동으로 돌리다가 한 번 크게 데인 뒤로, 나는 재처리 전략을 세 단계로 나눠 생각하게 됐다. 자동 / 반자동 / 수동. 어느 쪽이 더 좋다는 얘기가 아니라, 상황을 잘못 읽으면 자동화가 오히려 더 깊은 구멍을 판다는 얘기다.

사건의 발단 — 소급 집계가 조용히 틀렸다

최근 우리 팀에서 쓰는 이벤트 집계 파이프라인이 업스트림 스키마 변경으로 약 72시간치 데이터를 잘못 집계했다. 발견은 사건 발생 5일 뒤. 이미 대시보드 숫자를 보고 의사결정이 이뤄진 다음이었다.

문제는 backfill 자동화를 너무 잘 만들어뒀다는 점이었다. Airflow DAG 에 catchup=True + max_active_runs=3 이 걸려 있었고, 파이프라인이 복구되자마자 누락 구간을 조용히 채웠다. 오류 데이터 위에 오류 데이터를 덮어쓰면서. 알림은 없었다. 슬랙에 성공 체크가 찍혔으니까.

자동 backfill 이 안전한 구간

막상 따져보면 완전 자동이 맞는 경우는 꽤 좁다. 조건이 세 가지 동시에 충족될 때만 믿을 수 있다고 본다.

  • 멱등(idempotent) 보장이 코드 수준에서 검증된 경우. 선언만으로는 부족하다. 우리는 같은 날짜로 두 번 돌렸을 때 결과 row 수가 동일한지 검증하는 assertion 을 CI 에 심었다. 그전까지는 멱등이라고 믿었지만, 실제론 INSERT OR IGNORE 빠진 테이블이 두 군데 있었다.
  • 재처리 범위가 7일 이하일 때. 경험상 그 이상은 원본 데이터 자체가 변한 케이스가 섞인다. 업스트림이 수정 패치를 조용히 배포하거나, 파트너사 로그가 소급 수정되는 일이 실제로 있었다. 7일 넘어가면 원본부터 다시 확인하는 게 낫다.
  • 다운스트림에 집계 테이블이 없을 때. 집계가 걸리는 순간 재처리 순서가 중요해지고, 자동화는 그 순서를 보장하지 못한다.

반자동 — 사람이 트리거, 나머지는 시스템

우리가 가장 많이 쓰는 패턴이 여기다. 재처리 범위와 대상 날짜를 사람이 명시적으로 지정하면, 실행과 모니터링은 시스템이 맡는다.

실제로 Airflow 의 경우 trigger_dag API 에 confstart_date / end_date 를 넘기는 방식으로 운영 중이다. 여기서 중요한 건 실행 전에 드라이런 결과를 슬랙에 먼저 올리는 단계를 끼워 넣었다는 점이다. “이 범위 재처리하면 영향받는 테이블 목록과 예상 row 수” 를 5분 안에 볼 수 있다. 그걸 확인하고 승인 버튼을 누르면 본 실행이 시작된다.

처음엔 “승인 단계가 귀찮다” 는 얘기가 나왔다. 직접 해보니 귀찮음보다 승인 전에 범위를 한 번 더 보게 된다는 효과가 컸다. 지난 분기에만 잘못된 날짜 범위를 승인 단계에서 세 번 잡아냈다.

수동 재처리를 남기는 이유

완전 수동으로 남겨두는 구간도 있다. 요금 정산 관련 집계, 외부 파트너에 전송하는 데이터, 그리고 재처리 범위가 30일을 넘는 경우다.

이 세 가지는 자동화가 빠를수록 리스크가 커진다. 정산 데이터는 한 번 틀리면 청구서가 나가버리고, 외부 전송은 되돌리는 API 자체가 없는 경우가 많다. 30일 이상은 아까 말했듯 원본 신뢰성 자체를 먼저 확인해야 한다.

수동이라고 해서 절차가 없는 건 아니다. 재처리 체크리스트를 노션에 고정해뒀다. 원본 데이터 스냅샷 백업 → 영향 범위 명시 → 팀장 확인 → 실행 → 완료 후 row 수 비교 캡처. 귀찮지만 이 흐름이 있어야 사후에 “왜 이 날짜가 재처리됐지” 를 설명할 수 있다.

재처리 전에 꼭 확인하는 것 하나

재처리를 시작하기 전에 가장 먼저 보는 건 “원본이 지금 안전한가” 다. 파이프라인을 고쳤다 해도 원본이 아직 오염 상태면 다시 돌려봤자 같은 결과가 나온다.

우리는 원본 테이블에 대해 간단한 sanity check 쿼리를 backfill DAG 첫 번째 태스크로 넣었다. null 비율, row 수 이상값, timestamp 역전 여부. 이 체크가 실패하면 전체 DAG 가 멈추고 슬랙으로 알린다. 추가한 건 올해 초인데, 그 이후로 오염 원본 위에 재처리가 돌아간 케이스는 없다. 전에는 두 번 있었다.

다음 한 가지

반자동 backfill 의 드라이런 결과를 지금은 슬랙 텍스트로만 보내는데, 다음 분기 안에 영향 테이블 시각화(lineage 그래프 한 장)를 붙여서 승인자가 문맥 없이도 판단할 수 있게 만든다.


🛒 이 글과 어울리는 추천 상품

위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.