brandonwie.dev
EN / KR
On this page
backend backendetlslack

조기 종료 시 Backfill 통계 매니페스트

조기 종료 경로가 있는 작업에서는 항상 stats/status 매니페스트를 저장해서 다운스트림 콜백이 유의미한 정보를 표시할 수 있게 해야 해요.

Updated March 22, 2026 2 min read

문제

def execute(self):
    missing_data = read_missing_manifests(start_date, end_date)

    if not missing_data:
        self.logger.info("No missing hours found")
        return JobResult(status="success", total_records=0)  # ← 조기 종료

    # ... 데이터 처리 ...

    self._save_backfill_stats_manifest(stats)  # ← 조기 종료 시 도달하지 않음

결과: Slack 콜백이 존재하지 않는 매니페스트를 읽으려고 해요. 비어있거나 혼란스러운 0 값이 표시돼요.

해결 방법

조기 종료 시에도 항상 매니페스트를 저장하세요:

def execute(self):
    missing_data = read_missing_manifests(start_date, end_date)

    if not missing_data:
        self.logger.info("No missing hours found")

        # Slack 콜백이 표시할 데이터를 위해 통계 저장
        stats = {
            "start_date": start_date,
            "end_date": end_date,
            "dates_processed": 0,
            "hours_recovered": 0,
            "still_missing": {},
            "message": "No missing hours found in date range",
        }
        self._save_backfill_stats_manifest(stats)

        return JobResult(status="success", total_records=0)

핵심 원칙

최적화보다 관측 가능성. 작은 JSON 매니페스트를 S3에 쓰는 비용은 무시할 수 있어요. 모니터링/알림을 위해 항상 상태 정보가 있는 것의 이점은 크죠.

적용 대상

  • 성공 콜백이 있는 모든 작업(Slack, 이메일 등)
  • “할 일이 없어서” 조기 종료할 수 있는 모든 작업
  • 유효성 검사/스킵 로직이 있는 ETL 작업

Comments

enko