일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- goorm x kakao
- s3
- 오블완
- goorm
- 스터디
- backenddeveloper
- CodeCommit
- QueryDSL
- 티스토리챌린지
- jpa
- mapping
- codedeploy
- codebuild
- CICD
- MSA
- rds
- Docker
- bootcamp
- Spring Boot
- orm
- 개발자
- serverless
- sqs
- spring
- nosql
- DynamoDB
- 자격증
- Redis
- data
- aws
- Today
- Total
gony-dev 님의 블로그
Section 22. AWS Serverless: DynamoDB - 2 본문
DynamoDB - Optimistic Locking
- 낙관적 잠금 기능은 조건부 쓰기를 수행한다.
- 이는 업데이트나 삭제 전에 항목이 변경되지 않게 하는 것이다.
- 각 항목들은 버전 번호로써 역할을 수행하는 속성을 갖게 된다.
DynamoDB Accelerator(DAX)
- DAX는 DynamoDB에서 완전 관리형, 고가용성, 무결절성 인 메모리 캐시이다.
- 캐시된 읽기와 쿼리에 마이크로초의 지연이 발생한다.
- 이는 어플리케이션 로직에 어떤 변경을 요청하지 않고 존재하는 DynamoDB API에 호환된다.
- 우리는 DAX를 통해 "Hot Key" 문제를 해결할 수 있다.
- Hot Key | 특정 키나 항목을 너무 많이 읽으면 RCU에 스로틀이 생기는 문제
- TTL은 캐시에서 기본 5분이다.
- 클러스터에는 최대 10개의 노드를 가질 수 있고, 노드가 최소 3개 이상인 다중 AZ 설정을 사용하는 것이 좋다.(AZ당 하나)
- DAX는 완벽히 안전하고 미사용 시에는 암호화가 진행된다.
DAX는 가장 인기있는 항목이나 쿼리의 캐시를 용이하게 만든다!
DynamoDB Accelator (DAX) vs. ElastiCache
- 이 둘의 차이점은 결합의 여부이다.
- DAX
- 쿼리, 스캔이나 개별 객체에 관한 캐시를 갖게 된다.
- ElastiCache
- 어플리케이션 로직 측면에서 작업을 하는 경우는 스캔이나 SUM을 사용하거나 데이터 필터링 등을 수행하는데 이는 비용이 많이 들어 지양하고 있다.
- 그래서 ElastiCache를 사용하여 어플리케이션의 모든 결과를 저장한다.
- DAX를 다시 쿼리하고 클라이언트에서 종합하지 않아도 된다!
DynamoDB Streams
- 스트림은 테이블에서 발생하는 create/update/delete 같은 항목 수준 수정의 정렬된 목록입니다.
- 테이블의 전체 수정 사항 목록을 나타내기도 한다.
- 스트림 레코드는 다음과 같은 작업들을 수행할 수 있다.
- Kinesis Data Streams로 보내기
- AWS Lambda에서 읽기 수행
- Kinesis Client Library applications에서 읽기 수행
- DynamoDB 스트림의 최대 읽기 수행 시간은 24시간이다.
- 더 오래 보관하고 싶다면 Kinesis Data Streams이나 Lambda에 보내면 된다.
DynamoDB Architecture
Streams을 사용하기 위히 필요한 것들
- 우선 스트림에는 표시할 정보를 선택할 수 있는 기능이 있다.
- KEYS_ONLY | 오로지 수정된 모든 키 속성의 리스트를 보여준다.
- NEW_IMAGE | 수정된 새 항목
- OLD_IMAGE | 수정 전의 모든 항목
- NEW_AND_OLD_IMAGES | 새롭고 오래된 항목의 이미지들을 가져옴
- DynamoDB 스트림은 샤드로 구성되어 있고, 이는 Kinesis Data Streams와 비슷하다.
- 스트림의 장점은 샤드를 프로비저닝하지 않고 AWS에서 자동화된다는 것이다!
DynamoDB 스트림은 사용할 때 레코드는 스트림에 소급에서 보낼 수 없다는 점을 주의하자!
DynomoDB - TTL
TTL은 타음스탬프 만료 이후에 자동으로 항목을 삭제할 수 있다.
이는 삭제될 아이템이 있어도 WCU를 소모하지 않는다.
타임스탬프는 값을 나타내는 숫자여야 하며, 만료된 항목들은 48시간 이내에 삭제된다.
아직 삭제되지 않은 만료된 항목들은, 읽기와 쿼리, 스캔에 나타나게 된다. 따라서 만료된 항목이 쿼리에 있을 수도 있다.
만료된 항목들은 LSI과 GSI 양쪽 모두에서 삭제된다.
DynamoDB - CLI
1. CLI에 대해 알아두면 좋은 점
- --projection-expression | 하나 이상의 속성을 지정하여 가져올 수 있다.
- --filter-expression | 사용자에게 반환하기 전에 항목을 필터링한다.
- 일반적인 AWS CLI 페이지네이션 옵션을 알아보자
- --page-size | 데이터 세트를 모두 가져오면서도 각 서브 API가 AWS에 보내는 호출은 적어진다.(batch size와 유사!)
- --max-items | CLI에서 보여주기 위한 아이템의 최대 개수
- --starting-token | 다음 세트의 아이템들을 지정하기 위한 최근 NextToken을 식별한다.
DynamoDB - Transaction
트랜잭션을 사용하면 하나 이상의 테이블에 컬쳐 여러 아이템에 양단간 작업(add/update/delete)을 할 수 있게 된다.
트랜잭션은 원자성, 일관성, 격리와 영속성을 제공한다.(ACID라 불림)
읽기와 쓰기 두가지 모드가 적용이 되는데 이를 알아보자.
- Read Modes | 최종 일관성, 강력 일관성, 트랜잭션 일관성으로 세가지 모드가 있다.
- Write Modes | 표준, 트랜잭션 기능이 있다.
트랜잭션은 용량 단위의 두 배를 소비한다.(WCU나 RCU를 쓸 때 x2가 된다는 의미)
두 가지 트랜잭션의 작업 기능을 알아보자.
- TransactGetItems | 하나 이상의 GetItem 작업을 실행
- TransactWriteItems | 하나 이상의 PutItem, UpdateItem, DeleteItem 작업을 실행 한다.
1. Capacity Computations
- 시험에 나오는 부분이니 주의!
- 예시로 초당 3번의 트랜잭션 쓰기를 하려는데 아이템 크기는 5KB이다. 필요한 WCU는?
- 3 * 5 * 2(transaction은 x2이기 때문) = 30 WCUs
DynamoDB as Session State Cache
- DynamoDB의 흔한 활용 사례로 ElastiCache에서도 본 적이 있을 것이다.
- vs. ElastiCache
- ElastiCache는 인 메모리 형식이지만 DynamoDB는 서버리스(Auto Scaling)이다.
- 둘다 키-값 형식인 것은 동일하다.
- vs. EFS
- EFS는 네트워크 드라이브로서 EC2 인스턴스에 부착되어야만 한다.
- EFS는 파일 시스템이고, DynamoDB는 데이터 베이스인 것이 차이이다.
- vs. EBS & Instance Store
- EBS & Instance Store은 캐싱을 공유하는 것이 아닌 로컬 캐싱에만 사용될 수 있다.
- vs. S3
- S3는 지연 시간이 길지만, 그것은 작은 객체가 아니라 큰 파일에 해당되므로 상태 저장 캐시로 사용하는 것은 적절하지 않다.
결론은 DynamoDB와 ElastiCache가 제일 적절하다!
DynamoDB - Partitioning Strategy
- 사용자가 후보자A와 후보자B인 두 후보자들을 가지고 투표 어플리케이션을 이용한다고 가정하자
- 만일 파티션키가 "Candidate_ID"라면, 두 파티션에 Hot Partition을 발생시키게 된다.
- 이를 해결할 방법은 전 파티션에 걸쳐 고르게 후보자 ID를 배분하는 것이다.
- 접미사나 접두사를 만드는 데에는 두 가지 방법이 있다.
- 랜덤한 접미사를 사용하기
- 해싱 알고리즘 사용하기
DynamoDB - Pattern with using S3
1. Large Objects Pattern
- 큰 객체를 저장하는 방법에 대해 알아보자.
2. Indexing S3 Objects Metadata
- S3 객체를 람다에 저장하고 DynamoDB에 저장하는 방법을 알아보자.
DynamoDB Operations
1. Table Cleanup
- Option 1 | Scan + DeleteItem(테이블의 모든 아이템을 스캔 후 하나씩 지우는 방법)
- Option 2 | Drop Table + Recreate table(테이블 삭제 후 재생성)
2. Copying a DynamoDB Table
- Option 1 | AWS Data 파이프라인을 사용
- 파이프 라인은 EMR을 실행하면, EMR이 DynamoDB에서 데이터를 읽어와 S3에 쓴다. 다음 단계로 S3에서 다시 데이터를 읽어오고 그것을 새로운 DynamoDB 테이블에 삽입하게 되는 과정을 겪는다.
- Option 2 | 백업하고 새로운 테이블에 복구
- Option 3 | Scan + PutItem or BatchWriteItem
DynamoDB - Security & Other Features
1. Security
- 보안에 관련해서는 VPC 엔드포인트가 존재한다. VPC 엔드포인트는 DynamoDB에 인터넷 없이도 액세스하게 해주며 모든 트래픽은 VPC내에 보관된다.
- DynamoDB의 액세스는 IAM에 의해 완전 관리된다.
2. Backup and Restore feature available
- 백업 및 복구에는 두 가지가 있다.
- 1. Point-in-time Recovery like RDS
- 2. No Performance impact
3. Global Tables
- DynamoDB에는 다수 리전에 다수 활성화가 가능하며 복제 가능한 고성능의 테이블이 있다.
- 이를 위해서는 DynamoDB 스트림으로부터 활성화를 해야한다.
4. DynamoDB Local
- 사용자는 로컬에서 DynamoDB 시뮬레이션을 실행할 수 있다.
- 웹 서비스 없이도 어플리케이션을 개발하고 테스트하는데에 사용이 가능하다.
'AWS' 카테고리의 다른 글
Section 24. AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy - 1 (1) | 2024.11.21 |
---|---|
Section 23. AWS Serverless: API Gateway (0) | 2024.11.15 |
Section 22. AWS Serverless: DynamoDB - 1 (1) | 2024.11.07 |
Section 21. AWS 서버리스: Lambda - 2 (2) | 2024.11.05 |
Section 21. AWS 서버리스: Lambda - 1 (2) | 2024.11.03 |