[Hibernate] ehcache를 이용한 캐싱

현주·2023년 4월 24일
0

📌 캐시에 대한 자세한 개념들은 아래 포스팅을 참고해주세요.
<[JPA] 캐싱(Caching)과 영속성(persistence)>

✏️ Ehcache

  • Java의 대표적인 캐시 엔진 중의 하나

✔ 특징

  • 경량의 빠른 캐시 엔진

  • 확장(scable)
    ➜ 메모리 & 디스크 저장 지원, 멀티 CPU의 동시 접근에 튜닝

  • 분산 지원
    ➜ 동기/비동기 복사, 피어(peer) 자동 발견

  • 높은 품질
    ➜ Hibernate, Confluence, Spring 등에서 사용되고 있으며, Gaia 컴포넌트에서도 EHCache를 사용하여 캐시 구현


✔ 장점

  • 대규모의 동시성 시스템을 위해 설계되어 빠르고 단순하며, 앱을 최대한 가볍게 유지하여 작은 공간을 유지
    [참고] https://www.ehcache.org/about/features

  • 캐시에 보관된 정보의 복사본을 가져와 메소드의 실행 횟수 줄여줌

  • 대상 메소드가 실행될 때마다 추상화가 해당 메소드가 같은 인자로 이미 실행되었는지 확인하는 캐싱 동작을 적용

  • 해당 데이터가 존재한다면 실제 메소드를 실행하지 않고 결과를 반환하고 존재한다면 메소드를 실행하고 그 결과를 캐싱한 후, 사용자에게 반환해서 다음 번 호출 시에 사용할 수 있게 함


✔ 사용법

  1. xml 파일을 만들어 속성들을 지정

  2. Configuration 클래스 파일을 만들어 CacheManager 빈에 EhCacheManager 클래스를 매핑

  3. 해당 매니저가 xml 파일의 속성들을 가지게 만들기


ehcache.xml 파일 설정 방법

<ehcache>
    <defaultCache // 디폴트 설정 값
            maxElementsInMemory="10000"
            eternal="false"
        	timeToIdleSeconds="1200"
        	timeToLiveSeconds="1200"
        	diskExpiryThreadIntervalSeconds="1200"
        	memoryStoreEvictionPolicy="LRU"/>
    
    <cache // 하나의 캐시만 지정
    		name="exampleCache"
            maxElementsInMemory="10000"
       		maxElementsOnDisk="1000"
       		eternal="false"
       		overflowToDisk="true"
       		timeToIdleSeconds="300"
       		timeToLiveSeconds="600"
       		memoryStoreEvictionPolicy="LFU"/>

</ehcache>

위 코드는 ehcache.xml 파일 설정 예시입니다.

사진의 < defaultCache > 태그는 바드시 존재해야하는 태그로,
코드에서 캐시를 직접 생성할 때 사용되는 캐시의 기본 설정값을 저장합니다.

하나의 캐시를 지정할 경우에는 < cache > 태그를 사용해야 합니다.

위 ehcache.xml 코드에 사용된 속성들을 살펴보자면,

  • name (필수)
    ➜ 캐시의 이름
  • maxElementsInMemory (필수)
    ➜ 메모리에 저장될 수 있는 객체의 최대 개수
  • eternal (필수)
    ➜ 이 값이 true이면 timeout 관련 설정은 무시되고, Element가 캐시에서 삭제되지 않음
  • overflowToDisk (필수)
    ➜ 메모리에 저장된 객체 개수가 maxElementsInMemory에서 지정한 값에 다다를 경우 디스크에 오버플로우 되는 객체를 저장할지 여부
  • timeToIdleSeconds (선택)
    ➜ Element가 지정한 시간 동안 사용(조회)되지 않으면 캐시에서 제거됨
    ➜ 이 값이 0인 경우 조회 관련 만료 시간을 지정하지 않음 ( 기본값 - 0 )
  • timeToLiveSeconds (선택)
    ➜ Element가 존재하는 시간
    ➜ 이 시간이 지나면 캐시에서 제거됨
    ➜ 이 시간이 0이면 만료 시간을 지정하지 않음 ( 기본값 - 0 )
  • maxElementsOnDisk (선택)
    ➜ 디스크에 저장될 수 있는 객체의 최대 개수
  • diskPersistent (선택)
    ➜ VM이 재 가동할 때 디스크 저장소에 캐싱된 객체를 저장할지 여부
    ( 기본값 - false )
    ⠀⠀
  • diskExpiryThreadIntervalSeconds (선택)
    ➜ Disk Expiry 쓰레드의 수행 시간 간격을 초 단위로 지정
    ( 기본값 - 120 )
  • memoryStoreEvictionPolicy (선택)
    ➜ 객체의 개수가 maxElementsInMemory에 도달했을 때, 메모리에서 객체를 어떻게 제거할 지에 대한 정책 지정
    ➜ 기본값은 LRU ( FIFO와 LFU도 지정 가능 )

    LRU 알고리즘
    ➜ 페이지 교체 알고리즘 중 하나
    ➜ 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법
    [참고] https://j2wooooo.tistory.com/121

[참고] https://kimyhcj.tistory.com/253

0개의 댓글