DynamoDB를 사용해 본적은 없지만 나중에 DynamoDB를 사용할때 참고하려고 개념만 먼저 정리해보려한다.
DynamoDB란
Amazon DynamoDB는 서버리스, NoSQL 기반의 완전관리형 데이터베이스로, 높은 가용성과 확장성을 특징으로 한다. 분산형 아키텍처를 기반으로 수평 확장이 가능하며, 여러 가용 영역(AZ)에 데이터를 자동으로 복제하여 안정성과 복원력을 확보할 수 있다. 초당 수백만 건의 요청을 처리할 수 있을 만큼 성능이 뛰어나며, 테이블의 행 수나 저장 용량에 제한이 없다. 읽기 및 쓰기 요청에 대한 지연 시간은 10밀리초 미만으로, 빠르고 일관된 응답 속도를 제공한다.
DynamoDB Basics
DynamoDB 테이블을 생성할 때는 반드시 primary key를 정의해야 하며, 이는 단일 partition key 또는 partition key와 sort key의 조합으로 구성될 수 있다.
DynamoDB는 schema-less 구조를 갖기 때문에, 테이블 생성 이후 각 item마다 column을 자유롭게 추가하거나 생략할 수 있다.
단, 하나의 item은 최대 400KB까지만 저장할 수 있으므로, 대용량 binary 데이터를 저장하기에는 적합하지 않다.
지원하는 데이터 타입에는 String, Number, Binary, Boolean, List, Map, 그리고 Set(String Set, Number Set, Binary Set)이 있다.
DynamoDB Read/Write Capacity Modes
DynamoDB는 서버를 직접 프로비저닝할 필요 없이 테이블의 읽기 및 쓰기 용량만 정의하여 사용할 수 있는 매우 편리한 서비스이다. 읽기 및 쓰기 용량을 관리하는 방식은 두 가지 모드로 나뉘며, 각각의 특성에 따라 선택하여 사용할 수 있다.
Provisioned Mode
- 테이블 생성 시 초당 처리 가능한 읽기(RCU)와 쓰기(WCU) 용량을 미리 지정해야 한다.
- 지정한 용량을 기준으로 비용이 청구되며, 트래픽이 예측 가능한 경우에 적합하다.
- 오토 스케일링(Auto Scaling) 기능을 활용하면, 설정한 목표 사용률(예: 70%)에 따라 자동으로 용량을 조절할 수 있다.
- 트래픽 양이 일정하거나 예측 가능한 워크로드에 적합한 설정 방식이다.
On-Demand Mode
- RCU와 WCU를 사전에 지정할 필요 없이, 요청된 만큼 처리하고 그에 따라 요금이 부과된다.
- 초기 설정이 간단하며, 트래픽 변화가 큰 워크로드에 유리하다.
- 트래픽이 급변하거나 예측하기 어려운 경우에 적합하다.
- 테이블이 비활성화 상태(즉, 요청이 없을 경우)에는 비용이 거의 발생하지 않는다.
- 단, 요청량이 많아질 경우에는 프로비저닝 모드보다 비용이 더 높을 수 있다.
고속 캐싱 기능 - DynamoDB Accelerator(DAX)
DynamoDB Accelerator(DAX)는 DynamoDB를 위한 메모리 기반의 캐시 서비스로, 완전 관리형 형태로 제공된다.
자주 조회되는 데이터를 캐시에 저장함으로써 latency를 마이크로초 단위까지 줄일 수 있으며, 읽기 병목 현상을 효과적으로 해결할 수 있다.
DAX의 큰 장점은 애플리케이션 코드를 변경하지 않아도 기존의 DynamoDB API를 그대로 사용할 수 있다는 점이다.
DAX는 다수의 캐시 노드로 구성된 클러스터 형태로 작동하며, 애플리케이션은 이 클러스터를 통해 DynamoDB에 접근한다.
따라서, 애플리케이션 로직을 변경하지 않고도 빠른 읽기 성능이 필요한 경우 DAX는 매우 적합한 선택이 될 수 있다.
DynamoDB Accelerator(DAX) vs ElastiCache
- DynamoDB Accelerator (DAX)는 DynamoDB 전용 캐시 서비스이다.
애플리케이션 코드를 변경하지 않고도 기존 DynamoDB API를 그대로 사용하면서, 읽기 성능을 높이기 위해 쿼리 결과나 항목 데이터를 자동으로 캐싱한다.
따라서 DynamoDB에서 읽기 요청이 많은 애플리케이션에 적합하다. - ElastiCache는 독립적인 인메모리 캐시 서비스로, Redis나 Memcached 기반이다.
DynamoDB와 별도로 동작하며, 개발자가 직접 데이터를 DynamoDB에서 가져와 캐시에 넣고 관리해야 한다.
다양한 애플리케이션에 유연하게 활용할 수 있지만, 애플리케이션 로직 수정이 필요하다.
DynamoDB Streams

DynamoDB Streams는 DynamoDB 테이블에서 레코드가 생성, 업데이트, 삭제될 때마다 변경 사항을 캡처하여 스트림으로 전송하는 서비스이다.
DynamoDB Streams에 전달된 데이터는 최대 24시간 동안 저장되며, 이후 다양한 방식으로 처리할 수 있다.
데이터 흐름 예시
1. Processing Layer (실시간 처리)
- AWS Lambda 또는 Kinesis Client Library (KCL) 기반 애플리케이션이 DynamoDB Streams를 구독하여 실시간으로 변경 사항을 처리한다.
- 처리된 결과는 다음과 같이 전달 가능하다:
- Amazon SNS: 알림 또는 메시지 전송
- DynamoDB Table: 다른 테이블로의 데이터 복제, 트랜스포밍 등
2. Kinesis 연계 분석 파이프라인
- DynamoDB Streams → Kinesis Data Streams로 전달하면, 대용량 스트리밍 데이터 처리 파이프라인을 구성할 수 있다.
- Kinesis Data Streams → Kinesis Data Firehose로 연결되면, 이 데이터를 다음과 같은 대상으로 보낼 수 있다:
- Amazon Redshift: 분석용 데이터 웨어하우스
- Amazon S3: 장기 보관 및 백업
- Amazon OpenSearch Service: 실시간 검색 및 인덱싱
DynamoDB Global Tables
DynamoDB Global Tables는 동일한 테이블을 여러 리전에 걸쳐 자동으로 복제하고, 각 리전 간 Multi-Active Replication를 제공하는 기능이다. 예를 들어, us-east-1 리전에서 생성한 데이터가 자동으로 ap-southeast-2 리전에 복제되며, 그 반대 방향으로도 동작한다.
사용 목적
DynamoDB 글로벌 테이블을 사용하면 사용자는 가까운 리전에서 데이터를 읽고 쓸 수 있어 지연 시간을 줄일 수 있다. 또한, 한 리전에 장애가 발생해도 다른 리전에서 서비스를 계속 제공할 수 있어 고가용성이 보장된다. 여러 리전에서 동시에 쓰기도 가능하며, DynamoDB는 자동으로 충돌을 감지하고 처리해준다.
동작 방식
각 리전에 존재하는 DynamoDB 테이블은 양방향으로 데이터를 실시간 동기화한다.이를 위해 DynamoDB Streams 기능이 활성화되어 있어야 한다. Streams는 각 테이블의 변경 사항을 감지하고, 이를 다른 리전의 테이블에 복제하는 역할을 수행한다.
DynamoDB 기능
Time To Live(TTL)
DynamoDB의 Time To Live(TTL) 기능은 특정 시간이 지난 데이터를 자동으로 삭제해주는 기능이다. 테이블의 항목에 만료 시간을 지정하면, 해당 시간이 지나고 나서 DynamoDB가 해당 항목을 백그라운드에서 제거한다. 불필요한 데이터를 자동으로 정리할 때 사용한다.
Indexes
DynamoDB는 기본적으로 Primary Key를 기준으로만 데이터를 조회할 수 있지만, 더 다양한 조건으로 데이터를 조회하고 싶을 때 Index 기능을 사용할 수 있다.
- Global Secondary Indexes(GSI)
- Local Secondary Indexes(LSI)
Global Secondary Index (GSI)
기본 테이블과 다른 파티션 키와 정렬 키를 사용할 수 있는 인덱스이다. 예를 들어, 원래는 user_id로 조회하던 데이터를, GSI를 이용하면 email이나 created_at 같은 전혀 다른 속성으로도 조회할 수 있습니다. 완전히 새로운 쿼리 기준을 만들고 싶을 때 사용한다.
Local Secondary Index (LSI)
기본 테이블과 파티션 키는 같고, 정렬 키만 다른 인덱스이다. 예를 들어, user_id는 동일하지만, created_at 순으로 정렬해 데이터를 조회하고 싶을 때 사용한다. 같은 항목 집합을 다양한 기준으로 정렬해서 조회하고 싶을 때 유용하다.
개념적으로 이해가 안되는 부분이 있어 직접 DynamoDB를 사용하면서 다시 개념을 익혀야겠다.
'AWS' 카테고리의 다른 글
| [AWS] CI/CD를 활용한 ECS 웹 서비스 배포 (0) | 2025.06.11 |
|---|---|
| [AWS] Site to Site VPN vs Client VPN (0) | 2024.12.31 |
| [AWS] EFS (0) | 2024.12.31 |
| [AWS] EBS 용량 축소하기 (0) | 2024.12.31 |
| [AWS] MediaConvert + lambda를 이용한 Vod 스트리밍 파일 업로드 (0) | 2024.12.31 |