Skip to content

Tech Redis

moon edited this page Jul 23, 2025 · 3 revisions

Tech Redis

📌 기술 스택 - Redis (Docker + AWS ElastiCache 하이브리드)

✅ 사용 이유

  • JWT 토큰 저장소: 액세스 토큰과 리프레시 토큰의 안전한 임시 저장
  • 세션 관리: 사용자 로그인 상태 및 인증 정보 관리
  • 캐싱 시스템: Hot Topic 조회 결과 및 빈번한 검색 결과 캐싱으로 응답 속도 향상
  • 이중화 구조: Primary + Backup Redis로 장애 상황 대응

🔁 대안 기술

  • Memcached: 단순 캐싱에는 적합하지만 데이터 타입 제한 및 영속성 부족
  • Hazelcast: 분산 캐시 기능은 우수하지만 프로젝트 규모 대비 과도함
  • DB 세션 저장: 매번 DB 조회로 인한 성능 저하
  • In-Memory 저장: 서버 재시작 시 데이터 손실 위험

📈 장점 및 단점

구분 내용
장점 • 메모리 기반으로 매우 빠른 읽기/쓰기 성능
• TTL(Time To Live) 지원으로 자동 만료 관리
• 다양한 데이터 타입 지원 (String, Hash, List, Set)
• 이중화로 고가용성 확보
⚠️ 단점 • 메모리 기반으로 인한 데이터 휘발성
• 메모리 사용량에 따른 비용 증가
• 복잡한 쿼리나 조인 연산 불가

🔧 사용 방식 및 로직 구조

하이브리드 구조

JWT 토큰 저장 (Docker Redis)
├── redis-session1 (Primary) : 6380포트
├── redis-session2 (Backup)  : 6381포트
└── 이중화로 안정성 확보

캐싱 시스템 (AWS ElastiCache)
└── news-deliver-cache : Valkey 엔진 사용

주요 사용 사례

1. JWT 토큰 관리

// 토큰 저장 (16분 TTL)
redisTemplate.opsForValue().set("access_token:" + kakaoId, token, 16, TimeUnit.MINUTES);

// 토큰 조회 (Failover 지원)
String token = redisSession1Template.opsForValue().get(key);
if (token == null) {
    token = redisSession2Template.opsForValue().get(key); // Backup에서 조회
}

2. Hot Topic 캐싱

// 캐시 저장 (1시간 TTL)
cacheTemplate.opsForValue().set("hottopic:today", hotTopicList, 1, TimeUnit.HOURS);

// 캐시 조회
List<HotTopic> cached = cacheTemplate.opsForValue().get("hottopic:today");

Redis 설정

# Docker Redis (JWT 토큰용)
redis-session1:
  maxmemory: 128mb
  maxmemory-policy: allkeys-lru
  appendonly: yes

# ElastiCache (캐싱용)  
Cache Type: Valkey
Node: cache.t4g.micro
Network: VPC 내부 배치

🛠 개선 사항 또는 한계점

현재 구조의 장점

  • 역할 분리: JWT 토큰(중요)은 안전한 Docker Redis, 캐싱(일시적)은 관리형 ElastiCache
  • 비용 최적화: 중요도에 따른 차별화된 인프라 운영
  • 안정성: JWT 토큰 이중화로 사용자 인증 연속성 보장

한계점

  • 복잡성: 두 개의 Redis 시스템 관리 필요
  • 네트워크 지연: ElastiCache는 VPC 내부 통신으로 약간의 지연 발생
  • 메모리 관리: 적절한 TTL 설정 및 메모리 사용량 모니터링 필요

향후 개선 방향

  • Redis Cluster: 트래픽 증가 시 샤딩을 통한 수평 확장
  • 모니터링 강화: CloudWatch를 통한 메모리 사용률, 히트율 모니터링
  • 캐시 전략 최적화:
    • Write-Through: 중요한 데이터
    • Write-Behind: 로그성 데이터
    • Cache-Aside: 조회 중심 데이터
  • ElastiCache 완전 이전: 안정성이 검증되면 JWT 토큰도 ElastiCache로 이전 고려

성능 지표

JWT 토큰 조회: < 1ms
Hot Topic 캐시 히트율: > 90%
메모리 사용률: < 80%
가용성: 99.9% (이중화 구조)

키 네이밍 컨벤션

JWT 토큰:
- access_token:{kakaoId}
- refresh_token:{kakaoId}

캐싱:
- hottopic:today
- news:search:{keyword}:{page}
- user:settings:{userId}

Clone this wiki locally