AWS ElastiCache vs MemoryDB: 실제로 어떤 것이 필요합니까?
Source: Dev.to
이 기사는 원래 Jo4 Blog에 게시되었습니다.
TL;DR 의사결정 트리
Is your data ephemeral (can be regenerated/lost)?
├── YES → ElastiCache (~$12/month for cache.t4g.micro)
└── NO → MemoryDB (~$25+/month, durable storage)
내 사용 사례: 속도 제한
For jo4.io, I need Redis for:
- Rate limiting counters (
user:123:requests:minute) → 속도 제한 카운터 (user:123:requests:minute) - Session caching → 세션 캐싱
- Temporary feature flags → 임시 기능 플래그
If Redis dies and I lose all this data:
- Rate limit counters reset to 0 (users get a fresh minute, not a big deal) → 속도 제한 카운터가 0으로 초기화됩니다 (사용자는 새로운 1분을 얻게 되며, 큰 문제가 아닙니다)
- Sessions expire (users log in again, minor inconvenience) → 세션이 만료됩니다 (사용자가 다시 로그인해야 하며, 약간의 불편함)
- Feature flags reload from database (brief hiccup) → 기능 플래그가 데이터베이스에서 다시 로드됩니다 (잠깐의 끊김)
판단: ElastiCache – 데이터는 일시적입니다.
MemoryDB를 사용해야 할 때
MemoryDB는 Redis 데이터가 진실의 원천인 경우에 사용합니다:
- 재계산할 수 없는 리더보드/순위
- Redis 그 자체가 데이터베이스인 실시간 인벤토리
- 잃을 수 없는 세션 데이터 (예: 금융 애플리케이션)
- 메시지를 잃으면 거래가 손실되는 메시지 큐
MemoryDB가 제공하는 기능:
- 다중 AZ 내구성(노드 장애 시 데이터 유지)
- 트랜잭션 로그 내구성(쓰기 내용이 영구 저장)
- 시점 복구
비용 비교
| 서비스 | 노드 유형 | 월 비용 |
|---|---|---|
| ElastiCache | cache.t4g.micro | ~ $12 |
| ElastiCache | cache.t4g.small | ~ $24 |
| MemoryDB | db.t4g.small | ~ $25 |
| MemoryDB | db.r6g.large | ~ $200+ |
MemoryDB에는 마이크로 티어가 없으므로 최소 비용이 더 높습니다.
내 ElastiCache 설정
resource "aws_elasticache_cluster" "redis" {
cluster_id = "jo4-prod-redis"
engine = "redis"
engine_version = "7.1"
node_type = "cache.t4g.micro"
num_cache_nodes = 1
port = 6379
parameter_group_name = "default.redis7"
subnet_group_name = aws_elasticache_subnet_group.redis.name
security_group_ids = [aws_security_group.redis.id]
# 매일 스냅샷, 7일 보관 (일시적인 데이터라도 있으면 좋음)
snapshot_retention_limit = 7
snapshot_window = "02:00-03:00"
maintenance_window = "sun:03:00-sun:04:00"
}
인‑VPC 장점
ElastiCache에서 제가 가장 좋아하는 점 중 하나는 VPC 내부에 있을 때 인증이 필요 없다는 것입니다.
# application-redis.yaml
spring:
data:
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
timeout: 5000
# No password needed – security group controls access
Redis Cloud와 비교하면 다음과 같은 절차가 필요합니다:
- 사용자 이름/비밀번호
- TLS 설정
- 자격 증명 회전
- 외부 서비스와의 네트워크 연결
인‑VPC ElastiCache를 사용하면 다음과 같은 이점을 얻을 수 있습니다:
- 보안 그룹으로 제한된 접근만 EC2 인스턴스에 허용
- 관리할 자격 증명 없음
- 외부 네트워크 의존성 없음
- 낮은 지연 시간
Redis Cloud에서 마이그레이션
Redis Cloud에서 ElastiCache로 이동하는 경우:
- 연결 설정 업데이트 – 호스트, 포트, 그리고 인증 제거.
- 데이터 손실 수용 – ElastiCache는 빈 상태로 시작합니다.
- 실패‑오픈 동작 보장 – 애플리케이션이 빈 캐시를 정상적으로 처리하도록 해야 합니다.
속도 제한 및 캐싱의 경우, 데이터가 일시적이기 때문에 이 마이그레이션은 간단합니다.
일반적인 실수
1. 캐싱에 MemoryDB 사용
과도함. 필요 없는 내구성을 위해 비용을 지불하고 있습니다.
2. 중요한 데이터에 ElastiCache 사용
데이터베이스 백업 없이 Redis에 쇼핑 카트나 사용자 선호도를 저장한다면, MemoryDB로 전환하거나 아키텍처를 재고하십시오.
3. 프로덕션에 단일 AZ ElastiCache 사용
최소한 프로덕션 워크로드를 위해 AZ 간 복제 그룹을 사용하십시오.
4. 과도한 규모 설정
cache.t4g.micro부터 시작하십시오. 언제든지 확장할 수 있습니다. 메모리 사용량과 eviction을 모니터링하세요.
Decision Matrix
| 사용 사례 | 서비스 | 이유 |
|---|---|---|
| Rate limiting | ElastiCache | 일시적이며 재생성 가능 |
| Session cache | ElastiCache | 손실 시 재인증 가능 |
| Page cache | ElastiCache | 손실 시 재렌더링 가능 |
| Leaderboard (source of truth) | MemoryDB | 순위 재생성 불가 |
| Shopping cart (no DB backup) | MemoryDB | 사용자 데이터, 손실 불가 |
| Real‑time inventory | MemoryDB | 비즈니스 핵심 |
| Pub/Sub messaging | Depends | 메시지 손실 = 금전 손실 → MemoryDB |
요약
- ElastiCache: 빠르고 저렴하며 일시적입니다. 캐싱 및 속도 제한에 최적입니다.
- MemoryDB: 내구성이 높고 비용이 더 많이 듭니다. Redis를 주 데이터베이스로 사용할 때 이상적입니다.
과도하게 고민하지 마세요. 데이터를 다시 생성할 수 있다면 ElastiCache를 사용하세요.
jo4.io를 구축 중 – 분석 기능이 포함된 URL 단축기입니다. jo4.io에서 확인해 보세요.