Fivefy 프로젝트/트러블슈팅

스케줄러 기반 로직 테스트 설계와 운영 환경 고려

sudaruuu 2026. 4. 16. 23:00

문제 상황

주간 인기 차트 기능을 구현하면서 Playback 데이터를 기반으로 snapshot을 생성한 뒤 조회하는 구조로 설계를 진행했다.

 

하지만 개발 환경에서는 문제가 있었다.

snpashot 데이터가 없으면 조회 API 자체 테스트가 불가능한 상황

 

특히 snapshot 생성 로직은 스케줄러 기반으로 동작하도록 구현했기 때문에 정해진 시간(월요일 00:00)이 아니면 실행되지 않았다.

즉, 기능은 구현했지만 직접 실행해서 확인하기 어려운 상태였다.


원인 분석

스케줄러 기반 로직은 다음과 같은 특징이 있다.

  • 특정 시간에만 실행된다
  • 원하는 시점에 직접 실행하기 어렵다
  • 개발 환경에서는 즉시 결과 확인이 어렵다

이 때문에 다음과 같은 문제가 발생했다.

  • snapshot 생성이 정상적으로 되는지 확인 어려움
  • playback → 집계 → 저장 흐름을 직접 검증하기 어려움

해결 방향

이 문제를 해결하기 위해 snapshot 생성 로직을 직접 실행할 수 있도록 별도의 API를 추가했다.

@PostMapping("/test/popular-charts/generate")
public String generate() {
    popularChartGenerateService.generateWeeklyChart(LocalDate.now());
    return "ok";
}

 

이 API를 통해 다음 흐름을 바로 확인할 수 있었다.

playback 데이터 → 주간 집계 → snapshot 생성 → 인기 차트 조회

개선 과정

멘토님께 질문을 드린 결과, 이와 같은 방식은 실무에서도 자주 사용하는 방법이라는 피드백을 받았다.

스케줄러 기반 배치 로직은 별도의 엔드포인트를 통해 수동 실행할 수 있도록 구성하는 것이 일반적인 접근 방식

 

하지만 여기서 중요한 문제가 있었다.

테스트용 API가 운영 환경에 그대로 배포된다면?
  • 반복 호출 가능
  • DB 부하 증가
  • 악의적인 요청 가능

최종 개선

이 문제를 해결하기 위해 Spring Profile을 활용하여 실행 환경을 제한하였다.

@Profile({"local", "dev"})
  • local / dev 환경에서만 동작
  • 운영 환경에서는 해당 API 비활성화

결과

  • 개발 환경에서 snapshot 생성 및 조회 흐름을 빠르게 검증 가능
  • 테스트용 API가 운영 환경에 노출되는 문제 방지
  • 테스트 편의성과 운영 안정성을 동시에 확보

정리

스케줄러 기반 로직은 실제 운영 환경에서는 유용하지만, 개발 환경에서는 즉시 테스트가 어렵다는 한계가 있다.

따라서 단순 기능 구현을 넘어서 테스트 가능성과 운영 안정성을 함께 고려한 설계가 필요하다.


느낀 점

처음에는 단순히 기능이 동작하면 끝이라고 생각했지만, 실제로는 테스트 방법까지 함께 설계하는 것이 중요하다는 것을 느꼈다.

특히 운영 환경을 고려하지 않은 테스트용 기능을 오히려 시스템에 위험 요소가 될 수 있다는 점도 인지하게 되었다.

이번 경험을 통해 개발은 구현이 아니라 설계까지 포함된다는 것을 배울 수 있었다.