ElastiCache
RDS와 유사한 서비스지만 Redis나 Memcached를 대상으로 하는 서비스이다.
캐시는 매우 어렵고 복잡하니 일단 간략하게 알아놓자.
- ElastiCache: Redis나 Memcached같은 캐싱 기술 관리를 도와준다.
- cache: 높은 성능의 짧은 지연시간을 가진 인메모리 DB
캐시는 읽기 중심 워크로드에서 DB의 로드를 줄여준다
보통의 쿼리는 캐시에 저장되어 매번 DB를 쿼리하지 않아도 된다.
-> 캐시만 이용해 쿼리 결과를 검색 가능
- 애플리케이션의 상태를 ElastiCache에 저장해 애플리케이션 상태 비저장형으로 할 수 있게 도와준다.
RDS와 같이 DB의 운영체제를 유지 관리할 수 있다.(패치, 최적화, 설정, 구성, 모니터링, 장애복구, 백업)
- ElastiCache를 사용하는 경우 애플리케이션의 코드를 많이 바꿔야 한다
DB를 쿼리하기 전이나 후에 캐시를 쿼리하도록 애플리케이션을 변경해야 한다.
- ElasciCache를 사용하기 위한 아키텍처
- DB Cache

- 애플리케이션은 쿼리가 이미 발생했는지 확인을 위해 ElastiCache를 쿼리한다.
- 이미 발생해 ElastiCache에 저장되어있으면, 캐시 히트라고 부른다.
-> ElastiCache에서 답을 가져오는 것
-> 쿼리를 수행하기 위해 DB로 이동하는 시간을 절약해줌.
- 캐시 미스가 발생하면 DB에서 읽어 데이터를 가져와야 한다.
- 다른 애플리케이션이나 다른 인스턴스에서 같은 쿼리가 발생하면 데이터를 캐시에 다시 쓸 수 있다.
-> 다음에 동일한 쿼리가 일어나면 캐시 히트 됨.
-> RDS DB의 로드를 줄임
- 데이터를 캐시에 저장하기 때문에 캐시 무효화 전략이 있어야 한다.
가장 최신 데이터만 사용되어야 하기 때문
- User Session Store(사용자 세션 저장)

- 애플리케이션을 상태 비저장으로 만들기 위해 사용자 세션을 저장
-> 사용자가 어떤 애플리케이션에 로그인하면, 애플리케이션이 세션 데이터를 ElastiCache에 쓴다.
사용자가 애플리케이션의 다른 인스턴스로 리디렉션되면, 애플리케이션은 그 세션의 세션 캐시를 ElastiCache에서 직접 검색할 수 있어 사용자는 여전히 로그인 상태를 유지한다.
-> 다시 로그인할 필요 없어짐.
-> 이는 애플리케이션을 상태 비저장형으로 만드는 것.
-> 사용자의 세션 데이터를 ElastiCache에 기록하는 것.
Redis VS Memcached
- Redis(고가용성, 백업, 읽기 복제본을 위해 존재)
데이터 내구성에 대한 것.
복제되는 캐시 -> 가용성과 내구성이 뛰어남.
- 자동 장애 조치 기능이 있는 다중 AZ가 있다.
- 읽기 복제본이 있다.
- AOF 지속성을 이용한 데이터 내구성이 있다.
- 백업 및 복원 기능이 있다.
- 세트 및 정렬된 세트를 지원
- Memcached(분산된 순수한 캐시)+(고가용성, 백업, 복원 X)
멀티스레드 아키텍처
Memcached에서는 여러 인스턴스가 샤딩을 통해 작동된다.
데이터가 손실되어도 괜찮은 경우 사용
- 데이터 분할을 위해 멀티 노드를 사용 -> 샤딩(sharding)
- 고가용성이 없고 복제가 일어나지 않는다.
- 영구 캐시가 아니다.
- 백업 및 복원이 없다.
ElastiCache - 캐시 보안
ElastiCache는 Redis에서만 IAM 인증을 지원한다.
나머지는 ID,PASSWORD를 이용하자.
- ElastiCache에서 IAM정책을 정의하면 AWS API 수준 보안에만 사용된다.
- Redis AUTH
- Redis 클러스터를 만들때 Redis 내 보안을 통해 비밀번호와 토큰을 설정
캐시에 추가 보안 수준을 제공(보안 그룹에 추가)
SSL 전송 중 암호화 지원
- Memcached
- SASL 기반 승인을 제공
SASL이란? 인터넷 프로토콜에서 인증과 데이터보안을 위한 프레임워크
ElastiCache 패턴(3가지)
- 지연로딩
모든 데이터가 캐시되고 데이터가 캐시에서 지체될 수 있다.
- Write Through
Write Through는 DB에 데이터가 기록될 때마다 캐시에 데이터를 추가하거나 업데이트
-> 데이터가 지체되지 않음
- 세션 스토어로 사용
유지 시간 기능을 사용해 세션을 만료할 수 있다.

<지연 로딩 전략>
1. 애플리케이션에 캐시 히트가 있는 경우 ElastiCache는 캐시에서 데이터를 가져온다.
2. 캐시 미스의 경우 DB에서 읽고 캐시에 쓴다.
이를 지연 로딩이라 부르는 이유는 캐시 히트가 없는 경우에만 데이터를 ElastiCache에 로드하기 때문
ElastiCache Redis 사용 사례
- 게이밍 리더 보드 만들기(시험)
순간순간 누가 1등이고 2등인지 알고싶음.
- Redis 클러스터가 있는 경우 실시간 리더보드를 만들 수 있다.
-> 실시간으로 1,2,3위 플레이어를 구할 수 있다.
- 모든 Redis 캐시는 동일한 리더보드를 사용할 수 있다.
즉, 클라이언트가 Redis를 사용해 ElastiCache와 대화할 때 이 실시간 리더보드에 액세스 가능하고, 애플리케이션에서 이 기능을 프로그래밍할 필요가 없다.
정렬된 세트와 함께 Redis를 활용해 실시간 리더보드에 액세스 가능.