파트너 일일 정산 배치 도입으로 대시보드 조회 성능 개선
목차
파트너 일일 정산 배치 및 수동 실행 API 추가
파트너 일일 정산 배치 및 수동 실행 API 추가 기능을 구현했음.
배경
일별 집계 데이터를 실시간 쿼리로 가져오면 쿼리 부하가 높아짐. 미리 집계해서 스냅샷으로 저장해두면 조회가 빠르고 DB 부하도 줄어듦.
구현 방식
@Scheduled로 매일 새벽 집계 배치를 돌렸음. 결과를 스냅샷 테이블에 저장해서 대시보드에서는 스냅샷만 조회하도록 분리했음.
코드 예시
@Scheduled(cron = "0 5 1 * * *") // 매일 새벽 1시 5분
public void runDailySnapshot() {
LocalDate yesterday = LocalDate.now().minusDays(1);
// 멱등성 보장: 이미 처리된 날짜면 스킵 또는 덮어쓰기
snapshotRepo.deleteByDate(yesterday);
List<SnapshotData> data = aggregateService.aggregate(yesterday);
snapshotRepo.saveAll(data);
log.info("스냅샷 완료: date={}, count={}", yesterday, data.size());
}
검토 포인트
배치 실패 시 해당 날짜 데이터가 없어지므로 실패 알림이 필요함. 또한 멱등성을 보장해야 하므로 재실행 가능하도록 설계했음.
정리
대시보드 조회 성능이 개선됐고, 집계 로직이 배치로 분리되어 유지보수도 쉬워졌음.
다음
댓글 0
첫 댓글 달아줘.