Cache를 사용하면 자주 사용되는 리소스가 존재할 시에 리소스를 얻은 후 캐시 저장소에 만료시간과 함게 저장하고 사용자가 조회를 요청할 때 마다 만료시간 이건짜니는 캐시 저장소에 있는 리소스를 사용함으로써 조회 성능을 대폭 향상 시킬 수 있다.
일반적으로 동일한 리소스 대해 비번한 Select로 발생되는 DBMS 과부하를 줄이고자 사용한다.
Spring Cache
스프링은 캐시 추상화(Cache Abstraction)을 통해 편리한 캐싱 기능을 지원하고 있다.
Spring Cache Abstration이란? 사용자는 캐시 구현에 대해 신경 쓸 필요 없이 퍼블릭 인터페이스를 쉽게 캐싱 기능을 사용할 수 있는 것을 말한다.
더 구체적으로 말하자면, 캐싱이 필요한 비즈니스 로직에서 EhCache, Redis 등 캐싱 인프라스트럭쳐에 의존하지 않고 추상화된 퍼블릭 인터페이스로 캐싱을 할 수 있다. 이는 만약 EhCache로 사용중이다가 Redis로 변경되더라도 비즈니스 로직에는 영향을 주지 않는다는 장점을 말한다.
Spring Legacy에서는 SimpleCacheManager를 통해 빈을 CacheManager bean을 생성하여, Spring Boot에서는 spring-boot-starter-cache 아티팩트를 추가하여 캐싱 기능을 사용할 수 있다.
별도의 3rd-party 모듈이 없다면 Local Memory에 저장되는 ConcurrentMap 기반 ConcurrentMapCacheManager가 Bean으로 자동 등록된다. 3rd-party 모듈인 EHCache, Redis 등의 의존성을 추가하게되면 EHCacheCacheManager 또는 RedisCacheManager등을 Bean으로 등록되어 사용할 수 있다.