목록 보기
@RequestCache: HTTP 요청 범위 캐싱을 위한 커스텀 애너테이션 개발기
백엔드

@RequestCache: HTTP 요청 범위 캐싱을 위한 커스텀 애너테이션 개발기

네이버 D2
네이버 D2
2025년 11월 26일

두줄요약

HTTP 요청 범위에서 반복 호출을 막기 위해 @RequestCache를 설계한 과정을 정리했습니다. 요청 스코프와 Actuator 충돌로 발생한 예외와 해결 방향도 함께 다뤘습니다.

핵심 내용

  • HTTP 요청 범위에서 동일 외부 API 호출과 반복 연산을 줄이기 위한 커스텀 애너테이션 @RequestCache 개발기
  • RequestAttribute 기반으로 요청별 캐시를 분리하고, 요청 종료 시 자동 정리되는 생명주기 설계
  • 파라미터 전달 방식과 Redis/Local 캐시의 TTL 한계를 검토한 뒤, 요청 범위 캐싱의 필요성 정리
  • @RequestScope 적용 과정에서 Spring Actuator의 CacheMetricsAutoConfiguration과 충돌해 ScopeNotActiveException이 발생한 시행착오 공유

원인 분석

  • 하나의 HTTP 요청 안에서 동일한 프로필 조회 API가 여러 서비스에서 중복 호출되는 구조
  • 응답 객체를 파라미터로 전파하면 호출 깊이와 인터페이스 수가 늘어나고, 불필요한 의존성이 생기는 문제
  • TTL 기반 캐시는 요청 내 중복 방지 목적과 생명주기가 맞지 않아, 짧으면 만료가 빠르고 길면 요청 간 공유 위험이 생기는 문제

해결 방법

  • 요청 범위에 맞춘 @RequestCache 애너테이션으로 메서드 결과를 캐싱하는 방식 채택
  • RequestAttribute와 ThreadLocal 기반 분리로 요청별 독립 캐시 인스턴스 확보
  • @RequestScope Bean을 활용하려 했으나, 시작 시점에 활성화되지 않는 request scope와 actuator 캐시 메트릭 자동 설정의 충돌 확인

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...