Redis 에는 사용자 토큰 정보가 저장되어 있다.
기존 Redis Server는 API Server에 Docker Container 로 올라가있다. (Redis Master, Replica 2대)
향후 API Server가 트래픽 부하로 인한 Scale Out이 될 경우
Redis Server도 같이 생성되면서, 데이터 동기화 문제가 발생한다.따라서 별도의 Redis Server 구성이 필요하다.
- 운영의 편의성을 위해 docker-compose 또는 Kubernetes 기반으로 구성한다.
멀티환경(dev/stage/prod)에서 Redis를 손쉽게 구성 및 유지보수 할 수 있다.- 초기구성은 t3.medium 3대(Master 1 + Replica 2)
- 부하 증가시 Read Replica 추가 또는 t3.large 업그레이드
- 최종적으로 안정적인 운영 필요시 ElaticCache 전환을 고려할 수 있다.
최종적으로는 ElasticCache 도입을 목표로 하고 있어, 이참에 ElasticCache 전환을 검토한다.
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
spring:
redis:
host: your-elasticache-endpoint.amazonaws.com
port: 6379
password: your_redis_auth_password # 설정한 경우
ssl: true # TLS/SSL 사용 시 활성화
⚠️ 주의: AWS ElastiCache Redis는 VPC 내에서 운영되므로, 애플리케이션도 같은 VPC 또는 피어링 연결되어야 함.기본적으로 application.yml 변경만으로도 동작하지만, 아래 항목을 체크해야 함.
ElastiCache는 Redis Sentinel을 지원하지 않음
Read Replica 연결 방식 변경 필요
✅ 기존 Master/Replica 개별 지정 방식
spring:
redis:
master:
host: 127.0.0.1
port: 6379
replicas:
- host: 127.0.0.2
port: 6380
- host: 127.0.0.3
port: 6381
➡ ElastiCache에서는 Read Replica를 직접 지정할 수 없고, Master 엔드포인트를 통해 자동 라우팅됨.
✅ ElasticCache 변경시
spring:
redis:
host: my-redis-cluster.xxxxxx.cache.amazonaws.com
port: 6379
➡ AWS가 내부적으로 Load Balancing을 수행하여 Replica로 자동 분산 처리함.
네트워크 보안 그룹 설정 (VPC & 보안 그룹)
ElastiCache는 VPC 내부에서 운영되므로 애플리케이션 서버(EC2)도 같은 VPC 또는 피어링된 네트워크 내에 있어야 함.
AWS 콘솔에서 ElastiCache의 보안 그룹을 확인하고, EC2가 해당 Redis 포트(기본 6379)로 접근할 수 있도록 보안 그룹에서 허용해야 함.
✅ AWS 보안 그룹 설정 방법
Redis Cluster 모드 활성화 여부 확인
ElastiCache는 Cluster Mode 활성화 여부에 따라 동작 방식이 다름.
➡ 기본적으로 Cluster Mode 비활성화 상태로 운영하는 것이 일반적이므로, 별도 설정이 필요하지 않을 가능성이 높음.
AWS 에서 Valkey 사용을 적극적으로 권장하고 있다. (저렴한 비용)
그래서 두 가지 비교를 해보았다.
💠 기본개요
특징 | ElastiCache for Redis | ElastiCache for Valkey |
---|---|---|
설명 | Redis 기반의 인메모리 데이터 스토어 | Valkey 기반의 인메모리 데이터 스토어 (Redis의 오픈소스 포크) |
오픈소스 기반 | Redis (오픈소스 버전) | Valkey (Redis 포크) |
AWS 관리형 서비스 지원 | ✅ 지원 | ✅ 지원 |
호환성 | Redis API 완벽 지원 | Redis 7.0과 대부분 호환, 일부 기능 제한 |
라이선스 | Redis 소스 코드 기반 | AWS에서 Redis 소스 코드 포크 (Redis 소스 코드 사용 제한 대응) |
💠 주요 차이점
특징 | ElastiCache for Redis | ElastiCache for Valkey |
---|---|---|
출시 시점 | 오래전부터 제공됨 | 2024년 출시 |
라이선스 이슈 | Redis의 새로운 라이선스 정책 영향 가능 | AWS가 직접 관리, 라이선스 이슈 없음 |
성능 최적화 | Redis 엔진 최적화 적용 | AWS 맞춤형 최적화 적용 |
신규 기능 지원 | Redis 최신 기능 반영 | Redis 7.0 기반, 이후 기능은 AWS가 자체 개발 |
기업 지원 | Redis, AWS에서 지원 | AWS에서만 지원 |
💠 선택 기준
사용 목적 | 추천 서비스 |
---|---|
Redis의 최신 기능을 사용해야 하는 경우 | ElastiCache for Redis |
AWS에서 장기적으로 안정적인 Redis 대안을 찾는 경우 | ElastiCache for Valkey |
오픈소스 Redis와 최대한 동일한 환경을 유지해야 하는 경우 | ElastiCache for Redis |
AWS에서 직접 관리하고 라이선스 이슈 없이 사용할 서비스가 필요한 경우 | ElastiCache for Valkey |
💠 결론
즉, Redis 최신 기능이 필요하다면 Redis, 장기적인 안정성과 AWS 지원이 중요하다면 Valkey가 유리합니다.
항목 | Redis Sentinel | Redis Cluster |
---|---|---|
목적 | 고가용성(High Availability) 보장 | 확장성(Scalability) 및 고가용성 제공 |
구성 방식 | Master-Slave 복제 (failover 지원) | Sharding(파티셔닝) 및 복제 지원 |
Failover 지원 | ✅ 가능 (자동 장애 조치) | ✅ 가능 (마스터 장애 시 슬레이브가 승격됨) |
데이터 샤딩 | ❌ 지원 안 함 | ✅ 지원 |
데이터 저장 방식 | 모든 노드가 동일한 데이터를 가짐 | 데이터가 여러 노드로 분산 저장됨 |
읽기 부하 분산 | ✅ 슬레이브 노드를 통해 가능 | ✅ 여러 노드에 분산됨 |
쓰기 확장성 | ❌ 단일 마스터에서만 가능 (수직 확장 필요) | ✅ 여러 마스터에서 분산 처리 가능 (수평 확장 가능) |
클라이언트 복잡성 | 기존 Redis 클라이언트와 동일 | 클라이언트가 클러스터 모드를 지원해야 함 |
트랜잭션 지원 (MULTI, EXEC) | ✅ 가능 | ⚠️ 같은 키 슬롯 내에서만 가능 |
Cross-Slot 명령어 지원 | ✅ 가능 | ❌ 기본적으로 지원 안 함 (Lua 스크립트도 제한됨) |
구성 및 운영 난이도 | ✅ 쉬움 (단순한 마스터-슬레이브 구성) | ❌ 상대적으로 복잡함 (노드 간 데이터 분산 필요) |
🔹 선택 기준
선택 기준 | Sentinel | Cluster |
---|---|---|
작은 규모의 서비스 | ✅ 적합 | ❌ 불필요 |
고가용성(H/A) 필요 | ✅ 가능 | ✅ 가능 |
수직 확장(Scale-up) 필요 | ✅ 가능 | ❌ 지원 안 함 |
수평 확장(Scale-out) 필요 | ❌ 지원 안 함 | ✅ 가능 |
트랜잭션(MULTI/EXEC) 필요 | ✅ 가능 | ❌ 제한적 (같은 슬롯 내에서만 가능) |
Cross-Slot 명령어 필요 | ✅ 가능 | ❌ 불가능 |
🔹 결론
✅ 추천
🚀 즉, 서비스 규모와 요구 사항에 따라 선택하면 됩니다!