home
SAA-C03

[database] Amazon DynamoDB

트래픽이 아무리 몰려도 응답 속도가 흔들리지 않는 DB. 어떻게 가능한지 키 설계부터 들여다봅니다.

DB 선택 큰 그림은 database-overview.

One-Line Summary

Amazon DynamoDB완전관리형 서버리스 NoSQL key-value/document DB로, 어떤 규모에서도 한 자릿수 밀리초 지연을 낸다. 프로비저닝할 서버가 없고 자동으로 확장된다. 시험 핵심은 키 설계 / 용량 모드(On-demand vs Provisioned) / GSI vs LSI / Streams / DAX / Global Tables / TTL 이다.

뭔지 (What / Why)

관계형 DB는 스키마·JOIN·수직 확장이 강점이지만, 초대규모 트래픽에서 일정한 저지연을 내긴 어렵다. DynamoDB는 반대 방향이다 — 스키마 유연, JOIN 없음, 대신 키 기반 접근으로 무한에 가깝게 수평 확장하며 지연이 일정하다.

"key-value/document · 서버리스 · 초대규모 · 일정한 ms 지연"이면 DynamoDB. "복잡한 JOIN·트랜잭션 리포팅"이면 관계형(RDS/Aurora).

Abbreviations

약어풀네임의미
PKPartition Key파티션(해시) 키
SKSort Key정렬 키
GSIGlobal Secondary Index전역 보조 인덱스
LSILocal Secondary Index로컬 보조 인덱스
RCU/WCURead/Write Capacity Unit읽기/쓰기 용량 단위
DAXDynamoDB AcceleratorDynamoDB 전용 인메모리 캐시
TTLTime To Live항목 자동 만료

키(Key) 설계 — 접근의 기본 (빈출)

DynamoDB는 기본 키로 항목을 찾는다. 키 설계가 성능을 좌우한다.

키 유형구성특징
Partition key만PKPK 값이 파티션을 결정, 값이 유일해야
Partition + Sort keyPK + SK같은 PK 안에서 SK로 정렬·범위 조회(예: user의 시간순 주문)
  • 항목(item) 크기 최대 400KB. 큰 객체는 S3에 두고 포인터만 저장.
  • 읽기 일관성: 기본 최종 일관성(eventually consistent), 옵션으로 강력한 일관성(strongly consistent).

용량 모드 — On-demand vs Provisioned (빈출)

모드언제과금
On-demand트래픽 예측 불가/급변, 운영 최소요청당 과금(피크 자동 대응)
Provisioned트래픽 예측 가능, 비용 최적화RCU/WCU 지정(+ Auto Scaling 옵션)

"트래픽을 예측 못 함/스파이크" = On-demand. "꾸준하고 예측 가능·비용 최적화" = Provisioned(+Auto Scaling).

보조 인덱스 — GSI vs LSI (빈출)

기본 키가 아닌 다른 속성으로 조회하려면 보조 인덱스가 필요하다.

GSI (Global)LSI (Local)
파티션 키다른 PK 가능같은 PK, 다른 SK
생성 시점언제든 추가/삭제테이블 생성 시에만
용량자체 RCU/WCU테이블 용량 공유
일관성최종 일관성만강력한 일관성 가능

"완전히 다른 속성으로 조회" = GSI. "같은 PK 안에서 다른 정렬 키" = LSI. GSI가 더 유연해 실무·시험에서 더 자주.

DynamoDB Streams (빈출 — 변경 이벤트)

테이블의 항목 수준 변경(생성/수정/삭제) 을 시간순 로그로 남긴다(24시간 보존).

item 변경 → Streams → Lambda 트리거(CDC) / 집계 / 복제
  • 대표 패턴: 변경 시 Lambda 실행(알림·파생 테이블 갱신·검색 색인).
  • Global Tables의 내부 메커니즘이기도 하다.

"DynamoDB 항목 변경에 반응/near real-time change capture" = Streams (+ Lambda).

DAX — DynamoDB Accelerator

DynamoDB 전용 인메모리 캐시. 읽기 지연을 밀리초 → 마이크로초로.

항목내용
대상DynamoDB만
효과읽기 지연 microsecond, 읽기 폭주 완화
적합read-heavy·반복 조회·버스트 읽기

DynamoDB 캐시는 DAX, 범용 캐시는 ElastiCache. "DynamoDB microsecond reads" = DAX.

Global Tables — 멀티 리전 액티브-액티브

여러 리전에 양방향 복제되는 테이블. 각 리전에서 읽고 쓸 수 있어 글로벌 저지연을 낸다(내부적으로 Streams 사용).

"multi-region active-active, 글로벌 사용자 저지연 읽기/쓰기" = Global Tables.

그 밖에 알아둘 것

기능내용
TTL지정 시간 지난 항목 자동 삭제(만료 세션·로그 정리, 무료)
Transactions여러 항목에 ACID 보장
백업온디맨드 백업 + PITR(35일)
Export to S3테이블을 S3로 내보내 Athena 등으로 분석(테이블 부하 없이)

실무 활용 사례

  • 서버리스 앱 백엔드: Lambda + DynamoDB(+API Gateway)로 무상태 확장.
  • 세션/장바구니/게임 상태: 키 기반 저지연 저장.
  • 이벤트 파이프라인: Streams → Lambda로 변경 전파.
  • 글로벌 서비스: Global Tables로 리전별 저지연.
  • 만료 데이터 자동 정리: TTL로 세션/임시 데이터 삭제.

Common Wrong Directions

오답 방향왜 부족한가
JOIN·복잡 SQL 리포팅을 DynamoDB로관계형이면 RDS/Aurora
다른 속성 조회에 테이블 풀스캔GSI(또는 LSI) 설계
예측 불가 트래픽에 고정 ProvisionedOn-demand(또는 Auto Scaling)
DynamoDB 캐시에 ElastiCacheDynamoDB 전용은 DAX
변경 이벤트 처리를 폴링으로Streams + Lambda
글로벌 저지연 쓰기에 단일 리전Global Tables
큰(>400KB) 객체를 그대로 저장S3에 두고 포인터만

Exam Triggers

문제에서 이런 표현이 나오면떠올릴 것
"serverless NoSQL key-value/document"DynamoDB
"single-digit millisecond at any scale"DynamoDB
"unpredictable/spiky traffic, no capacity planning"On-demand
"query by a non-key attribute"GSI (또는 LSI)
"react to item changes / CDC"Streams (+Lambda)
"microsecond reads for DynamoDB"DAX
"multi-region active-active"Global Tables
"auto-expire old items"TTL
"analyze DynamoDB data in S3/Athena"Export to S3

Memory Sentence

DynamoDB는 서버리스 NoSQL key-value/document로 어떤 규모에서도 ms 지연. 키(PK/SK)로 접근하고, 다른 속성 조회는 GSI(유연)·LSI(같은 PK). 용량은 예측불가=On-demand·예측가능=Provisioned. 변경 이벤트는 Streams+Lambda, 캐시는 DAX(마이크로초), 글로벌은 Global Tables, 만료는 TTL, 분석은 Export to S3.

References

댓글

아직 댓글이 없습니다.