
RDS Overview
RDS
- 관계형 데이터베이스 서비스를 나타내며 이는 SQL을 쿼리 언어로 사용하는 데이터베이스를 위한 관리형 데이터베이스를 뜻합니다.
- 이 언어를 이용해서 클라우드에 데이터베이스를 생성할 수 있고 이와 같은 데이터베이스는 AWS 상에서 관리되므로 그 이점이 아주 큽니다.
- Postgres
- MySQL
- MariaDB
- Oracle
- Microsoft SQL Server
- Aurora
- EC2 인스턴스 상에 자체 데이터베이스 서비스를 배포하지 않고 RDS를 사용하는 이유
RDS는 관리형 서비스로 AWS가 데이터베이스뿐만 아니라 여러 기타 서비스 또한 제공하고 있습니다.
- 프로비저닝 자동화, 기본 운영 체제 패치 자동화
- 지속적인 백업이 수행되며 특정 타임스탬프도 복구할 수 있습니다.
(PITR) (Point in Time Restore)
- 모니터링 대시보드
- 읽기 전용 복제본에 대한 강의도 따로 존재
- 다중 AZ를 설정
- 업그레이드를 위한 유지 보수도 존재
- 읽기 전용 복제본을 추가함으로써 수직 및 수평 확장성을 증가\
- 스토리지가 EBS를 기반
- 단, RDS 인스턴스에는 SSH를 따로 가질 수 없습니다.
- AWS에서 제공되므로
기본 EC2 인스턴스에 대해서는 사용자가 따로 접근 권한을 갖지 않기 때문입니다.
RDS Backups
- 백업은 RDS에서 자동으로 활성화되며 자동으로 생성됩니다.
- 매일 수행되는 데이터베이스 전체에 대한 백업과 트랜잭션 로그, 즉 일일 트랜잭션 로그가 매 오 분마다 RDS에 백업됩니다.
- 이 두 가지를 함께 이용해서 그 어떤 지정 시점으로든 데이터베이스를 복원할 수 있습니다.
- 오래된 백업에서부터 단 오 분 전 백업으로까지 자유롭게 돌아갈 수 있습니다.
- 자동 백업은 기본적으로는 7일간 보관되지만 최대 35일까지로 보관 기간을 설정할 수 있습니다.
DB Snapshots
스냅샷은 사용자가 수동으로 발동시키는 백업으로 백업 보관 기간을 사용자 임의로 설정할 수 있습니다.
RDS - Storage Auto Scaling
- RDS 데이터베이스를 생성할 때는 원하는 스토리지 용량을 지정해야 합니다.
- RDS 스토리지 오토 스케일링이 활성화되어 있으면 RDS가 자동으로 스토리지에 대한 스케일링을 수행합니다.
- 데이터베이스 스토리지를 수동으로 확장하는 작업을 피하는 것이 골자입니다.
- 최대 스토리지 임계값을 설정해야 합니다.
- 이러한 상황일 때 자동으로 스토리지를 수정합니다.
- 사용 가능한 스토리지가 할당된 스토리지의 10% 미만일 경우.
- 낮은 스토리지 상태가 오 분 이상 지속되는 경우.
- 지난 수정이 여섯 시간 이상 지났을 경우.
- 이는 워크로드를 예측할 수 없는 애플리케이션에 아주 유용합니다.
RDS 읽기 전용 복제본과 다중 AZ
RDS 읽기 전용 복제본 (Read Replicas)
- 읽기를 스케일링합니다
- 최대 다섯 개까지 생성할 수 있습니다.
동일한 가용 영역 또는 가용 영역이나 리전을 걸쳐서 생성될 수 있습니다.
- 읽기 전용 복제본 사이에
비동기식 복제가 발생합니다.
비동기식이란 결국 읽기가 일관적으로 유지된다는 것을 뜻합니다.
- 복제본 중 하나를 데이터베이스로 사용하고자 하며
그에 대한 권한을 획득하면 이를 데이터베이스로 승격시킬 수 있습니다.
- 주요 애플리케이션에 있는 모든 연결을 업데이트해야 합니다.
- RDS 클러스터 상의 읽기 전용 복제본 전체 목록을 활용할 수 있습니다.
- 읽기 전용 복제본이 있는 경우에는 SELECT 명령문에만 사용하는 점을 명심해야 합니다.
네트워크 비용 (Cost)
- AWS에서는 하나의 가용 영역에서 다른 가용 영역으로 데이터가 이동할 때에 비용이 발생합니다.
- 예외가 존재하며 이 예외는 보통 관리형 서비스에서 나타납니다. 그리고 읽기 전용 복제본은 관리형 서비스입니다.
- 읽기 전용 복제본이 다른 AZ 상이지만 동일한 리전 내에 있을 때는 비용이 발생하지 않습니다.
- 서로 다른 리전에 복제본이 존재하는 경우,
RDS DB 인스턴스와 읽기 전용 복제본이 여러 리전을 넘나들어야 하기 때문에 네트워크에 대한 복제 비용이 발생합니다.
다중 AZ
다중 AZ는 주로 재해 복구에 사용됩니다.
- 동기식으로 이를 AZ B에 스탠바이 인스턴스로 복제합니다.
- 하나의 DNS 이름을 갖고 애플리케이션 또한 하나의 DNS 이름으로 통신하며 마스터에 문제가 생길 때에도 스탠바이 데이터베이스에 자동으로 장애 조치가 수행됩니다.
가용성을 높일 수 있습니다.
- 전체 AZ 또는 네트워크가 손실될 때에 대비한 장애 조치이자 마스터 데이터베이스의 인스턴스 또는 스토리지에 장애가 발생할 때 스탠바이 데이터베이스가 새로운 마스터가 될 수 있도록 하는 겁니다.
- 따로 앱에 수동으로 조치를 취할 필요가 없습니다.
- 스케일링에 이용되지도 않습니다.
- 재해 복구를 대비해서 읽기 전용 복제본을 다중 AZ로 설정할 수 있습니다.
단일 AZ에서 다중 AZ로 RDS 데이터베이스 전환이 가능할지?
- 단일 AZ에서 다중 AZ로 전환할 때에 데이터베이스를 중지할 필요가 없다는 가정하에,
- 데이터베이스 수정을 클릭하고 다중 AZ 기능을 활성화시키기만 하면 됩니다.
- 다음이 내부적으로 발생하는 일입니다.
- 기본 데이터베이스의 RDS가 자동으로 스냅샷을 생성합니다.
- 이 스냅샷은 새로운 스탠바이 데이터베이스에 복원됩니다.
- 스탠바이 데이터베이스가 복원되면 두 데이터베이스 간 동기화가 설정되므로
스탠바이 데이터베이스가 메인 RDS 데이터베이스 내용을 모두 수용하여 다중 AZ 설정 상태가 됩니다.
RDS 암호화 + 보안
암호화
미사용 데이터 암호화는 AES 256비트 암호화를 사용하는 AWS의 키 매니지먼트 서비스인 AWS KMS로 마스터 데이터베이스와 읽기 전용 복제본을 암호화할 수 있습니다.
- 암호화 실행 시 실행 시간을 정의해야 합니다.
- 마스터 데이터베이스를 암호화하지 않으면 복제본도 암호화할 수 없습니다.
- Oracle과 SQL 서버에서
TDE라고 하는 투명한 데이터 암호화를 활성화할 수 있고 이는 데이터베이스 암호화의 대안을 제공합니다.
전송 중 암호화는 늘 SSL 인증서가 필요합니다.
클라이언트에서 데이터베이스로 전송 중인 것을 말합니다.
- 데이터베이스에 연결 시 신뢰할 수 있는 인증서로
SSL 옵션을 제공하면 SSL을 연결할 수 있습니다.
- 모든 클라이언트가 SSL을 사용하도록 하려면,
PostgreSQL에서는 rds.force_ssl=I인 콘솔 매개변수 그룹을 설정.
MySQL에서는 GRANT USAGE ON *.* TO 'mysqluser'@%'REQUIRE SSL이라는 명령문을 데이터베이스 내부에서 실행.
암호화 작업
- 암호화 RDS 백업
암호화 되지 않은 RDS 데이터베이스에서 스냅샷을 생성하면
스냅샷 자체는 암호화되지 않는 것입니다.
암호화된 RDS 데이터베이스에서 스냅샷을 생성하면
모든 스냅샷이 기본으로 암호화되는데 이는 항상 기본 값은 아닙니다.
- 그래서
암호화되지 않은 스냅샷을 암호화된 스냅샷으로 복제해야 합니다.
- 암호화되지 않은 RDS 데이터베이스의 암호화 방법
- 암호화 되지 않은 RDS 데이터베이스의 스냅샷을 생성해야 하고 이는 암호화되지 않습니다.
- 복제한 스냅샷의 암호화를 활성화합니다.
이 암호화된 스냅샷으로 데이터베이스를 복원할 수 있으며
이는 암호화된 RDS 데이터베이스를 제공합니다.
- 새 암호화된 RDS 데이터베이스로 옮기고
이전 데이터 베이스를 삭제합니다.
RDS 보안 - 네트워크와 IAM
- 네트워크 보안
네트워크 보안의 RDS 데이터베이스는 대게 퍼블릭 서브넷이 아닌 프라이빗 서브넷에서 배포됩니다.
RDS 보안은 RDS 인스턴스에 연결되어 있는 보안 그룹을 활용해 실행됩니다.
EC2 인스턴스와 동일한 개념입니다.
RDS와 통신할 수 있는 IP 또는 보안 그룹을 제어합니다.
- 액세스 관리
IAM 정책은 AWS RDS를 관리하는 사람만 제어할 수 있습니다.
기존의 방식으로 데이터베이스를 연결하려면,
데이터 베이스에 로그인하기 위해 기존 사용자 이름과 암호를 사용해야 합니다.
- 또는
RDS MySQL과 PostgreSQL과 같은 IAM 기반의 인증을 사용할 수 있습니다.
결국 데이터베이스 보안은 주로 데이터베이스 안에서 이루어지는 것.
IAM 인증
MySQL과 PostgreSQL에서만 실행되며 암호는 필요하지 않고,
인증 토큰이라는 것이 필요한데
RDS API 호출을 사용해서 IAM으로 직접 얻을 수 있습니다.
인증 토큰은 수명이 짧은데 수명은 15분입니다.
- 장점
- 네트워크 내외로 SSL로 암호화됩니다.
IAM은 데이터베이스 내부에서의 사용자 관리 대신 중앙에서의 사용자 관리에 사용합니다.
IAM 역할과 EC2 인스턴스 프로파일을 쉽게 통합할 수 있습니다.
정리
미사용 데이터 암호화는 데이터베이스 인스턴스를 처음 생성할 때만 실행되며 암호화되지 않았으면 스냅샷을 생성해야 합니다.
그리고 스냅샷을 복제해 암호화 한 다음에 암호화된 스냅샷에서 새 데이터베이스를 생성하면 데이터베이스를 암호화합니다.
사용자의 책임
- 모든 포트와 IP 보안 그룹, 인바운드 규칙 사용 가능한 데이터베이스의 보안 그룹을 확인합니다.
- 내부 데이터베이스의 모든 사용자 생성 및 권한을 관리합니다.
- MySQL과 PostgreSQL 용 IAM으로 관리해야 합니다.
- 퍼블릭 액세스가 있고 없는 데이터베이스를 생성해 프라이빗 서브넷이나 퍼블릭 서브넷으로 가게 합니다.
- 파라미터 그룹과 데이터베이스가 SSL 연결만 허용하도록 구성되어 암호화되는지 확인해야 합니다.
AWS의 책임
- SSH 액세스가 발생하지 않도록 합니다.
- 데이터베이스 패치나 OS 패치를 할 필요가 없습니다.
- 기본 인스턴스도 확인하지 않아도 됩니다.
Amazon Aurora
Amazon Aurora
- Aurora는 AWS의 독점 기술입니다.
- 오픈 소스는 아니지만 MySQL 및 Postgres와 호환됩니다.
- 클라우드에 최적화
- RDS의 mySQL보다 성능이 5배나 향상
- RDS의 Postgres보다는 3배 향상
- Aurora 스토리지는 자동으로 커집니다.
- 10GB ~ 128TB
- DB 또는 SysOps가 여러분이 디스크를 모니터링하지 않아도 시간에 따라 자동으로 커진다는 점입니다.
- 15개의
읽기 전용 복제본을 가지고 복제 속도도 훨씬 더 빠릅니다. MySQL은 5개예요.
- Aurora에서는 장애 조치가 즉각적으로 이루어집니다.
비용은 RDS보다 20% 정도 더 높지만, 훨씬 더 효율적이어서 규모가 클 경우, 비용 절감이 가능합니다.
Aurora의 고가용성 및 읽기 스케일링
Aurora는 쓰기 요청을 할 때 마다 6개의 데이터 복제본을 3개의 AZ에 걸쳐 저장합니다.
- 그리고
읽기 요청에는 6개 중 3개의 복제만 필요합니다.
자가 복구 과정이 있어서 어떤 데이터가 손상되거나 잘못되었을 경우에 백엔드에서 P2P 복제를 통해 자가 복구를 할 수 있어 좋습니다.
- 수백 개의 볼륨이 있습니다.

- Aurora는 RDS를 위한 다중 AZ라고 할 수 있습니다.
Aurora에 마스터가 있고 거기에 쓰기를 합니다.
- 마스터가 작동하지 않으면 평균적으로 30초 안에 장애 조치가 이루어집니다.
- 마스터 외에도 읽기를 할 수 있는 15개의 읽기 전용 복제본을 가질 수 있습니다.
- 모든 읽기 전용 복제는 마스터에 장애 발생 시 마스터를 대체할 수 있습니다.
- 읽기 전용 복제의 좋은 점은
리전 간 복제를 지원합니다.
Aurora DB 클러스터

-
Writer 엔드포인트
-
Reader 엔드포인트
- 리더 엔드포인트의 기능은 라이터 엔드포인트와 동일합니다.
- 로드 밸런싱 연결을 도와주고 모든 읽기 전용 복제본에 자동으로 연결합니다.
- 클라이언트가 리더 엔드포인트에 연결할 때마다
읽기 전용 복제본 중 하나에 연결되고 로드 밸런싱 할 수 있게 됩니다.
- 로드 밸런싱이 이루어지는 곳이 문장 수준이 아니라 연결 수준이라는 사실입니다.
Aurora 특징
- 자동 장애 조치
- 백업 및 복구 격리와 보안
- 산업 규정 준수
- 푸시 버튼 스케일링
- 다운타임 없는 자동 패치
- 확장 모니터링
- 정기 유지 보수
- 백트랙
Aurora 보안
- 보안의 경우 RDS와 유사합니다.
- KMS를 사용해 암호화합니다.
자동 백업 및 스냅샷 그리고 복제본도 암호화합니다.
- SSL을 통해 전송 중 암호화가 이루어집니다.
- IAM 토큰을 사용하는 인증도 있습니다.
보안 그룹을 사용한 인스턴스 보호는 여전히 여러분의 몫이며 인스턴스에 SSH 할 수 없습니다.
- Aurora 보안은 전부 RDS 보안과 동일합니다.
Amazon Aurora Advanced
Aurora 복제본, 오토 스케일링

Amazon 오로라 데이터베이스의 CPU 사용량이 증가했다고 합시다.
이 경우 오토 스케일링 복제본을 설정할 수 있습니다.
그렇게 하면 Amazon 오로라 복제본이 추가되고 그러면 자동으로 리더 앤드 포인트가 이 새 복제본을 포함할 수 있도록 확장될 겁니다.
이 새 복제본은 트래픽을 수신하기 시작하고 전체 CPU 사용량을 낮추기 위해 좀 더 분산된 방식으로 읽기를 수행합니다.
Aurora - 커스텀 엔드포인트

Aurora 인스턴스에서 사용자 지정 엔드 포인트를 정의한다고 하겠습니다.
그렇게 하는 이유는
이 인스턴스가 더 강력하기 때문에
특정 복제본에 대한 분석 쿼리를 실행하는 것이 더 낫기 때문입니다.
- 실무에서는 다양한 워크로드에 대한 많은 사용자 지정 앤드 포인트를 설정하여 오로라 복제본의 하위 집합만을 쿼리할 수 있습니다.
Aurora 서버리스
자동화된 데이터베이스 인스턴스화와 실제 사용을 기반으로 한 오토 스케일링을 제공합니다.
- 드물거나 간헐적이거나 예측할 수 없는 워크로드가 있을 때 유용합니다.
- 용량 계획을 수행할 필요가 없습니다.
- 훨씬 더 비용면에 효율적입니다.
Aurora 다중 마스터
라이터 노드에 대한 높은 가용성을 원하는 경우에 씁니다.
- 라이터 노드에 대한 즉각적인 장애 조치를 원하는 경우
- 모든 노드가 읽기와 쓰기 작업을 합니다.
- 이 때 쓰기 노드가 하나만 있고 다운돼서 실패하게 되면 읽기 복제본을 새로운 마스터로 승격시킵니다.
Global Aurora
- Aurora 리전 간 읽기 전용 복제본이 있다면 재해 복구에도 유용하고 아주 간단하게 구현할 수 있습니다.
- Aurora 글로벌 데이터베이스를 설정할 수도 있습니다.
- 이 경우 모든 읽기 및 쓰기가 발생하는
하나의 기본 리전이 있지만
최대 다섯 개의 보조 읽기 전용 리전을 설정할 수도 있습니다.
보조 리전당 복제본 랙이 1초 미만이어야 하고 최대 16개의 읽기 전용 복제본을 가질 수 있습니다.
- 전 세계의 읽기 전용 복제본에 대한 지연 시간을 줄일 수 있습니다.
- RTO가 있으므로 복구 시간 목표는 1분 미만이 될 겁니다.
Aurora 머신러닝
- SQL 인터페이스를 통해 애플리케이션에 ML 기반 예측을 추가할 수 있는 개념입니다.
- 오로라와 다양한 AWS 머신 러닝 서비스 간의 간단하고 최적화된 안전한 통합입니다.
- 지원되는 서비스
- SageMaker : 모든 종류의 머신 러닝 모델을 사용
- Amazon Comprehend : 감정 분석을 수행
- 머신 러닝 경험은 필요 없습니다.
- 사용 사례
- 사기 탐지, 광고 타겟팅 감정 분석, 제품 추천
Amazon ElastiCache
ElastiCache
- RDS와 동일한 방식으로 관계형 데이터베이스를 관리할 수 있습니다.
Redis 또는 Memcached 같은 캐시 기술을 관리할 수 있도록 합니다.
- Cache?
- 캐시는
높은 성능과 낮은 지연 시간을 가진 인 메모리 데이터베이스입니다.
- ElasiCache를 사용하면 읽기 집약적인 워크로드의 부하를 줄이는데 도움이 됩니다.
- 애플리케이션을 무상태(stateless)로 만들 수 있도록 합니다.
AWS는 운영 체제, 패치, 최적화와 설정, 구성, 모니터링, 장애 회복 그리고 백업을 RDS와 동일한 유지 보수를 수행합니다.
- 애플리케이션에 관한 몇 가지 어려운 코드 변경을 요청할 수도 있습니다.
ElastiCache 솔루션 아키텍쳐 - DB Cache

- RDS 데이터베이스에서 부하를 줄이는데 도움을 주는데 데이터를 캐시에 저장하기 때문에 캐시 무효화 전략이 있어야 하며 가장 최근 데이터만 사용하는지 확인해야 합니다.
ElastiCache 솔루션 아키텍쳐 - User Session Store

- 사용자 세션을 저장해 애플리케이션을 무상태로 만드는 것입니다.
Redis vs Memcached
- Redis
자동 장애 조치로 다중 AZ를 수행하는 기술입니다.
읽기 전용 복제본은 읽기 스케일링에 사용되며 가용성이 높습니다.
- 지속성으로 인해 데이터 내구성도 있으며 백업과 기능 복원 기능도 있습니다.
- Memcached
데이터 분할에 다중 노드를 사용합니다. == 샤딩
- 가용성이 높지 않습니다.
- 복제가 발생하지 않습니다.
- 지속적인 캐시가 아닙니다.
- 백업과 복원 기능도 없습니다.
- 다중 스레드 아키텍처로 몇몇 샤딩과 함께 캐시에서 함께 실행되는 여러 인스턴스가 있습니다.
Redis는 고가용성과 백업 읽기 전용 복제본 등이 있습니다.
Memcached는 데이터를 손실할 수 없는 단순한 분산 캐시입니다.
가용성이 높지 않고 백업과 복원 기능도 없습니다.
Cache Security
ElastiCache는 Redis에서만 IAM 인증을 지원하며, 나머지 경우에는 사용자 이름과 비밀번호를 사용하면 됩니다.
ElastiCache에서 정의할 IAM 정책은 AWS API 수준 보안에만 사용됩니다.
- 캐시 생성, 캐시 삭제 같은 종류의 작업을 의미합니다.
- Redis AUTH
- Redis 클러스터를 생성할 때 비밀번호나 토큰를 설정할 수 있고
이렇게 하면 캐시에 들어갈 때 비밀번호를 사용할 수 있습니다.
- 이는 캐시에 사용할 수 있는 보안 그룹에 대한 추가적인 수준의 보안입니다.
- Memcached
- EC2 인스턴스
- 자체 보안 그룹도 레디스에 액세스할 수 있는 자체 보안 그룹이 있습니다.
- 그래서 ElastiCache를 사용하여 보안 그룹 수준의 보안을 수행할 수 있습니다.
ElastiCache에 데이터를 불러오는 패턴
- Lazy Loading
- 모든 읽기 데이터가 캐시되고 데이터가 캐시에서 부실해질 수 있습니다.
- Write Through
- 데이터를 오래된 데이터가 없는 데이터베이스에 기록될 때마다 캐시에 데이터를 추가하거나 업데이트하는 것입니다.
- Session Store
- Time To Live(TTL) 속성으로 세션을 만료시킬 수 있습니다.
Redis 사용 사례

- 게임 리더보드 생성
- Redis에는 고유성과 요소 순서를 모두 보장하는 정렬된 집합이라는 기능이 있습니다.
- 요소가 추가될 때마다 실시간으로 순위가 매겨진 다음 올바른 순서로 추가됩니다.
- 모든 레디스 캐시는 동일한 리더보드를 사용할 수 있습니다.
레디스로 Amazon ElastiCache와 통신할 때 클라이언트는 이 실시간 리더보드에 액세스할 수 있고 애플리케이션 측에서 이 기능을 프로그래밍할 필요가 없습니다.
From
AWS Certified Solutions Architect Associate 시험합격!