Spring 기반 HTTP 요청 캐싱, @RequestCache로 성능 UP!

by DD
6개월 전
조회수 7

HTTP 요청 내 중복 API 호출을 막기 위해 @RequestCache 애너테이션 개발

RequestAttribute 기반 캐싱, Spring CacheManager 구현으로 성능 개선

@AsyncKafka Consumer 환경에서는 캐싱 불가, ThreadLocal 방식은 미채택

요청 범위 캐싱 아키텍처

구체적으로 @RequestCacheSpring CacheManager를 활용하여 HTTP 요청 범위 내에서 캐싱을 수행한다. 따라서 RequestAttribute에 캐시 객체를 저장하여 각 요청별로 독립적인 캐시를 보장한다. 반면 @Async 환경에서는 RequestContextHolder 전파 문제로 인해 캐싱이 동작하지 않는다.

캐싱 방식 비교 분석

파라미터 전달 방식은 코드 중복유지보수성 저하를 야기한다. Redis/Local 캐시는 TTL 설정의 어려움으로 인해 HTTP 요청 범위 캐싱에 적합하지 않다. 따라서 @RequestCache는 요청 생명주기에 맞춰 캐시를 관리하여 데이터 일관성을 확보한다.

실전 적용 가이드

먼저 커스텀 CacheManager를 구현하여 Spring의 캐싱 기능을 확장한다. 구체적으로 NoOpCache를 활용하여 HTTP 요청 컨텍스트가 비활성화된 환경에서도 안전하게 동작하도록 한다. 결과적으로 @RequestCache 애너테이션을 통해 간편하게 캐싱을 적용하고, 성능 향상을 기대할 수 있다.

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