DynamoDB
DynamoDB는 프로비저닝, 패치, 혹은 관리할 서버가 없고 설치, 유지 및 운용해야 할 소프트웨어가 없는 서버리스 서비스입니다. DynamoDB는 용량 조정 및 성능 유지를 위한 테이블의 확장 및 축소를 자동으로 스케일링합니다. 이는 프로비저닝(RCU & WCU 지정) 및 온디맨드 (사용한 만큼의 비용 책정) 용량 모드 모두를 제공합니다.
DynamoDB
- 완전 관리형 데이터베이스로 데이터가 자동으로 다중 AZ 간에 복제되므로 가용성이 높습니다
- NoSQL 데이터베이스
- 트랜잭션 지원기능이 있습니다.
- 대량 워크로드로 확장할 때 사용합니다.
- 분산형 데이터베이스라 수평 확장을 하며 용량이 뛰어나요.
- Millions of requests per sec, trillions of row, 100s of TB
- 성능이 빠르고 일관적이라서내부에서 프로비저닝을 많이 할 필요도 없습니다.
- DynamoDB API는 IAM과 완전 통합 (보안, 권한 부여, 관리 기능이 포함)
- DynamoDB Stream은 이벤트 기반 프로그래밍에도 적합합니다.
- 용량 요구사항과 관련하여 저렴한 가격 및 오토 스케일링 능력
Standard와 Infrequent Access(IA) 테이블 클래스
DynamoDB - Basics
- 테이블로 구성됨.
- 데이터베이스를 따로 생성할 필요가 없습니다. (이미 존재)
- 각 테이블에 기본 키가 있고 이는 테이블 생성 시 결정됩니다.
- 각 테이블의 행이
무한합니다.
- 각 아이템(행)에는 속성이 있으며 간단하게는 이 속성이 바로 열이 됩니다.
- 열은 시간에 따라 추가될 수 있습니다. (비교적 쉽게)
- null가능
- DynamoDB의 최대 아이템 크기는 400KB입니다.
- 즉 DynamoDB는 큰 객체를 저장하기에 좋지 않습니다.
- 데이터의 유형과 구성 면에서 스키마를 빠르게 전개해야 할 때 DynamoDB를 사용하면 아주 좋습니다
- DynamoDB가 지원하는 데이터
- 문자열
- 숫자
- 바이너리
- Boolean
- NULL
- 리스트
- Map
- 문자열 세트
- 숫자 세트
- 바이너리 세트
DynamoDB 구조

읽기/쓰기 용량 모드
- 테이블의 용량을 제어하는 방법
- 프로비저닝 모드
- 기본값
- 테이블에 필요하다고 생각되는 초당 읽기 및 쓰기의 횟수를 미리 지정하는 겁니다.
- 사전에 용량을 계획하는 것
- 프로비저닝한 만큼 과금
- 매달 지불할 비용은 프로비저닝한
RCU와 WCU의 양만큼 달라집니다.
- 또한 RCU와 WCU에 대해 오토 스케일링이 가능합니다.
- 온 디맨드 모드
- 워크로드에 따라 자동으로 읽기와 쓰기를 스케일 업/다운합니다.
- 읽기 용량 단위나 쓰기 용량 단위가 없고 모든 읽기와 쓰기를 자동으로 허용하죠.
- 훨씬 비싸서 프로비저닝 모드 비용의 두 세배는 될 정도입니다.
- 아주 예측하기 힘든 워크로드에 사용합니다.
DynamoDB Accelerator (DAX)
DynamoDB Accelerator 즉 DAX는 DynamoDB를 위한 고가용성의 완전 관리형 무결절 인메모리 캐시로 DynamoDB 테이블에 읽기 작업이 많을 때 DAX 클러스터를 생성하고 데이터를 캐싱하여 읽기 혼잡을 해결합니다.

- 완전 관리형 고가용성 무결절성 인메모리캐시
Microseconds의 지연시간을 제공
- DAX 클러스터는 기존 DynamoDB API와 호환되므로 애플리케이션 로직을 변경할 필요가 없습니다.
데이터 인덱스는 기본 TTL은 5분으로 5분간 저장되고 시간이 지나면 데이터는 만료되며 DynamoDB에서 새로고침이 됩니다.
DynamoDB의 데이터를 빠르게 저장하고 읽는 애플리케이션이 필요한데 애플리케이션 로직을 못 변경하는 상황을 제시한다면 DAX
DAX와 ElastiCache

두 서비스는 상호 보완적인 성격을 띕니다 Amazon DynamoDB에 캐싱 솔루션을 추가할 때는 보통 DynamoDB Accelerator 즉 DAX를 사용합니다.
DynamoDB Streams
DynamoDB에서는 스트림 처리도 가능합니다. 테이블의 모든 수정 사항
즉, 생성, 업데이트, 삭제를 포함한 스트림을 생성할 수 있습니다

- 사용 사례:
- 실시간으로 변경 사항에 대응(사용자에게 이메일 환영)
- 실시간 사용량 분석
- 파생 테이블에 삽입
- 지역 간 복제 구현
- DynamoDB 테이블 변경 시 AWS Lambda 호출
DynamoDB Streams
- 24시간 보존
- 제한된 소비자 수
- AWS Lambda 트리거 또는 DynamoDB 스트림 Kinesis 어댑터를 사용하여 처리
Kinesis Data Streams(최신)
-
1년 보존
-
많은 소비자 수
-
AWS Lambda, Kinesis Data Analytics, Kineis Data Firehose, AWS Glue Streaming ETL을 사용하여 처리...
-
테이블의 항목 수정을 표시하는 정렬된 데이터 스트림
-
항목을 생성하고 업데이트 및 삭제할 때마다 DynamoDB Stream으로 이동합니다.
-
Stream record
- Kinesis Data Streams 에 보냅니다.
- Kinesis Data Stream Lambda에서 읽을 수 있습니다.
-
최대 24시간 동안 보존되며 원하면 빠른 처리가 가능합니다.
-
사용 :
- 데이터 실시간 변화에 대응
- 분석
- 파생 테이블을 DynamoDB에 삽입
- ElasticSearch에 삽입
- 리전 간 복제
DynamoDB Global Tables

- 여러 리전에 걸쳐 데이터를 이용할 때 지연 시간을 줄이려고 하는 겁니다.
- 다중 활성 복제
- 애플리케이션이 모든 리전에서 테이블을 읽고 쓸 수 있습니다.
- 글로벌 테이블을 활성화하려면 꼭 필요한 전제 조건이 바로
DynamoDB Stream인데 변경 로그 업데이트 덕분에 각 테이블이 서로를 업데이트하며 양방향 복제가 가능합니다.
DynamoDB – Time To Live (TTL)

Time To Live (TTL)를 사용하면 타임스탬프 만료 후에 자동으로 아이템을 삭제할 수 있습니다.
- 테이블 크기 통제가 가능합니다.
- 규제 의무가 있어서 특정 테이블의 데이터를 7일만 보관해야 하는 경우 사용할 수 있겠지요.
- 웹 세션 핸들링할 때 자주 사용합니다.
- 사용자가 웹사이트에 로그인했을 때 해당 세션을 중앙 저장소인 DynamoDB에 두 시간 동안 저장. 세션 데이터를 저장하면 모든 애플리케이션이 액세스할 수 있고 두 시간 후에 세션이 갱신되지 않으면 만료되어 해당 테이블에서 삭제
DynamoDB – 재해복구를 위한 백업
- 특정 시점 복구(PITR)를 사용한 지속적인 백업
- 지난 35일 동안 선택적으로 활성화
- 백업 윈도우 내 임의의 시점으로 시점 복구
- 복구 프로세스는 새 테이블을 생성합니다.
- 주문형 백업
- 명시적으로 삭제될 때까지 장기 보존을 위한 전체 백업
- 성능이나 지연 시간에 영향을 주지 않음
- AWS Backup에서 구성 및 관리 가능(지역 간 복사 가능)
- 복구 프로세스는 새 테이블을 생성합니다.
DynamoDB - Indexes
- GSI와 LSI 두 가지가 있는데 각각
글로벌 보조 인덱스와 로컬 보조 인덱스입니다.
- DynamoDB 테이블의 인덱스는기본 키 말고도 여러 속성에 쿼리를 수행할 수 있습니다.
DynamoDB – Amazon S3와 통합

- S3로 내보내기(PITR을 활성화해야 함)
- 지난
35일 중 어느 시점에서든 작동
- 테이블의 읽기 용량에 영향을 미치지 않습니다.
- DynamoDB 위에서
데이터 분석 수행
- 감사를 위한 스냅샷 보관
- DynamoDB로 다시 가져오기 전에 S3 데이터의 ETL의 상단
- DynamoDB
JSON 또는 ION 형식으로 내보내기
- S3로 가져오기
- ImportCSV, DynamoDBJSON 또는 ION 형식
- 쓰기 용량을 소모하지 않습니다.
- 새로운 테이블 생성
- 가져오기 오류는 CloudWatchLogs에 로그인됩니다.
DynamoDB - Transactions

- *트랜잭션을 통해 동시에 두 테이블에 쓰거나 아무 테이블에도 쓰지 않을 수 있습니다.
Amazon API Gateway

Amazon API Gateway
Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다.
- API Gateway는 AWS의 서버리스 서비스로 REST API를 생성할 수 있으므로 클라이언트가 퍼블릭 액세스할 수 있습니다.
- API Gateway에 클라이언트가 직접 소통하며 다양한 작업을 할 수 있고 Lambda 함수에 요청을 프록시합니다.
- AWS Lambda + API Gateway
- WebSocket 프로토콜도 지원합니다. (실시간성)
- API Gateway가 API 버전 관리를 맡습니다.
- 개발 및 테스트, 운영 환경도 관리합니다.
- API Gateway 보안 활성을 위한 수단이 많습니다.
- API 키를 생성하거나 쓰로톨링을 조절합니다.
- Swagger, Open API 3.0 등일반적인 스탠다드를 이용해 정의된 API를 빠르게 가져오고 내보낼 수도 있습니다.
- 요청과 응답을 변형하거나 유효화할 수 있습니다.
- SDK와 API 사양을 생성하고 API 응답을 캐시에 저장하기도 합니다.
- 애플리케이션 로드 밸런서 같은 간단한 서비스와 달리 API Gateway에는 다양한 기능이 있습니다.
API Gateway – 높은 수준의 통합
- Lambda 함수
- 람다 함수 호출합니다.
- 람다 함수가 지원하는 REST API를 노출하는 제일 간단하고 흔한 방법입니다.
- HTTP
- 백엔드의 HTTP 엔드 포인트도 노출할 수 있습니다.
온프레미스 HTTP API, 클라우드 환경에 있는 애플리케이션 로드 밸런서
비율 제한과 캐싱 사용자 인증, API 키를 이용할 수 있습니다.
- AWS Service
- API Gateway로 어떤 AWS API든 노출 가능합니다.
- 예: AWS Step Function 워크플로 시작, SQS에 메시지 게시
- 인증을 추가하고 API를 공용으로 배포하거나 AWS 서비스상 비율 제어를 위해서 입니다.

API Gateway Endpoint 방식
- Edge-Optimized (default)
- 엔드 포인트 타입
- 글로벌 클라이언트를 위한 것
- 모든 CloudFront 엣지 로케이션에서 요청 라우팅으로 지연 시간을 개선합니다.
- API 요청은 가장 가까운 CloudFront 엣지 로케이션으로 라우팅되며, 이는 지연 시간을 향상시킵니다.
- API Gateway는 여전히 하나의 AWS 리전에 존재합니다.
- 리전 배포
- 모든 사용자가 API Gateway를 생성한 리전이 있으면 직접 배포 플랫폼을 마련해도 좋습니다.
- 캐싱 전략과 CloudFront 설정을 더 잘 제어할 수 있습니다.
- Private 배포
- 개인 API Gateway는 VPC를 통해서만 액세스가 됩니다.
- 인터페이스 VPC 엔드 포인트를 ENI에 사용합니다.
- 리소스 정책을 이용해 API Gateway 액세스를 정의합니다.
API Gateway – Security
- 사용자 인증(User Authentication)
- IAM 역할(내부 애플리케이션에 유용)
- Cognito(외부 사용자의 ID - 모바일 사용자의 예)
- Amazon Cognito를 사용하면 웹 및 모바일 앱에 사용자 가입, 로그인 및 액세스 제어를 쉽고 빠르게 추가할 수 있습니다
- Custom Authorizer(자체 논리)
- 도메인 이름 HTTPS 보안(Custom Domain Name HTTPS)
- AWS Certificate Manager(ACM)와의 통합을 통한 사용자 지정
- Edge-Optimized Endpoint를 사용하는 경우 인증서는
us-east-1에 있어야 합니다.
- 리전 endpoint를 사용하는 경우 인증서는 API 게이트웨이 지역에 있어야 합니다.
- Route 53에서 CNAME 또는 A-alias 레코드를 설정해야 합니다.
AWS Step Functions

- Lambda 기능을 오케스트레이션하는 서버리스 시각적 워크플로 구축
- 기능: 시퀀스, 병렬, 조건, 타임아웃, 오류 처리, ...
- EC2, ECS, 온프레미스 서버, API 게이트웨이, SQS 대기열 등과 통합 가능...
- 사람 승인 기능 구현 가능성
- 사용 사례: 주문 이행, 데이터 처리, 웹 애플리케이션, 모든 워크플로우
AWS Certified Solutions Architect Associate 시험합격!