카카오테크 부트캠프
[기술 검토 및 선정] 로컬 캐시(Local Cache) 기술 선정
kanado
2025. 4. 27. 14:33
시스템 요구사항
- 게시글, 튜닝 레포트 같은 변경이 거의 없는 정적 목록을 초고속으로 조회하기 위해 “로컬 캐시” 필요합니다.
- 로컬 캐시로 Redis의 메모리 부담을 덜어주고, Redis보다 더 빠른 속도로 정적 데이터 반환 기능
- 반면, 서버 수는 오토스케일링을 통해 늘어날 수 있으므로 반응 수 같은 빈번하게 변경되는 동적 데이터도 Redis로 관리할 계획입니다.
- 궁극적으로는 데이터 신뢰성을 보장하기 위해 MySQL에 저장해야 합니다.
Caffeine이란?
- 구글의 Guava Cache를 계승해서 만든, 더 빠르고 효율적인 로컬 캐시 라이브러리
- JVM(Java Virtual Machine) 메모리 안에서 동작 (따라서 다른 서버들과 데이터 공유는 못 함)
- 고성능, 저지연, 효율적 메모리 관리를 목표로 설계됨
- Spring Boot에서도 spring-boot-starter-cache와 같이 쉽게 통합 가능
Caffeine은 JVM 기반 애플리케이션에서 메모리 안에 데이터를 빠르게 저장하고 조회할 수 있게 도와주는, 매우 빠른 캐시 라이브러리입니다.
Caffeine 특징
특징 | 설명 |
최신 캐시 알고리즘 | W-TinyLFU 기반 → "자주 + 최근 사용된 데이터"를 스마트하게 유지 |
비동기 지원 | AsyncLoadingCache로 비동기 캐싱 가능 |
만료 정책 | TTL(지속 시간), TTI(비사용 시간) 기반 자동 만료 지원 |
최대 크기 제어 | 지정한 크기만큼만 캐시를 유지하고 초과 시 자동으로 제거 (Eviction) |
통계 제공 | hit/miss, eviction 같은 캐시 통계 수집 가능 |
다른 "로컬 캐시(Local Cache)” 기슬 비교
기술 | 설명 | 차이점 |
Guava Cache | 구글이 만든 초기 로컬 캐시 라이브러리 | - 성능이 Caffeine보다 느리고, 알고리즘이 옛날 것(LRU 기반). - Caffeine은 Guava를 "대체"하는 목적으로 나왔음. |
Ehcache | 오래된 자바 캐시 솔루션 (Spring에서도 옛날에 많이 씀) | - 디스크 저장, 클러스터링(복잡한 설정 가능) 지원 → 대신 무거움. - 단순 로컬 캐시만 원하면 Caffeine이 훨씬 가벼움. |
Infinispan | RedHat이 만든 복합 캐시(로컬+분산 둘 다 가능) | - 너무 무거움. 캐시 + 분산 데이터 그리드 용도. - 그냥 빠른 로컬 캐시만 쓰고 싶으면 부적합. |
성능 벤치마크 예시 (조회 속도 기준)
항목 조회 속도 (QPS 기준)
Caffeine | 100,000 QPS 이상 |
Guava Cache | 30,000 ~ 40,000 QPS |
Ehcache (메모리) | 10,000 ~ 20,000 QPS |
Infinispan (분산) | 1,000 ~ 5,000 QPS |
✅ Caffeine은 특히 다중 코어, 멀티스레드 환경에서 성능 차이가 더 크다.
✅ Guava는 단일 스레드라면 쓸 만하지만 멀티스레드 가면 성능 급감소.
Caffeine 선택 이유
Guava Cache는 성능 한계, Ehcache는 복잡성 과잉, Infinispan은 오버스펙이라는 이유로 제외하고, 최종적으로 빠르고 경량화된 고성능 로컬 캐시를 제공하는 Caffeine을 선택했습니다.
끝입니다~