스프링부트 로컬 캐시 : Caffeine 캐시
이 서비스에 적합한 로컬 캐시 선택 과정
<aside> ✅ 현재 1개의 서버를 운영중이기 때문에 Local Cache를 선택해야 했고, 그 중에서 빠르면서 만료 기능을 사용할 수 있는 Caffeine 캐시를 선택 하였습니다.
</aside>
구분 | ConcurrentMapCacheManager | EhCacheCacheManager | CaffeineCacheManager |
---|---|---|---|
캐시 라이브러리 | 자바 내장 ConcurrentMap | Ehcache | |
(의존성 등록 필요) | Caffeine | ||
(의존성 등록 필요) | |||
캐시가 저장되는 곳 | ConcurrentMap | In-Memory | ConcurrentHashMap |
분산 캐싱 지원 여부 | X | O | X |
만료 기능 지원 여부 | X | O | O |
만료 정책 | X | timeToLiveSeconds, timeToIdleSeconds | expireAfterWrite , expireAfterAccess 등 |
메모리 저장위치 | Jvm의 Heap 영역 | Jvm의 Heap 영역 | Jvm의 Heap 영역 |
Caffeine cache 환경 설정
build.gradle
LocalCacheConfig.class
: “postCache”라는 이름의 캐시 사용 설정컨트롤러 계층에 @Cacheable 어노테이션 적용
<aside> ✅ 게시글 정보를 DB에서 조회시 ⇒postCache에 저장된 값이 있다면 DB 조회과정을 생략하고 그 값을 반환 ⇒postCache에 저장된 값이 없다면 DB에서 조회 후 반환하면서 postCache에 값을 저장
</aside>
PostController.class
: 컨트롤러 코드PostControllerTest.class
: 컨트롤러 테스트 코드캐시 적용 전/후 게시글 조회 API 실행 결과
<aside> ✅ Local Cache 적용 전 1회 요청시 18ms의 응답시간이 소요되었고, Local Cache 적용 후, 1회 요청시 응답 시간이 6ms초가 기록되었기 때문에 응답 시간이 66.67% 개선되었다는 것을 확인할 수 있습니다. 그렇다면, 동시에 많은 양의 요청을 보냈을때는 어느정도의 성능 개선 효과를 볼수 있을지 아래에서 테스트해 보겠습니다.
</aside>