AWS ElastiCache는 Redis와 Memcached를 클라우드에서 관리형으로 제공하는 인메모리 캐시 서비스입니다. 데이터베이스 조회 결과나 연산 결과를 메모리에 저장해 두면, 동일한 요청에 대해 DB를 거치지 않고 수 밀리초 이내로 응답할 수 있습니다. 트래픽이 급증하는 구간에서 RDS의 부하를 낮추는 핵심 수단으로 사용됩니다.
인메모리 캐시(In-Memory Cache): 데이터를 디스크가 아닌 RAM에 저장하는 방식. 디스크 기반 스토리지보다 수십~수백 배 빠른 읽기 속도를 제공합니다.
ElastiCache는 두 엔진을 지원합니다.
| 항목 | Redis | Memcached |
|---|---|---|
| 데이터 구조 | String, Hash, List, Set, Sorted Set 등 | String만 |
| 영속성 | AOF·RDB 지원 | 없음 |
| 복제·클러스터 | 지원 | 지원(샤딩만) |
| Pub/Sub | 지원 | 미지원 |
단순한 키-값 캐시가 목적이고 수평 확장이 최우선이라면 Memcached를 선택할 수 있지만, 실무에서는 풍부한 데이터 구조와 복제 기능을 제공하는 Redis가 압도적으로 많이 사용됩니다.
캐시는 자주 조회되는 데이터를 미리 메모리에 적재해 두는 저장소입니다. 캐시에 데이터가 있으면 Cache Hit, 없으면 Cache Miss라고 합니다. Cache Miss 시 DB에서 데이터를 읽어 캐시에 저장한 후 반환합니다.
요청 --> ElastiCache 조회
|-- Hit --> 즉시 반환
|-- Miss --> RDS 조회 --> ElastiCache 저장 --> 반환
TTL(Time-To-Live)은 캐시 항목의 유효 시간입니다. TTL이 만료되면 항목이 자동으로 삭제됩니다. TTL을 짧게 설정하면 데이터 신선도가 높아지지만 Cache Miss가 잦아지고, 길게 설정하면 오래된 데이터가 반환될 수 있습니다. 서비스 특성에 맞는 TTL 값을 결정하는 것이 캐시 설계의 핵심입니다.
Redis의 Pub/Sub은 메시지 발행(Publish)과 구독(Subscribe) 채널을 제공합니다. 발행자가 특정 채널에 메시지를 보내면, 해당 채널을 구독 중인 모든 수신자가 실시간으로 메시지를 받습니다.
Publisher --> PUBLISH channel "event"
|
Redis Channel
|
+-----------+-----------+
| |
Subscriber A Subscriber B
채팅, 실시간 알림, 게임 이벤트 브로드캐스트 등 간단한 실시간 메시징에 활용됩니다. 단, Redis Pub/Sub은 메시지를 영속하지 않으므로 수신자가 오프라인 상태이면 메시지를 놓칩니다. 신뢰성이 필요한 메시징에는 SQS나 SNS를 사용하는 것이 적합합니다.
가장 일반적인 패턴은 Cache-Aside(Lazy Loading)입니다. 애플리케이션이 데이터를 필요로 할 때 먼저 ElastiCache를 확인하고, Cache Miss 시 RDS에서 조회한 결과를 캐시에 저장합니다.
[애플리케이션]
|
|--(1) GET user:123 --> ElastiCache
| |-- Hit --> 반환 (완료)
| |-- Miss
|
|--(2) SELECT * FROM users WHERE id=123 --> RDS
|
|--(3) SET user:123 {data} EX 300 --> ElastiCache
|
|--(4) 클라이언트에 반환
데이터가 변경될 때는 캐시를 무효화(삭제)하거나 새 값으로 업데이트합니다. 세션 저장소, 랭킹 보드, 빈번한 집계 쿼리 결과 캐싱 등이 대표적인 활용 사례입니다.
ElastiCache의 Redis Cluster 모드를 사용하면 데이터를 여러 노드에 샤딩하여 수평 확장할 수 있으며, Replication Group 구성으로 Primary 장애 시 자동 Failover도 지원합니다.