개발 slecs

선물 만료 자동 배치에 멱등성·모니터링 설계 적용

목차

feat: 선물 만료 자동 배치 작업 추가

배치 작업은 운영 중에 터지면 치명적이라 스케줄링 설계를 꼼꼼히 해야 함.

배치 설계 원칙

  • 멱등성: 동일 조건으로 여러 번 돌아도 같은 결과
  • 실패 로그: 어떤 건이 실패했는지 추적 가능해야 함
  • 부분 성공: 일부 실패해도 나머지는 처리 계속
  • 알림: 오류 발생 시 담당자에게 즉시 알림

스케줄 구성

@Scheduled(cron = "0 0 2 * * ?") // 매일 새벽 2시
public void runBatch() {
    log.info("배치 시작");
    try {
        int processed = service.processPending();
        log.info("처리 완료: {}건", processed);
    } catch (Exception e) {
        log.error("배치 실패", e);
        notificationUtil.alertAdmin("배치 실패: " + e.getMessage());
    }
}

배치 실행 이력 관리

컬럼 설명
batch_key 배치 고유 식별자
started_at 시작 시각
ended_at 종료 시각
processed_cnt 처리 건수
status SUCCESS / FAIL / PARTIAL

배치 이력은 최소 3개월 보관. 문제 발생 시 특정 시점 데이터 재처리가 가능해야 함.

배치 모니터링

배치가 언제 돌았고 얼마나 처리했는지 추적 가능해야 함.

-- 배치 실행 이력 확인
SELECT batch_key, started_at, ended_at,
       TIMESTAMPDIFF(SECOND, started_at, ended_at) AS duration_sec,
       processed_cnt, error_cnt, status
FROM batch_history
ORDER BY started_at DESC
LIMIT 20;

실패한 배치가 다음 날 재실행될 때 중복 처리 없이 안전하게 이어서 실행될 수 있는 구조여야 함. settlement_key 같은 멱등 키가 이 역할을 함.

댓글 0

첫 댓글 달아줘.