1. 로컬 캐시의 한계
1) 데이터 불일치(Inconsistency)
- 서버 A, B, C가 각각 로컬 캐시를 들고 있을 경우, A에서 데이터가 갱신되더라도 B, C 캐시는 여전히 옛 데이터를 유지
- 분산 환경에서는 캐시 갱신 전파 불가능
2) 메모리 한계
- 캐시 데이터가 많아질수록 JVM Heap / 애플리케이션 메모리 부족(OutOfMemoryError 위험)
- GC 부하 증가(애플리케이션 성능 저하로 까지 이어질 수 있음)
3) 확장성(Scalability) 부족
- 서버가 늘어날수록 각 서버가 동일한 데이터를 중복 캐싱(메모리 낭비)
- 서버 수평 확장(Scale-out) 환경에서 데이터 일관성 관리 어려움
4) 장애 복구 문제
- 서버 재시작 시 캐시 데이터 초기화 필요(DB 부하 증가, Cold Start 문제)
- 분산 캐시(Redis, Memcached)와 달리 데이터 지속성 없음
5) 캐시 전략 제약
- 캐시 무효화(Invalidation) 전략 한계(글로벌 invalidation 불가, TTL(Time To Live) 기반으로만 갱신 가능)
- 분산환경에서 전체 서버의 특정 키만 정확히 갱신하기 어려움(갱신하지 못한 서버는 Stale Data 발생)
2. 분산 캐시란?
1) 정의
- 여러 서버(애플리케이션 인스턴스)가 공유하는 외부 캐시 저장소
- 캐시 데이터를 중앙 집중식으로 관리하여 서버 간 일관성(Inconsistency) 문제 해결
- 대표적 툴: Redis, Memcached
2) 동작 방식
- 애플리케이션은 캐시 서버(분산 캐시)에 네트워크 요청을 통해 데이터를 읽고/쓰고 처리
- 모든 애플리케이션 서버가 같은 캐시 서버를 바라봄
(특정 키 갱신 시 → 전체 서버에서 동일한 최신 데이터 조회 가능)
"데이터 일관성 보장 + 서버 간 공유"
3. 분산 캐시의 장점
1) 데이터 일관성 확보: 서버 수가 늘어나도 동일한 데이터 사용
2) 확장성(Scalability): 캐시 서버 클러스터링으로 용량/처리량 확장
3) 장애 복구 용이: 서버 재시작 시에도 캐시 서버에 데이터 남아 있음 (Warm cache 가능)
4) 고급 기능: Pub/Sub, Keyspace Notifications, TTL 관리 등
4. 분산 캐시의 한계
1) 네트워크 지연: 로컬 캐시보다는 느림
2) 운영 복잡도: Redis/Memcached 서버 클러스터 운영 필요
3) 추가 비용 발생: 별도 인프라(메모리 서버) 필요
"분산캐시 서버로서 Redis 를 세팅하고 연동해보자!"
'Kotlin Spring > Kotlin Spring 강의 내용' 카테고리의 다른 글
8) Spring 캐시 (4) Redis 로 캐싱 관리 (0) | 2025.09.05 |
---|---|
8) Spring 캐시 (3)redis란? (0) | 2025.09.05 |
8) Spring 캐시 (1) HomeBody 상품 리스트 구현 내 "로컬 캐싱" 추가 (0) | 2025.09.02 |
7) 주요 기능 개발(Back-end) (0) | 2025.09.02 |
6) 개발 architecture (5) 강의용 Architecture (0) | 2025.09.01 |