본문 바로가기
프로젝트

파이널 프로젝트_Caffeine Cache(로컬 캐시) 적용하기

by 유서담 2024. 5. 14.

적용하게 된 계기

 

프로젝트 마무리 하는 중 대시보드를 띄우는 관리자 홈페이지 로딩이 너무 느려졌다고 생각되었다

값이 자주 변경 되지 않는 쿼리문을 계속 실행시킬 필요가 없다고 판단해서 캐시 기능을 적용하기로 했다


 

로컬 캐시 VS 글로벌 캐시

 

캐시 전략은 크게 로컬 캐시와 글로벌 캐시 2가지가 있다

 

글로벌 캐시 : 여러 대의 서버가 있고, 캐시용 서버를 마련하여 사용하는 캐시.

네트워크 오버헤드와 관리 비용이 더 많이 들 수 있지만, 분산된 환경에서 데이터의 일관성을 보장할 수 있다

 

로컬 캐시 : 해당 기기에서만 사용되는 캐시.

구현하기 쉽고, 하나의 서버로 운영할 경우 네트워크 비용이 없다

그리고 글로벌 캐시 방법보다는 빠르다는 장점이 있다

 

 

로컬 캐시는 단일 애플리케이션 내에서 데이터를 효율적으로 관리할 때 주로 사용

글로벌 캐시는 여러 애플리케이션 인스턴스 간에 데이터를 공유하고 동기화할때 사용

 

현재의 프로젝트에서는 하나의 서버 인스턴스를 사용하기 때문에 로컬 캐시를 적용했다


 

 

로컬 캐시를 어떻게 적용할지 찾아보다가 많이들 사용하던 Ehcache가 Spring Boot3 버전부터는

EhCacheCacheManager 지원을 하지 않기 때문에 프로젝트 적용이 안된다는걸 알게되었다 

( JCache를 활용하여 ehcache3를 사용되나 생각보다 설정이 번잡하다고 한다.. ) 

 

그래서 빠르게 적용하기 쉬운 Caffeine Cache를 적용했다

 


 

의존성 추가

build.gradle

 

 

설정값(enum 클래스) 만들기

Cache Type

 

캐시 값들을 정의하는 enum 클래스 CacheType 을 만든다 

 

 

 

캐시 설정( Cache Config )

CacheConfig

 

설정값으로 캐시를 만들고 캐시매니저에 캐시를 넣어주는 작업이다

 

 

캐시 적용하기

캐싱 처리를 할 메소드

 

캐싱 처리를 할 메소드 위에 

@Cacheable 애노테이션과 함께 캐시 이름을 설정한다

 

Cache Type 클래스

 

메소드에서 캐시 이름을 설정한대로 아까 만든 enum 클래스에 정의를 해줘야한다