본문 바로가기

Spring Boot/Cache

분산 캐시의 이해와 Redis : 분산 캐시 구현 시 고려사항

 - 분산 캐시 시스템 설계시 반드시 고려해야할 핵심 요소

 - 네트워크 지연(Latency)과 캐시 오버헤드 문제의 원인 및 해결 방안

 - 데이터 일관성(consistency)을 유지하기 위한 전략

 - 장애(failure) 발생 시의 복구(Recovery) 및 가용성 확보 방안

 - 보안 측면에서의 접근 제어 및 데이터 보호 방법

 


네트워크 지연과 오버헤드

분산 캐시 환경은 여러 서버간 네트워크 통신을 기반으로 동작한다고 한다!

따라서 캐시 접근 속도는 네트워크 품질에 크게 영향을 받게 된다고 함

 

 

1. 네트워크 지연의 원인

원인 설명
네트워크 거리 서버간 물리적 거리가 멀수록 RTT(Round Trip Time)가 증가함
부하 집중 특정 노드에 트래픽이 집중되면 큐잉 지연이 발생함
DNS 및 라우팅 지연 클러스터 내부 통신 경로가 복잡할수록 응답 시간이 늘어남

 

네트워크 지연은 보통 DB와 관계가 깊다

 

 

2. 성능 최적화 방안

방법 설명
로컬 캐시(Local Cache) 자주 쓰이는 데이터는 애플리케이션 내부 메모리에 보관하여 접근 속도 향상
Connection Pool 재사용 Redis / TCP 연결을 매 요청마다 생성하지 않고 재사용함
파이프라이닝(Pipelining) 여러 명령을 한번에 전송하여 왕복 횟수를 줄임
압축(Compression) 데이터 전송 크기를 줄여 전송 시간 단축

 

 

* AWS ElastiCache, Azure Cache for Redis 같은 관리형 서비스는 내부 네트워크 최적화가 이미 되어있다고 함

* 응답 지연이 발생할 경우 PING, INFO latency 명령으로 지연 원인을 진단할 수 있음

 


데이터 일관성 관리

분산 캐시의 가장 큰 과제는 캐시 데이터와 원본 데이터(DB)의 불일치임

 

1. 일관성 문제 발생 시나리오

데이터 일관성 관리에 대한 문제 발생 시나리오

 

 

2. 해결 전략

전략 설명
TTL 설정 일정 시간이 지나면 캐시 자동 무효화(10분마다 갱신 등)
Write-Through DB에 쓰기 시 캐시도 즉시 갱신됨
Cache Aside 변경 후 명시적으로 캐시 삭제 -> 다음 조회시 최신 데이터 적재
Pub / Sub 동기화 Redis의 채널을 통해 변경 이벤트를 다른 캐시 노드로 전파함

 

예시

// 캐시 삭제 기반 전략 예시
public void updateUser(User user) {
	database.save(user);
    cache.evict(user.getId()); // 다음 조회시 DB에서 다시 로드하는 로직
}

 

* 비즈니스 중요도가 높은 데이터(금액, 재고 등)는 반드시 DB 우선 정책을 유지해야한다.

* 캐시 무효화 시점은 트래픽 패턴과 DB 부하를 고려해 조정할 수 있다

 


장애 대응 전략

분산 캐시 자체는 고성능이지만, 장애가 발생하면 서비스 전체의 병목으로 이어질 수 있음

 

1. 장애 유형

유형 설명
캐시 서버 다운 노드 장애로 인한 데이터 손실
네트워크 단절 클러스터간 통신 불가
Redis 재시작 비영속 설정시 캐시 데이터 초기화

 

 

2. 복구 전략

전략 설명
Replication(복제) 마스터 - 슬레이브 구조로 실시간 복제 구성
Persistence(AOF / RDB) Redis의 영속화 기능을 통해 데이터 스냅샷 유지
Sentinel 모니터링 장애시 자동 Failover 수행
Cluster 모드 여러 노드에 데이터 분산 저장하여 가용성 향상

 

Failover 전략

 

* 장애 테스트(Chaos Engineering)를 통해 실제 Failover 시나리오를 주기적으로 점검하기

* Redis는 단일 장애점(SPOF)을 피하기 위해 반드시 복제 구조 + Sentinel을 함께 구성해야한다

 


보안 고려사항

분산 캐시는 네트워크를 통해 접근하므로, 보안 설정이 필수적임

 

1. 주요 보안 항목

항목 설명
인증(password) requirepass 옵션을 통해 비밀번호 설정
TLS 암호화 전송중 데이터 보호
접근 제어 특정 IP만 접속 가능하도록 방화벽 또는 보안 그룹 설정
데이터 마스킹 민감 데이터는 캐시 전 단계에서 암호화 후 저장함

 

 

2. 설정 예시(redis.conf)

# 비밀번호 설정하기
requirepass MyStrongAndAbsolutePassword123

# TLS 설정(인증서 경로 포함)
tls-port 6379
tls-cert-file /etc/redis/server.crt
tls-key-file /etc/redis/server.key
tls-ca-cert-file /etc/redis/ca.crt

 

* 운영 환경에서는 반드시 VPC 내부 전용 엔드포인트로 접근해야한다고 한다

* Cloud Redis 사용시 IAM 기반 접근 제어를 활용하면 안전하다고 한다

 


정리

고려 항목 주요 포인트 권장 접근 방식
네트워크 성능 지연 최소화 로컬 캐시, 파이프라이닝
데이터 일관성 최신 상태 유지 TTL, 캐시 무효화, Pub / Sub
장애 복구 고가용성 보장 Replication, Sentinel, Cluster
보안 안전한 통신 TLS, 인증, IP 제어