@RequestCache: HTTP 요청 범위 캐싱을 위한 커스텀 애너테이션 개발기
백엔드
@RequestCache: HTTP 요청 범위 캐싱을 위한 커스텀 애너테이션 개발기
두줄요약
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 캐시 메트릭 자동 설정의 충돌 확인
