[java] Ehcache와 메모리 캐시 정책 설정 방법

Ehcache는 자바 기반의 오픈 소스 메모리 캐싱 라이브러리로, 애플리케이션의 성능을 향상시키기 위해 사용됩니다. Ehcache를 사용하면 데이터베이스 또는 다른 느린 데이터 소스로부터 데이터를 로드해야할 때, 해당 데이터를 캐시에 저장하여 반복적인 요청으로 인한 성능 저하를 줄일 수 있습니다.

Ehcache에서 메모리 캐시 정책을 설정하는 방법에 대해 알아보겠습니다.

1. Ehcache 종속성 추가

먼저, 프로젝트의 pom.xml 파일에 Ehcache 종속성을 추가해야 합니다. Maven을 사용하는 경우, 다음과 같이 의존성을 추가할 수 있습니다:

<dependencies>
    <!-- 다른 종속성들 -->
    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.8.1</version>
    </dependency>
</dependencies>

Gradle을 사용하는 경우, 다음과 같이 의존성을 추가할 수 있습니다:

dependencies {
    // 다른 종속성들
    implementation 'org.ehcache:ehcache:3.8.1'
}

2. 캐시 매니저 생성

Ehcache를 사용하기 위해서는 먼저 CacheManager를 생성해야 합니다. CacheManager는 Ehcache의 핵심 클래스로, 캐시를 관리하고 설정할 수 있는 인터페이스입니다. 다음은 CacheManager를 생성하는 예시 코드입니다:

import org.ehcache.CacheManager;
import org.ehcache.config.builders.CacheManagerBuilder;

public class CacheManagerExample {
    public static void main(String[] args) {
        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
        cacheManager.init();

        // 캐시 관련 작업 수행

        cacheManager.close();
    }
}

위 코드에서는 CacheManagerBuilder.newCacheManagerBuilder()를 통해 CacheManagerBuilder 인스턴스를 생성하고, 이를 통해 CacheManager를 빌드합니다. build() 메서드는 CacheManager 인스턴스를 반환하며, init() 메서드를 호출해야 실제로 캐시 매니저가 초기화됩니다.

3. 메모리 캐시 생성 및 정책 설정

CacheManager를 생성한 후에는 실제 캐시를 생성하고 해당 캐시의 특성 및 정책을 설정할 수 있습니다. 다음은 메모리 캐시를 생성하고 해당 캐시의 TTL(Time To Live)을 설정하는 예시 코드입니다:

import org.ehcache.Cache;
import org.ehcache.CacheManager;
import org.ehcache.config.CacheConfiguration;
import org.ehcache.config.Configuration;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;

public class MemoryCacheExample {
    public static void main(String[] args) {
        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
        cacheManager.init();

        Configuration configuration = cacheManager.getRuntimeConfiguration();

        CacheConfiguration<String, Object> cacheConfig = CacheConfigurationBuilder.newCacheConfigurationBuilder(
                String.class,
                Object.class,
                ResourcePoolsBuilder.heap(100)) // 메모리 캐시 크기 설정
                .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofMinutes(60))) // TTL 설정
                .build();

        Cache<String, Object> cache = cacheManager.createCache("myCache", cacheConfig);
        
        // 캐시 관련 작업 수행

        cacheManager.close();
    }
}

위 코드에서는 CacheConfigurationBuilder를 사용하여 CacheConfiguration 인스턴스를 생성합니다. ResourcePoolsBuilder.heap(100)은 100개의 객체를 저장할 수 있는 메모리 캐시를 생성합니다. withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofMinutes(60)))는 60분 동안 유효한 TTL 정책을 설정합니다. createCache 메서드를 호출하여 실제로 캐시를 생성하고, 이를 통해 캐시 작업을 수행할 수 있습니다.

이렇게 설정된 메모리 캐시는 지정된 TTL만큼 유지되며, TTL이 경과하면 해당 캐시 아이템은 자동으로 폐기됩니다.

Ehcache는 다양한 정책 및 설정 옵션을 제공하므로, 관련 API 문서를 참조하여 필요한 설정을 추가로 적용할 수 있습니다.

참고 자료