캐싱 전략

Java 코드 최적화

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

캐싱이란?

캐싱은 자주 사용하는 요리 재료를 찬장이 아닌 조리대 위에 두는 것과 같습니다 - 꺼내기는 빠르지만 조리대 공간은 한정되어 있습니다

자주 캐싱하는 대상은 다음과 같습니다:

  • 데이터베이스 쿼리 결과
  • API 응답
  • 비용이 큰 계산
  • 기타 리소스 집약적인 작업
Java 코드 최적화

Java의 인메모리 캐싱

// In-memory cache using HashMap
public class SimpleCache<K, V> {
    private final Map<K, V> cache = new HashMap<>();

    public V get(K key) {
        return cache.get(key);
    }

    public void put(K key, V value) {
        cache.put(key, value);
    }
}
Java 코드 최적화

캐시 제거 정책

  • LRU (최근 최소 사용)
  • LFU (최소 빈도 사용)
  • FIFO (선입선출)
  • 시간 기반 만료
  • 그 외 다양한 정책!
Java 코드 최적화

분산 캐싱을 위한 Redis

Redis란:

  • 인메모리 데이터 저장소/캐시
  • 분산 캐시로서 뛰어난 성능 발휘
  • 다양한 데이터 구조 지원
  • 다양한 Java 클라이언트 라이브러리 제공 - 예: Jedis

Screenshot 2025-05-14 at 6.59.29 PM.png

Java 코드 최적화

Jedis로 Redis 사용하기

import redis.clients.jedis.Jedis;

// Using Jedis client
Jedis jedis = new Jedis("localhost");
jedis.set("key", "value");
String value = jedis.get("key");

추가 기능:

  • 캐시 항목 자동 만료
  • 클러스터 지원
Java 코드 최적화

Redis로 시간 기반 캐시 구현하기

public class RedisTimedCache {
    private final Jedis jedis;

    public RedisTimedCache(String host, int port) {
        this.jedis = new Jedis(host, port);
    }

    public String get(String key) {
        return jedis.get(key);
    }

    public void put(String key, String value, int timeToLiveSeconds) {
        // Sets both the value and expiration time in seconds
        jedis.setex(key, timeToLiveSeconds, value);
    }
}
Java 코드 최적화

요약

  • 캐싱은 계산 결과를 저장해 재계산을 방지합니다
  • 비용이 큰 연산과 자주 접근하는 데이터에 효과적입니다
  • 메모리 관리를 위해 적절한 제거 정책을 적용하세요
  • 여러 서버로 구성된 애플리케이션에는 분산 캐싱(예: Jedis와 함께 사용하는 Redis)을 고려하세요
Java 코드 최적화

연습해 봅시다!

Java 코드 최적화

Preparing Video For Download...