[java] Ehcache와 네트워크 캐싱 구현 방법

Ehcache는 자바 기반의 오픈 소스 캐시 라이브러리입니다. 이 글에서는 Ehcache를 사용하여 네트워크 캐싱을 구현하는 방법을 알아보겠습니다.

Ehcache 설정

먼저 Ehcache를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다.

<dependencies>
    ...
    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.9.5</version>
    </dependency>
    ...
</dependencies>

Ehcache를 추가한 후에는 Ehcache 구성 파일을 작성해야 합니다. ehcache.xml 파일을 생성하고 다음과 같이 설정합니다.

<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="networkCache">
        <resources>
            <heap unit="entries">100</heap>
        </resources>
        <expiry>
            <none/>
        </expiry>
    </cache>
    
</config>

위의 예제에서는 networkCache라는 이름의 캐시를 정의하고, 캐시의 크기를 100개의 항목으로 설정하였습니다. 그리고 만료 설정은 하지 않았습니다.

네트워크 캐싱 구현

이제 Ehcache를 사용하여 네트워크 캐싱을 구현해보겠습니다. 아래의 예제는 간단한 네트워크 요청을 캐싱하는 예제입니다.

import org.ehcache.Cache;
import org.ehcache.CacheManager;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.units.EntryUnit;
import org.ehcache.core.EhcacheManager;
import org.ehcache.impl.config.persistence.CacheManagerPersistenceConfiguration;
import org.ehcache.impl.config.persistence.DefaultPersistenceConfiguration;
import org.ehcache.impl.config.persistence.DefaultResourcePersistenceConfiguration;
import org.ehcache.impl.serialization.PlainJavaSerializer;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class NetworkCacheExample {

    private static final String CACHE_NAME = "networkCache";
    private static final String CACHE_MANAGER_CONFIG = "ehcache.xml";

    public static void main(String[] args) throws IOException {
        // Ehcache Manager 생성
        CacheManager cacheManager = EhcacheManager.newCacheManagerBuilder()
                .with(CacheManagerPersistenceConfiguration.class,
                        DefaultPersistenceConfiguration.persistence(
                                new DefaultResourcePersistenceConfiguration.Builder()
                                        .setUri("ehcache-data")
                                        .build()
                        ))
                .withCache(CACHE_NAME,
                        CacheConfigurationBuilder.newCacheConfigurationBuilder(
                                String.class, String.class,
                                ResourcePoolsBuilder.newResourcePoolsBuilder()
                                        .heap(100, EntryUnit.ENTRIES)
                                        .build()
                        ))
                .using(new PlainJavaSerializer<>())
                .build(true);

        // 캐시 가져오기
        Cache<String, String> cache = cacheManager.getCache(CACHE_NAME, String.class, String.class);

        // 캐시에 데이터 저장
        String url = "https://example.com";
        if (!cache.containsKey(url)) {
            String data = getDataFromNetwork(url);
            cache.put(url, data);

            System.out.println("Retrieved data from network");
        } else {
            String data = cache.get(url);
            System.out.println("Retrieved data from cache");
        }

        // 캐시 사용 후 클린업
        cacheManager.close();
    }

    private static String getDataFromNetwork(String url) throws IOException {
        URL networkUrl = new URL(url);
        HttpURLConnection connection = (HttpURLConnection) networkUrl.openConnection();
        connection.setRequestMethod("GET");

        // 데이터를 읽어옴...

        connection.disconnect();

        return "Network data";
    }
}

위의 예제에서는 ehcache.xml 파일을 사용하여 Ehcache Manager를 설정하고, networkCache 캐시를 생성합니다. 그리고 네트워크에서 데이터를 가져와 캐시에 저장하는 간단한 예제를 제공하고 있습니다.

결론

Ehcache를 사용하여 네트워크 캐싱을 구현하는 방법을 살펴보았습니다. Ehcache를 사용하면 자바 애플리케이션에서 캐싱을 효율적으로 처리할 수 있습니다. 자세한 내용은 Ehcache 공식 문서를 참고하시기 바랍니다.

참고 자료