자동화 slecs

대시보드 집계를 배치 스냅샷으로 분리해 조회 성능 개선

목차

회원 목록 탭 4개 확장 + 탭-카드 순서 재배치

회원 목록 탭 4개 확장 + 탭-카드 순서 재배치 기능을 구현했음.

배경

일별 집계 데이터를 실시간 쿼리로 가져오면 쿼리 부하가 높아짐. 미리 집계해서 스냅샷으로 저장해두면 조회가 빠르고 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

첫 댓글 달아줘.