참고 자료
https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/
Choosing the Right Database
- AWS에는 선택할 수 있는 다양한 관리형 데이터베이스가 있다
- 무엇을 선택지는 어떤 아키텍처를 요구하는지에 따라 다르다:
- 읽기 중심인지, 쓰기 중심인지, 혹은 균형이 맞는 워크로드인지, 처리량은 얼마나 되는지, 그 처리량이 하루에 얼마나 달라지는지, 확장이 필요한지, 하루에 얼마나 달라지는지?
- 저장해야 할 데이터의 양은 얼마나 되고 얼마 동안 보관하애 하는지, 데이터는 계속 증가하는지, 평균 객체의 크기는 어떻게 되는지, 데이터 액세스 빈도와 액세스 방법은 무엇인지?
- 데이터 내구성은 어떤지, 데이터의 공급원은 무엇인지?
- 지연 시간 요구 사항은 어떻게 되는지, 동시 사용자는 얼마나 되는지?
- 데이터 모델은 어떻게 되는지, 데이터를 어떻게 쿼리할 것인지, 조인이 필요한지, 정형인지, 반정형인지?
- 강력한 스키마가 필요한지, 유연성이 필요한지, 데이터베이스 관련 보고가 필요한지, 검색 기능이 필요한지, 관계형 데이터베이스와 NoSQL 중 무엇이 필요한지?
- 라이센스 비용이 드는지, Aurora와 같은 클라우드 네이티브 데이터베이스로 전환할 계획이 있는지?
Database Types
- RDBMS (= SQL / OLTP): RDS, Aurora - Join에 유용
- NoSQL database – no joins, no SQL: : DynamoDB (~JSON), ElastiCache (키/값 쌍), Neptune (그래프), DocumentDB (MongoDB용), Keyspaces (Apache Cassandra용)
- 객체 스토어: S3 (대용량 객체용) / Glacier (백업/아카이브용)
- 데이터 웨어하우스 (= SQL 분석 / BI): Redshift (OLAP), Athena, EMR
- 검색: OpenSearch (JSON) - 자유로운 텍스트 입력 및 비정형 데이터 검색
- 그래프: Amazon Neptune - 데이터 세트 간의 관계 표시
- 원장: Amazon Quantum Ledger Database
- 시계열: Amazon Timestream
RDS
- 관리형 PostgreSQL / MySQL / Oracle / SQL Server / MariaDB / 사용자 지정 RDS
- RDS 인스턴스 크기 및 EBS 볼륨 유형 및 크기를 프로비저닝해야 함
- 스토리지 오토스케일링 기능
- 읽기 용량 확장을 위해 읽기 전용 복제본 및 다중 AZ 지원
- IAM - RDS 데이터베이스 보안 / 보안 그룹 - 네트워크 보안 / KMS - 저장 데이터 암호화 / SSL & TLS - 전송 데이터 암호화
- 자동 백업 옵션 (최대 35일까지), 지정 시간 복구 기능
- 장기 보존 백업을 위한 수동 DB 스냅샷
- 유지 관리 기능을 예약할 수 있음 (다운타임 발생 - 프로비저닝하거나 AWS가 데이터베이스 엔진을 주기적으로 업데이트하고 기본 EC2 인스턴스에 보안 패치를 실행할 때 발생)
- RDS 프록시를 강제하여 RDS에 IAM 인증 추가, Secret Manager와 통합하여 DB 자격 증명
- Oracle 및 SQL Server의 기본 인스턴스 액세스 및 사용자 지정을 위한 RDS 사용자 지정 옵션
- 사용 사례: 관계형 데이터 세트 저장 (RDBMS / OLTP), SQL 쿼리 및 트랜잭션 수행
Aurora
- PostgreSQL / MySQL과 호환되는 API, 컴퓨팅과 스토리지가 분리되어 있음
- 스토리지: 데이터는 3개의 가용 영역에 걸쳐 6개의 복제본에 저장됨 - 고가용성, 자가 복구 처리, 오토 스케일링 기능
- 컴퓨팅: 클러스터화된 실제 데이터베이스 인스턴스를 여러 가용 영역에 걸쳐 저장, 읽기 전용 복제본의 오토 스케일링
- 클러스터: 읽기와 쓰기를 위한 DB 인스턴스에 대한 사용자 지정 엔드 포인트
- RDS와 동일한 보안 / 모니터링 / 유지 관리 기능
- Aurora의 백업 및 복구 옵션
- Aurora Serverless: 예측할 수 없는 / 간헐적인 워크로드에 적합, 용량 계획을 하지 않아도 됨
- Aurora Multi-Master: 쓰기 고가용성을 위해 쓰기 장애 조치가 지속해서 필요할 때 사용 - DB 인스턴스 여러 개가 스토리지에 쓰기를 할 수 있도록 설정 가능
- Aurora Global: 데이터가 복제된 리전마다 최대 16개의 데이터베이스 읽기 전용 인스턴스 제공, 리전 간 스토리지 복제에 걸리는 시간 1초 미만
- Aurora Machine Learning: Aurora에서 SageMaker 및 Comprehend를 사용하여 머신 러닝 수행
- Aurora Database Cloning: 스냅샷 복원보다 기존 클러스터에서 새로운 클러스터 생성이 더 빠름
- 사용 사례: RDS와 동일하지만 더 적은 유지 보수/더 큰 유연성/더 높은 성능/더 많은 기능
ElastiCache
- 관리형 Redis / Memcached (RDS와 비슷한 기능 제공, 캐싱 작업에 활용)
- 인메모리 데이터 스토어, 데이터를 읽을 때 1밀리초 미만의 지연 시간 제공
- 캐시를 위한 EC2 인스턴스 유형을 프로비저닝 해야 함 (ex. cache.mg6.large)
- Redis용 클러스터 생성, 다중 AZ, 샤딩을 위한 읽기 전용 복제본 사용 가능
- IAM, 보안 그룹, KMS, Redis 인증을 통한 보안
- 백업, 스냅샷, 지정 시간 복구 기능
- 관리형 및 예약된 유지 관리 가능
- 애플리케이션 코드가 ElastiCache를 활용하도록 코드를 수정해야 함
- 코드 변경이 필요 없는 캐싱 솔루션을 물을 땐 ElastiCache는 정답이 될 수 없음!
- 사용 사례: 키-값 스토어, 가 높은 읽기, 적은 쓰기, DB 쿼리 결과를 캐싱, 웹 사이트의 세션 데이터 저장, SQL 사용 불가능
DynamoDB
- AWS의 독점 기술, 관리형 서버리스 NoSQL 데이터베이스, 밀리초 수준의 지연 시간 제공, SQL 쿼리 사용 불가
- 용량 모드:
- 선택형 오토 스케일링이 탑재된 프로비저닝된 용량 모드 - 점진적으로 늘어나거나 점진적으로 줄어드는 이중(double) 워크로드가 있을 때 유용
- 온디맨드 용량 모드 - 용량 프로비저닝 필요 없음. 오토 스케일링이 실행되므로 워크로드를 예측하기 어려울 때나 데이터베이스의 수요가 급증할 때 유용
- ElastiCache 대신 DynamoDB에 키-값을 저장할 수 있음 (ex. 웹사이트 세션 데이터 저장, TTL 기능 사용)
- 고가용성, 기본적으로 다중 가용 영역에 걸쳐있기 때문, 읽기와 쓰기가 완전히 분리되어 있고 트랜잭션 기능 제공
- 읽기 캐시용 DAX 클러스터, 마이크로초 읽기 지연 시간
- 보안, 인증, 권한 부여는 IAM을 통해 처리
- 이벤트 처리: AWS Lambda 또는 Kinesis Data Streams와 통합하기 위한 DynamoDB Streams
- GlobalTable 기능: 어느 리전에서든 읽고 쓸 수 있음, 다중 활성 (active-active)
- 백업 옵션:
- PITR을 사용한 최대 35일까지의 자동 백업 - 새 테이블로 복원
- 온디맨드 백업
- PITR 창 내에서 RCU(읽기 용량 단위)를 사용하지 않고 S3로 내보내기(export), WCU(쓰기 용량 단위)를 사용하지 않고 S3에서 가져오기(import)
- 스키마를 빠르게 전개할 때 유용
- 사용 사례: 400KB 미만의 문서를 다루는 작은 서버리스 애플리케이션 개발, 서버리스 캐시 분산
S3
- 객체를 키-값으로 저장
- 큰 객체를 저장할 때는 유용, 여러 개의 작은 객체를 저장할 때는 유용하지 않음
- 서버리스이며 무한한 확장이 가능. 객체의 최대 크기는 5TB, 버전 관리 기능 제공
- 계층: S3 Standard, S3 Infrequent Access, S3 Intelligent, S3 Glacier / 계층을 전환하려면 수명 주기 정책 사용
- 기능: 버저닝, 암호화, 복제, MFA-Delete, 액세스 로그
- 보안: IAM, 버킷 정책, ACL, 액세스 포인트, S3 Object Lambda를 사용해 객체를 애플리케이션에 전송하기 전에 수정 가능, CORS, Glacier의 객체/볼트 잠금
- 암호화: SSE-S3, SSE-KMS, SSE-C, 클라이언트 측 암호화, 전송 중 TLS, S3 버킷에 기본 암호화 설정 가능
- S3 Batch를 사용한 일괄 작업, S3 인벤토리를 사용한 파일 목록 조회
- 성능: 멀티파트 업로드, S3 Transfer Acceleration, S3 Select
- 자동화: S3 Event Notifications (SNS, SQS, Lambda, EventBridge)
- 사용 사례: 정적 파일, 큰 파일을 위한 키-값 저장소, 웹사이트 호스팅
DocumentDB
- Aurora는 PostgreSQL / MySQL의 "AWS 구현"인 것처럼 DocumentDB는 NoSQL 데이터베이스인 MongoDB(NoSQL)에 대한 "AWS 구현"
- MongoDB는 JSON 데이터를 저장, 쿼리 및 인덱싱하는 데 사용
- Aurora와 유사한 "배포 개념"을 가지고 있음
- 완전히 관리되며, 3개의 가용 영역 간 복제로 높은 가용성을 제공
- DocumentDB 스토리지는 자동으로 10GB 단위로 증가하여 최대 64TB까지 확장
- 초당 수백만건의 요청이 있는 워크로드로 확장될 수 있도록 설계됨
Neptune
- 완전 관리형 그래프 데이터베이스
- 소셜 네트워크는 우리가 아는 가장 일반적인 그래프 데이터세트이다.
- 사용자는 친구가 있음
- 게시글에는 댓글이 있음
- 댓글에는 좋아요가 있음
- 사용자는 게시글을 공유하고 좋아요를 누름
- 3개의 가용 영역에서 최대 15개의 읽기 복제본을 사용하여 높은 가용성을 제공함
- 복잡하고 어려운 쿼리에 최적화된, 높은 연결성을 가진 데이터 세트를 사용하여 애플리케이션을 빌드하고 실행할 수 있음
- 수십억 개의 관계를 저장하고 밀리초 지연 시간으로 그래프를 쿼리할 수 있음
- 여러 가용 영역에 복제하여 높은 가용성을 제공
- 지식 그래프 (위키피디아), 사기 탐지, 추천 엔진, 소셜 네트워킹에 적합
Keyspaces (for Apache Cassandra)
Apache Cassandra는 오픈 소스 NoSQL 분산 데이터베이스이고 Keyspaces는 AWS의 관리형 Apache Cassandra를 보조한다.
- Apache Cassandra 호환 데이터베이스 서비스
- 서버리스 서비스, 확장성과 가용성이 높으며 AWS 완전 관리형
- 애플리케이션의 트래픽에 기반하여 테이블을 자동으로 확장 / 축소 함
- 테이블은 여러 가용 영역에 걸쳐 3번 복제됨
- Cassandra Query Language (CQL) 사용
- 어떤 규모에서도 지연 시간이 10밀리초 미만으로 짧고 초당 수천 건의 요청을 처리함
- 용량: 온디맨드 모드 또는 오토 스케일링이 있는 프로비저닝 모드 (DynamoDB와 같음)
- 암호화, 백업, 최대 35일까지의 시점 복구 (PITR)를 지원
- 사용 사례: IoT 디바이스 정보, 시계열 데이터 등을 저장
QLDB
- QLDB: Quantum Ledger Database
- 원장(ledger)은 금융 트랜잭션(거래)을 기록하는 장부이다.
- 완전 관리형, 서버리스, 고가용성, 3개의 가용 영역에 걸쳐 데이터 복제
- 시간에 따라 애플리케이션 데이터에 대한 변경 내역을 모두 검토하는 데 사용됨
- 변경 내역은 수정 또는 제거할 수 없으며, 암호화를 통해 검증할 수 있는 불변(Immutable) 시스템
- 일반적인 원장 블록체인 프레임워크보다 2~3배 더 좋은 성능을 가지며, SQL을 사용하여 데이터를 관리할 수 있음
- Amazon Managed Blockchain과의 차이점: 탈중앙화 개념이 없으며, 금융 규정에 따라 운영됨
Timestream
- 완전 관리형, 확장성이 있는 서버리스 방식의 시계열 (time series) 데이터베이스
- 용량을 조정하기 위해 자동으로 확장/축소
- 하루의 수조 건의 이벤트를 저장하고 분석할 수 있음
- 관계형 데이터베이스 대비 1000배 빠르며 비용은 1/10
- 예약된 쿼리, 다중 척도 레코드, SQL 호환성
- 데이터 저장 계층: 최근 데이터는 메모리에 저장, 과거 데이터는 비용 효율적인 스토리지 계층에 저장
- 내장된 시계열 분석 기능을 제공하여 데이터의 패턴을 거의 실시간으로 식별할 수 있음
- 전송 중 데이터와 저장 데이터의 암오화 지원
- 사용 사례: IoT 애플리케이션, 운영 애플리케이션, 실시간 분석 등
Timestream - Architecture