Intro
대규모 서비스를 운영하다 보면 데이터베이스 관리와 비용 최적화가 중요한 과제로 떠오릅니다. AWS의 RDS와 ElastiCache는 이러한 문제를 해결하는 데 도움을 주는 강력한 도구입니다. RDS가 관계형 데이터를 다루는 동안, ElastiCache는 빠른 접근이 필요한 데이터를 효율적으로 처리합니다. 이 두 서비스를 적절히 활용하면 애플리케이션의 성능을 개선하고 동시에 운영 비용을 절감할 수 있습니다. 오늘은 이 두 서비스의 특징과 함께, ElastiCache를 통한 세션 관리로 어떻게 비용을 줄일 수 있는지 알아보겠습니다.
아래 ⭐️ 된 내용은 중요한 내용이니 꼭 기억할 것!
실습에 대한 내용은 기재하지 않았습니다. 환경 구성에 대한 시간이 오래 걸리기 때문에 추후 작성하겠습니다.
1. ElastiCache 소개 ⭐️
RDS는 관계형 데이터베이스, ElastiCache는 인메모리 데이터 스토어이며 키-값 기반의 인메모리 데이터베이스입니다.
예를 들면, 대규모 서비스 애플리케이션에서 사용자는 RDS에 접속해 정보를 받아가게 개발되었다면 데이터베이스와 애플리케이션간의 리소스 또한 많이 발생할 수 있습니다. 이로 인해 AWS에서 비용이 더 많이 나올 것입니다. 하지만 ElastiCache를 사용한다면 이 연결하는 과정에 대한 리소스 비용은 ElastiCache이 사용되어 비용을 절감하는 방법도 존재하며 실제로 유명한 디스패치 웹서비스 고객 사례가 있다.
주요 특징
- 완전 관리형 서비스
- 높은 확장성과 고가용성
- Redis와 Memcached 두 가지 인기 있는 엔진 지원
- 실시간 애플리케이션에 최적화
2. ElastiCache 생성 및 설정
2.1 생성 옵션
- 서버리스(Serverless) ⭐️
- 장점: 트래픽에 따라 자동 확장, 서버 관리 불필요
- 단점: 상대적으로 높은 비용
- 사용 사례: 변동성이 큰 워크로드, 관리 오버헤드 최소화 필요 시
- 자체 캐시 설계(Design your own cache) ⭐️
- 더 많은 제어와 커스터마이징 가능
- 옵션
- 백업에서 복원: 기존 백업에서 새 클러스터 생성
- 간편한 생성: 프로덕션, 개발 테스트, 데모 환경 중 선택
- 클러스터 캐시 모드: 모든 설정을 직접 구성
2.2 주요 설정
- 클러스터 설정
- 클러스터 모드: 활성화/비활성화 (샤딩 지원 여부)
- 클러스터 이름: 고유 식별자
- 위치: AWS 클라우드 또는 온프레미스(AWS Outposts)
- 노드 설정
- 노드 유형: 예) t2.micro (개발/테스트용), r5.large (프로덕션용)
- 복제본 수: 읽기 성능 및 고가용성을 위해 설정 (0-5개)
- 네트워크 설정
- VPC 선택
- 서브넷 그룹: 캐시 노드가 위치할 서브넷 지정
- 보안 그룹: 트래픽 제어를 위한 방화벽 규칙
- 고가용성 설정
- 다중 AZ(Multi-AZ): 고가용성을 위해 여러 가용 영역에 배포
- 자동 장애 조치(Auto-failover): 프라이머리 노드 장애 시 자동 대처
- 보안 설정
- 저장 데이터 암호화(Encryption at rest): KMS 키를 사용한 데이터 암호화
- 전송 중 암호화(Encryption in transit): SSL/TLS를 통한 데이터 전송 보안
3. ElastiCache 보안
3.1 Redis 보안
- IAM 인증
- AWS IAM을 통한 액세스 제어
- API 호출 및 관리 작업에 대한 세밀한 권한 관리
- Redis AUTH
- Redis 클러스터 수준의 비밀번호 보호
- 클러스터 생성 시 또는 수정을 통해 설정 가능
- SSL/TLS 암호화
- 클라이언트와 서버 간 통신 암호화
- 중간자 공격 방지
3.2 Memcached 보안
- SASL 인증
- 사용자 이름과 비밀번호 기반의 인증 메커니즘
- 더 강력한 보안을 제공하지만 설정이 다소 복잡
3.3 일반 보안
- 보안 그룹
- 인바운드/아웃바운드 트래픽 제어
- IP 주소, 포트, 프로토콜 기반의 액세스 제어
- IAM 정책
- ElastiCache API 및 관리 작업에 대한 액세스 제어
- 최소 권한 원칙 적용 가능
4. ElastiCache 데이터 로딩 패턴 ⭐️
4.1 지연 로딩 (Lazy Loading)
- 작동 방식
- 애플리케이션이 캐시에서 데이터 요청
- 캐시 미스 시 데이터베이스에서 데이터 로드
- 로드된 데이터를 캐시에 저장 후 반환
- 장점: 불필요한 데이터 캐싱 방지
- 단점: 초기 요청 시 지연 발생 가능
애플리케이션에서 캐시 히트(Cache hit)가 있는 경우, ElasticCache는 캐시에서 데이터를 가져옵니다.
캐시 미스(Cache miss)의 경우에는 데이터베이스에서 읽고 캐시에 쓰게 됩니다. 지연 로딩이라는 불리는 이유는 캐시 히트가 없는 경우에만 ElasticCache에 Read from DB 하기 때문입니다.
4.2 Write Through
- 작동 방식
- 데이터베이스에 데이터 쓰기
- 동시에 캐시도 업데이트
- 장점: 캐시와 데이터베이스 간 일관성 유지
- 단점: 모든 쓰기 작업에 대해 추가 지연 발생
4.3 세션 스토어
- 용도: 웹 애플리케이션의 세션 데이터 저장
- 기능: TTL(Time To Live)을 사용해 세션 만료 관리
- 장점: 빠른 세션 조회, 서버 간 세션 공유 용이
5. Redis 특화 기능: 게이밍 리더보드 ⭐️
Redis의 Sorted Set 자료구조를 활용한 실시간 리더보드 구현한 보드입니다.
- 정렬된 세트(Sorted Set) 활용
- 각 요소에 점수(score)를 연관시켜 저장
- 요소 추가 시 자동으로 정렬됨
- 구현 방법
- 플레이어 ID를 멤버로, 점수를 스코어로 설정
- ZADD 명령어로 데이터 추가/업데이트
- ZREVRANGE 명령어로 상위 랭킹 조회
- 장점
- 실시간 업데이트 및 조회 가능
- 애플리케이션 로직 없이 Redis 자체 기능으로 구현
- 높은 성능과 확장성
'Cloud' 카테고리의 다른 글
[AWS] RDS 암호화 및 RDS Proxy 기본 개념 (0) | 2024.08.16 |
---|---|
[AWS] RDS, Aurora 의 백업, 복원, 복제 요약 (0) | 2024.08.14 |
[AWS] Aurora 개념 (0) | 2024.08.13 |
[AWS] RDS와 RDS Custom은 어떤 차이점이 있을까? (0) | 2024.08.13 |
[AWS] RDS 개요 및 읽기 전용 복제본과 다중 AZ와 실습 영상 (0) | 2024.08.09 |