[java] Guava의 Caches 기능에 대해 설명해주세요.

Guava는 Google이 개발한 자바 라이브러리로, 캐싱(Caching) 기능을 제공합니다. 캐싱은 중복된 계산 또는 데이터 접근을 피하기 위해 이전에 계산된 결과나 데이터를 임시로 저장하고 재사용하는 기술입니다. Guava의 Caches 기능을 사용하면 효율적인 데이터 캐싱을 구현할 수 있습니다.

Guava Caches 생성

Guava Caches를 사용하기 위해서는 CacheBuilder 클래스를 사용하여 Cache 인스턴스를 생성해야 합니다.

Cache<Key, Value> cache = CacheBuilder.newBuilder()
        .maximumSize(100) // 최대 캐시 크기
        .expireAfterAccess(10, TimeUnit.MINUTES) // 접근 후 만료
        .build();

CacheBuilder.newBuilder()를 호출한 후 maximumSize 메서드로 최대 캐시 크기, expireAfterAccess 메서드로 캐시 만료 시간을 설정할 수 있습니다. 위의 예제에서는 최대 100개의 항목을 저장하고, 접근 후 10분이 지나면 항목이 자동으로 만료됩니다.

캐시 데이터 저장 및 조회

cache.put(key, value); // 캐시에 데이터 저장

Value value = cache.getIfPresent(key); // 캐시에서 데이터 조회

LoadingCache<Key, Value> cache = CacheBuilder.newBuilder()
        .maximumSize(100)
        .build(
            new CacheLoader<Key, Value>() {
                public Value load(Key key) throws Exception {
                    // 캐시에 없는 경우 데이터 로드
                    return fetchDataFromDb(key);
                }
            }
        );

Value value = cache.get(key); // 캐시에 데이터 없는 경우 데이터 로드 후 조회

위의 예제에서는 put 메서드를 사용하여 캐시에 데이터를 저장하고, getIfPresent 메서드를 사용하여 캐시에서 데이터를 조회합니다. 또한 LoadingCache를 사용하여 데이터가 캐시에 없는 경우에만 데이터를 로드하고 저장할 수 있습니다. get 메서드를 호출하면, 캐시에 데이터가 없는 경우 CacheLoaderload 메서드에서 데이터를 로드한 후 조회할 수 있습니다.

캐시 기능 활용

Guava Caches는 이외에도 다양한 기능을 제공합니다. 몇 가지 주요 기능을 살펴보겠습니다.

캐시 통계 정보

CacheStats stats = cache.stats();
long hitCount = stats.hitCount(); // 캐시에서 조회된 횟수
long missCount = stats.missCount(); // 캐시에서 미스된 횟수
double hitRate = stats.hitRate(); // 캐시 히트률

stats 메서드를 호출하여 캐시 통계 정보를 얻을 수 있습니다. hitCountmissCount는 각각 캐시에서 조회된 횟수와 미스된 횟수를 반환하고, hitRate는 캐시 히트률을 반환합니다.

캐시 청소

cache.cleanUp(); // 만료된 캐시 항목 청소

cleanUp 메서드를 호출하여 만료된 캐시 항목을 청소할 수 있습니다. 이 메서드는 자동으로 주기적으로 호출되지만, 필요에 따라 수동으로 호출할 수도 있습니다.

참고 자료