[java] Ehcache와 웹 서비스의 캐싱 처리 방법

최근 웹 서비스의 성능을 최적화하기 위해 캐싱 기술이 많이 사용되고 있습니다. 캐싱을 통해 반복적인 연산을 방지하고, 자원의 사용을 최소화할 수 있어서 성능 향상에 큰 도움이 됩니다. 이번 포스트에서는 Ehcache와 웹 서비스의 캐싱 처리 방법에 대해 알아보겠습니다.

1. Ehcache란?

Ehcache는 오픈 소스이며 Java 기반의 분산 캐싱 라이브러리입니다. Ehcache를 사용하면 메모리 기반의 캐시를 쉽게 구성할 수 있으며, 분산 환경에서도 동작할 수 있습니다. Ehcache는 많은 기능을 제공하며, 다양한 캐싱 전략을 사용할 수 있어서 유연하게 적용할 수 있습니다.

2. Ehcache 설정

Ehcache를 사용하기 위해 먼저 Ehcache 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 Ehcache 의존성을 추가합니다.

<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>3.8.1</version>
</dependency>

Ehcache를 설정하기 위해선 ehcache.xml 파일을 작성해야 합니다. 이 파일은 캐시의 설정 정보를 담고 있으며, 캐시의 크기, TTL(Time To Live), 캐싱 전략 등을 설정할 수 있습니다. 예를 들어, 아래와 같은 내용의 ehcache.xml 파일을 작성할 수 있습니다.

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

    <cache alias="productCache">
        <key-type>java.lang.String</key-type>
        <value-type>com.example.Product</value-type>
        <expiry>
            <ttl unit="seconds">60</ttl>
        </expiry>
        <heap unit="entries">100</heap>
    </cache>

</config>

위의 예제는 productCache라는 이름의 캐시를 생성하는 설정입니다. key-type은 캐시의 키 타입을, value-type은 캐시의 값 타입을 지정합니다. expiry 태그를 통해 캐시의 유효 시간을 설정할 수 있습니다. 위의 예제에서는 60초로 설정했습니다. heap 태그를 사용하여 캐시의 최대 용량을 설정할 수 있습니다.

3. 웹 서비스에서 Ehcache 사용하기

웹 서비스에서 Ehcache를 사용하기 위해서는 몇 가지 단계를 거쳐야 합니다.

  1. 캐싱할 데이터를 로딩하는 비즈니스 로직을 작성합니다.
  2. Ehcache를 초기화하고 ehcache.xml 파일을 로딩합니다.
  3. 비즈니스 로직에서 캐싱된 데이터를 검색하고, 데이터가 존재하지 않으면 캐싱하는 로직을 추가합니다.
  4. 웹 서비스에서 데이터를 요청하면 캐시에서 데이터를 검색하고, 데이터가 존재하지 않으면 비즈니스 로직을 실행하여 데이터를 생성합니다.

아래는 간단한 예시 코드입니다.

public class ProductService {
    private Cache<String, Product> productCache;

    public ProductService() {
        // Ehcache 초기화 및 설정 파일 로드
        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
                .withCache("productCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(
                        String.class, Product.class, ResourcePoolsBuilder.heap(100))
                        .withExpiry(Expirations.timeToLiveExpiration(Duration.ofSeconds(60))))
                .build(true);

        // 캐시 인스턴스 가져오기
        productCache = cacheManager.getCache("productCache", String.class, Product.class);
    }

    public Product getProduct(String id) {
        // 캐시에서 데이터 검색
        Product product = productCache.get(id);

        if (product == null) {
            // 데이터가 캐시에 없으면 비즈니스 로직 실행
            product = loadProductFromDatabase(id);

            // 로딩한 데이터를 캐시에 저장
            productCache.put(id, product);
        }

        return product;
    }

    private Product loadProductFromDatabase(String id) {
        // 데이터베이스에서 데이터 로딩하는 로직
    }
}

위의 예제에서는 ProductService 클래스에서 Ehcache를 사용하여 상품 정보를 캐싱하고 있습니다. getProduct() 메서드에서는 먼저 캐시에서 상품 정보를 검색하고, 캐시에 데이터가 없으면 데이터베이스에서 데이터를 로딩하여 캐시에 저장합니다.

4. 결론

Ehcache는 웹 서비스의 성능 최적화를 위한 강력한 캐싱 라이브러리입니다. 적절한 설정과 적극적인 캐싱 전략을 사용하면 성능 향상에 큰 도움이 됩니다. Ehcache를 웹 서비스에 적용해보고, 어떤 차이가 있는지 확인해보세요.

참고 자료