메서드 호출 결과를 캐시에 저장해 재사용할 수 있게 해주는 프레임워크.
캐시 저장소 종류(EnCache, Caffeine, Redis)상관없이 일관된 방식으로 캐시 기능 사용할 수 있도록 인터페이스 제공하는게 핵심임.
다음의 핵심 구성 요소로 이루어져있음.
RedisCacheManagerCaffeineCacheManagerConcurrentMapCacheManagerEhCacheCacheManager 등…@Cacheable
@CachePut
@CacheEvict
@Caching
@CacheConfig
스프링 캐시는 AOP 프록시 기반으로 동작함. 애너테이션 등으로 캐시가 적용된 메서드를 호출하면 프록시 객체가 요청을 가로채서 캐시를 적용하는 방식.
이 프록시가 key 생성 → 캐시매니저에게 캐시에서 key 조회 → 값이 있으면 바로 반환 → 없으면 메서드 본문 실행. 이런식으로 동작함.
주의할 점
Spring Cache는 “읽기 중심”으로 설계되었음.
따라서 데이터 변경이 일어날 때는 반드시 @CachePut or @CacheEvict가 필요함.
Spring Cache는 기본적으로 동기적 캐싱이라 다음 문제가 발생 가능함.