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 시험합격!