이 장에서는 클라우드에서 사용되는 레디스에 대한 내용을 설명하고 있다.
AWS ElastiCache for Redis
ElastiCache는 AWS에서 제공하는 완전 관리형 인메모리 캐싱 서비스이다.
특징
- 완전 관리형: AWS가 설치, 패치, 백업 모니터링을 모두 처리
- 고가용성: Multi-AZ 배포로 자동 장애 조치 지원
- 확장성: 읽기 전용 복제본을 통한 수평 확장 가능
- 보안: VPC 내 배포, 암포화 지원, IAM 통합
- 모니터링: CloudWatch와 통합된 메트릭 제공
장점
- 운영 부담 최소화
- 자동 백업 및 복구
- 네트워크 지연시간 최소화
- AWS 다른 서비스와의 원활한 통합
단점
- 비용이 상대적으로 높음
- Redis 버전 업그레이드가 AWS 일정에 의존
- 일부 고급 Redis 기능 제한
Redis OSS (Open Source Software)
직접 관리하는 오픈소스 Redis 인스턴스를 클라우드 인프라에 배포하는 방식이다.
배포방식
- EC2/VM 인스턴스: 직접 Redis 설치 및 관리
- 컨테이너: Docker, Kubernetes를 통한 배포
- Redis Enterprise: Redis Labs의 상용 솔루션
장점
- 비용 효율성(인프라 비용만 발생)
- 완전한 제어권과 커스터마이징 가능
- 최신 Redis 기능 즉시 사용 가능
- 멀티 클라우드 호환성
단점
- 직접 운영 및 관리 필요
- 고가용성 구성의 복잡성
- 보안 설정 및 모니터링 직접 구현
- 장애 대응 책임
선택 기준
ElastiCache를 선택하는 경우
- 운영 리소스가 제한적일 때
- AWS 생태계를 주로 사용할 때
- 안정성과 가용성이 최우선일 때
- 빠른 구축이 필요할 때
Redis OSS를 선택하는 경우
- 비용 최적화가 중요할 때
- 특정 Redis 기능이나 설정이 필요할 때
- 멀티 클라우드 전략을 구사할 때
- 인프라 운영 경험이 충분할 때
-> 일반적으로 초기에 ElastiCache로 시작해서 운영 경험 쌓은 후, 필요에 따라 OSS 마이그레이션
Amazon MemoryDB for Redis
MemoryDB는 AWS에서 2021년에 출시한 Redis 호환 완전 관리형 인메모리 데이터베이스이다.
위에 언급된 ElastiCache와 달리 메인 데이터베이스로 사용할 수 있도록 설계되었다.
구분 | ElastiCache | MemoryDB |
주 용도 | 캐시 레이어 | 메인 데이터베이스 |
내구성 | 제한적 (스냅샨 기반) | 강력함 (Multi-AZ 트랜잭션 로그) |
데이터 유실 | 가능성 있음 | 거의 없음 |
읽기 성능 | 마이크로초 | 마이크로초 |
쓰기 성능 | 마이크로초 | 한 자리 밀리초 |
비용 | 상대적으로 저렴 | 상대적으로 비쌈 |
백업/복구 | 스냅샷 | 지속적 백업 |
사용 사례
MemoryDB가 적합한 경우
- 실시간 애플리케이션: 게임 리더보드, 실시간 분석
- 세션 스토어: 높은 내구성이 필요한 사용자 세션 관리
- 캐싱: 데이터 손실이 치명적인 캐시 레이어
- 메시징: 실시간 채팅, 알림 시스템
- IOT 데이터: 센서 데이터의 실시간 처리 및 저장
ElastiCache가 적합한 경우
- 순수 캐시 용도
- 비용 최적화가 중요한 경우
- 기존 데이터베이스의 성능 향상 목적
Spring Boot에서 ElastiCache와 동일한 방법으로 연결 가능
// MemoryDB 연결 설정 (ElastiCache와 동일)
@Configuration
class RedisConfig {
@Bean
fun redisConnectionFactory(): LettuceConnectionFactory {
return LettuceConnectionFactory(
RedisStandaloneConfiguration("memorydb-endpoint", 6379)
)
}
@Bean
fun redisTemplate(): RedisTemplate<String, Any> {
val template = RedisTemplate<String, Any>()
template.connectionFactory = redisConnectionFactory()
template.keySerializer = StringRedisSerializer()
template.valueSerializer = GenericJackson2JsonRedisSerializer()
return template
}
}
'Study OR Book > 실전 레디스' 카테고리의 다른 글
[실전 레디스] Chaprter 09_메모리 관리 (3) | 2025.07.21 |
---|---|
[실전 레디스] Chaprter 08_레디스 클러스터 (1) | 2025.07.14 |
[실전 레디스] Chaprter 07_레플리케이션 (0) | 2025.07.07 |
[실전 레디스] Chaprter 06_트러블 슈팅 (0) | 2025.07.01 |
[실전 레디스] Chaprter 05_레디스 운용 관리 (0) | 2025.06.23 |