스프링부트 EhCache 2 사용 - 4

dragonappear·2022년 8월 17일
0

Cache

목록 보기
4/5

출처

제목: "스프링에서 캐시 사용하여 프로젝트 성능 개선해보기"
작성자: jiniaslog
작성자 수정일: 2021년12월24일
링크: https://www.jiniaslog.co.kr/article/view?articleId=254
작성일: 2022년8월16일

CacheManager

스프링에서 제공하는 캐시 추상화 API로 여러가지 구현 클래스가 존재하나 여기서는 대표적인 3가지만 알아 보겠다.

1. SimpleCacheManager :

구현체인 캐시가 없는 깡통 매니저이다. setCaches를 통해 구현체를 넘겨서 등록할 수 있다. 위의 예시코드에서는 스프링 기본 캐시 구현체인 ConcurrentMapCache를 만들어 등록했다.

@EnableCaching
 @Configuration
 public class CacheConfig(){

     @Bean
     public CacheManager cacheManager(){
         SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
         simpleCacheManager.setCaches(List.of(new ConcurrentMapCache("캐시이름")));
         return simpleCacheManager;            

     }
 }

2. ConcurrentMapCacheManager :

ConcurrentMapCache만을 사용하는 캐시 매니저. 캐시 정보를 Map타입으로 메모리에 저장하므로 속도가 매우 빠르고 별다른 설정이 필요없지만 본격적인 캐시로 사용하기에는 기능이 빈약하다.
- 캐시별 용량제한이나 다양한 저장방식지원, 다중 서버분산과 같은 기능이 없으므로 테스트 용도로 사용하자.

3. EhCacheCacheManager :

자바에서 가장 인기있는 캐시 프레임워크인 EhCache를 지원하는 캐시 매니저다. 본격적으로 캐시 기능을 적용하려면 사용을 고려해볼만하다.


EhCacheManagerFactoryBean

EhCacheManagerFactoryBean.getObject(): 아래와 같은 CacheManager를 반환한다

CacheManagerEhCacheCacheManager 생성자 파라미터에 넣어주고 EhCacheCacheManager를 생성한다.

EhCacheCacheManager 내부를 보면 EhCacheManagerFactoryBean.getObject()로 생성한 CacheManager가 필드로 있는것을 확인할 수 있고, 내부에 cacheMap 필드가 있음을 확인할 수 있다.

EhCacheCacheManagercacheMapcacheNames를 메모리에 올려둔다.
@Cache가 달린 타겟 메서드가 호출될 때, AOP가 적용되면서 EhCacheCacheManagercacheMapcacheNames에서 캐싱정보를 찾아서 있으면 캐싱되어있는 데이터를 반환하고, 없으면 타겟 메서드 호출 뒤 메모리에 올리는 방식으로 캐싱을 적용하는 것 같다.

0개의 댓글