Ehcache 설정법

By | 2021년 7월 15일
Table of Content

Ehcache 설정법

의존성 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-cache'
    implementation 'org.ehcache:ehcache'
    implementation 'javax.cache:cache-api'
}

설정파일 추가

resources 폴더에 ehcache.xml 을 추가한다.

로그 확인이 불필요한 경우 listeners 는 제거한다.

searchOrderMaster 는 자바 소스상의 캐시명과 같아야 한다.

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.ehcache.org/v3"
        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd">

    <cache alias="searchOrderMaster"> <!-- cache 요소는 CachceManager에 의해 작성되고 관리될 Cache 인스턴스를 나타낸다. Cache<k,v> 형태로 인스턴스가 생성된다. alias에는 캐시의 이름을 지정한다. -->
        <key-type>java.util.Map</key-type> <!-- key-type 요소는 Cache 인스턴스에 저장될 캐시의 키의 FQCN을 지정한다. 즉, 키의 타입을 명시해주면 된다. 기본 값은 java.lang.Object 이다. -->
        <value-type>kr.tenbyten.csapi.web.dto.SearchResponseDto</value-type> <!-- value-type 요소는 Cache 인스턴스에 저장된 값의 FQCN을 지정한다. 기본 값은 java.lang.Object 이다. -->
        <expiry> <!-- expiry는 캐시 만료기간에 대해 설정하는 요소이다. -->
            <ttl unit="seconds">3</ttl> <!-- ttl에는 캐시 만료 시간을 지정하며 unit에는 단위를 지정한다. 해당 요소는 30초 뒤 캐시가 만료되는 것으로 지정되어 있다. -->
            <!-- unit은 days, hours, minutes, seconds, millis, micros, nanos 를 세팅할 수 있다. -->
        </expiry>

        <listeners>
            <listener>
                <class>kr.tenbyten.csapi.config.CacheEventLogger</class>
                <event-firing-mode>ASYNCHRONOUS</event-firing-mode>
                <event-ordering-mode>UNORDERED</event-ordering-mode>
                <events-to-fire-on>CREATED</events-to-fire-on>
                <events-to-fire-on>EXPIRED</events-to-fire-on>
            </listener>
        </listeners>

        <resources> <!-- resources는 캐시 데이터의 저장 공간과 용량을 지정한다. 만약 힙 메모리만 사용한다면 <heap> 요소만으로 대체할 수 있다.  -->
            <heap unit="entries">2</heap> <!-- heap은 JVM 힙 메모리에 캐시를 저장하도록 세팅하는 요소이다. -->
            <offheap unit="MB">10</offheap> <!-- offheap은 JVM 힙 메모리 외부의 메모리에 캐시를 저장하도록 세팅하는 요소이다. -->
        </resources>
    </cache>

</config>

application.yml 파일에 아래 내용을 추가해준다.

spring:
  cache:
    jcache:
      config: classpath:ehcache.xml

캐시 활성화

아래 파일을 생성해서 캐시를 활성화 해준다.

@Configuration
@EnableCaching
public class CacheConfig {
}

로그 활성화

로깅이 필요한 경우 아래 파일을 추가해준다.

@Slf4j
public class CacheEventLogger implements CacheEventListener<Object, Object> {

    public void onEvent(CacheEvent<? extends Object, ? extends Object> cacheEvent) {
        log.info("=================>> getKey: {} / getOldValue: {} / getNewValue:{}", cacheEvent.getKey(), cacheEvent.getOldValue(), cacheEvent.getNewValue());
    }
}

캐시 적용

@RequiredArgsConstructor
@Service
public class OrderMasterService {

    @Cacheable(value = "searchOrderMaster", key = "#params")
    @Transactional(readOnly = true)
    public SearchResponseDto search(Map<String, String> params) { ... }
}

답글 남기기