📌 캐시에 대한 자세한 개념들은 아래 포스팅을 참고해주세요.
<[JPA] 캐싱(Caching)과 영속성(persistence)>
경량의 빠른 캐시 엔진
확장(scable)
➜ 메모리 & 디스크 저장 지원, 멀티 CPU의 동시 접근에 튜닝
분산 지원
➜ 동기/비동기 복사, 피어(peer) 자동 발견
높은 품질
➜ Hibernate, Confluence, Spring 등에서 사용되고 있으며, Gaia 컴포넌트에서도 EHCache를 사용하여 캐시 구현
대규모의 동시성 시스템을 위해 설계되어 빠르고 단순하며, 앱을 최대한 가볍게 유지하여 작은 공간을 유지
[참고] https://www.ehcache.org/about/features
캐시에 보관된 정보의 복사본을 가져와 메소드의 실행 횟수 줄여줌
대상 메소드가 실행될 때마다 추상화가 해당 메소드가 같은 인자로 이미 실행되었는지 확인하는 캐싱 동작을 적용
해당 데이터가 존재한다면 실제 메소드를 실행하지 않고 결과를 반환하고 존재한다면 메소드를 실행하고 그 결과를 캐싱한 후, 사용자에게 반환해서 다음 번 호출 시에 사용할 수 있게 함
xml 파일을 만들어 속성들을 지정
Configuration 클래스 파일을 만들어 CacheManager 빈에 EhCacheManager 클래스를 매핑
해당 매니저가 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