Programming/Server

[Server] 로컬 캐시와 분산 캐시

_채채_ 2025. 10. 21. 09:18
로컬 캐시와 분산 캐시는 캐시 데이터가 저장되는 위치와 공유되는 범위에서 근본적인 차이가 있다.

1️⃣

로컬 캐시 (Local Cache)

: 로컬 캐시는 애플리케이션 내부 메모리(RAM, JVM 힙메모리 등)에 데이터를 저장하는 캐시 구조이다. 각 서버 인스턴스는 자신만의 독립적인 캐시 저장소를 가지며 이는 각자가 책상 위에 개인용 메모 노트를 두는 것과 같다고 볼 수 있다.

로컬 캐시는 서버 자체에 존재하므로 외부 네트워크 요청 없이 가장 빠르게 데이터에 접근할 수 있다.

장점 네트워크 호출이 없고 자신의 메모리에서 바로 데이터를 읽어오므로 응답 속도가 가장 빠르다
별도 캐시 서버를 구축하거나 관리할 필요 없이 단순 구현이 가능하다(HashMap, Caffeine 등)
단점 서버마다 캐시가 달라서 데이터 불일치 가능성이 있다
네트워크 지연이 존재하며 운영 복잡도가 상대적으로 크다
Redis 장애 시 모든 요청이 DB로 몰릴 수 있다

 

2️⃣

분산 캐시 (Distributed Cache)

: 분산 캐시는 여러 애플리케이션 서버 외부의 독립된 공간(별도 서버 또는 클러스터)에 데이터를 저장하고, 여러 애플리케이션 인스턴스가 이를 공유한다. 일반적으로 Redis, Memchached 같은 인메모리 서버를 사용한다. 데이터 일관성 유지에 용이하고 확장성에 유리하다. 비유하자면, 사무실 중앙에 있는 공용 화이트보드와 같다고 할 수 있다.

장점 모든 서버가 동일한 캐시 데이터를 바라보므로 데이터 정합성을 유지하기 용이하다
애플리케이션 서버 메모리와 무관하게 캐시 서버만 증설할 수 있다(수평 확장)
애플리케이션 서버가 꺼졌다가 켜져도 캐시 데이터가 그대로 유지된다(데이터 영속화)
단점 네트워크 지연이 존재한다(로컬 캐시보다 상대적으로 느리며 DB보다는 빠르다)
운영 복잡성 및 모니터링에 드는 노력과 비용이 상대적으로 높다
Redis 장애 시에 모든 요청이 DB로 몰릴 수 있다

실무에서는 언제 무엇을 사용해야 할까?

실무에서는 정답이 없고, 상황에 맞게 선택하거나 두 가지(L1/L2)를 조합하기도 한다.

 

로컬 캐시가 적합한 경우

  1. 애플리케이션이 단일 인스턴스로 운영될 때
  2. 데이터 갱신이 아주 드물고, 데이터 불일치가 발생해도 큰 문제가 없는 데이터일 때
  3. 여러 인스턴스 환경이지만 '읽기 전용'의 정적 데이터를 캐싱할 때
  4. 사용자별로 완전히 격리된 데이터를 잠시 캐싱할 때

분산 캐시가 적합한 경우

  1. 애플리케이션이 2대 이상의 서버로 운영될 때
  2. 여러 서버 간에 데이터 일관성이 반드시 지켜져야 할 때
  3. 세션 클러스터링이나 공용 상태 관리가 필요할 때
  4. 캐시할 데이터의 총량이 매우 커서 애플리케이션 메모리에 부담을 줄 때
  5. 데이터 갱신이 빈번하게 일어나서 캐시를 자주 비워야 할 때

 

☑️ 보통은 성능을 극대화하기 위해 로컬 캐시(L1)와 분산 캐시(L2)를 함께 사용하기도 한다. 먼저 가장 빠른 로컬 캐시를 확인하고, 없으면 분산 캐시를 확인하고, 거기에도 없으면 DB를 조회하는 순서이다.

'Programming > Server' 카테고리의 다른 글

[Server] 캐시의 정의와 캐시 유형  (0) 2025.10.22