GW LABS

AWS DynamoDB Deep Dive: Key-Value DB와 NoSQL 모델링 완벽 이해 본문

Infrastructure

AWS DynamoDB Deep Dive: Key-Value DB와 NoSQL 모델링 완벽 이해

GeonWoo Kim 2025. 9. 7. 09:05

AWS DynamoDB Deep Dive: Key-Value DB와 NoSQL 모델링 완벽 이해

서론

AWS DynamoDB는 완전 관리형(fully managed) NoSQL 데이터베이스 서비스로, Key-Value 및 Document 모델을 지원하면서도 초당 수백만 건의 요청을 처리할 수 있는 확장성을 제공합니다.
많은 기업이 DynamoDB를 선택하는 이유는 서버 관리 부담을 줄이고, 고성능 애플리케이션을 안정적으로 운영할 수 있기 때문입니다. 이번 글에서는 DynamoDB의 특징, 기본 사용법, 데이터 모델링 전략, 그리고 RDBMS와의 차이점을 심도 있게 다루겠습니다.


본론

1. DynamoDB의 주요 특징

  • 완전 관리형: 서버 인프라, 스케일링, 보안, 백업을 AWS가 관리
  • Key-Value + Document 저장 모델: 단순 키-값 조회부터 JSON 기반 복잡한 구조까지 지원
  • 자동 확장성: 온디맨드(On-Demand) 또는 프로비저닝(Provisioned) 용량 모드 선택 가능
  • 고가용성: 다중 AZ(Availability Zone)에 자동 데이터 복제
  • 서버리스 통합: AWS Lambda, API Gateway와 쉽게 연동되어 실시간 애플리케이션 구축에 최적화

2. DynamoDB 기본 사용법

DynamoDB는 테이블(table), 아이템(item), 속성(attribute) 구조를 기반으로 동작합니다.
기본 키(primary key)는 두 가지 방식으로 정의할 수 있습니다:

  1. 단일 파티션 키 (Partition Key Only)
    → 단순 Key-Value 조회용
  2. 복합 키 (Partition Key + Sort Key)
    → 동일 파티션 키 내에서 정렬된 데이터 관리 가능

예제: 테이블 생성 (AWS CLI)

aws dynamodb create-table \
    --table-name Orders \
    --attribute-definitions \
        AttributeName=OrderId,AttributeType=S \
        AttributeName=CreatedAt,AttributeType=N \
    --key-schema \
        AttributeName=OrderId,KeyType=HASH \
        AttributeName=CreatedAt,KeyType=RANGE \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5

예제: 데이터 삽입 (Python Boto3)

import boto3
from datetime import datetime

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Orders')

response = table.put_item(
   Item={
        'OrderId': 'ORD1234',
        'CreatedAt': int(datetime.now().timestamp()),
        'CustomerName': '홍길동',
        'TotalAmount': 35000
    }
)
print("PutItem succeeded:", response)

예제: 데이터 조회 (Python Boto3)

response = table.get_item(
    Key={
        'OrderId': 'ORD1234',
        'CreatedAt': 1694001123
    }
)
print(response['Item'])

3. DynamoDB 데이터 모델링 전략

DynamoDB는 RDBMS와 달리 정규화보다 액세스 패턴 중심 설계가 핵심입니다.

  • 단일 테이블 설계 (Single-Table Design)
    • 여러 엔터티를 하나의 테이블에 저장하고, 파티션 키/정렬 키 조합으로 액세스 패턴을 관리
  • Secondary Index 활용
    • GSI(Global Secondary Index): 파티션 키 및 정렬 키를 새롭게 정의해 보조 조회 지원
    • LSI(Local Secondary Index): 동일 파티션 키 내에서 다른 정렬 키로 조회 가능
  • 핫 파티션 방지
    • 키 분포가 특정 값에 치우치지 않도록 설계 필요

예제: GSI 생성 (AWS CLI)

aws dynamodb update-table \
    --table-name Orders \
    --attribute-definitions AttributeName=CustomerName,AttributeType=S \
    --global-secondary-index-updates \
        "[{\"Create\":{\"IndexName\":\"CustomerNameIndex\",\"KeySchema\":[{\"AttributeName\":\"CustomerName\",\"KeyType\":\"HASH\"}],\"Projection\":{\"ProjectionType\":\"ALL\"},\"ProvisionedThroughput\":{\"ReadCapacityUnits\":5,\"WriteCapacityUnits\":5}}}]"

4. DynamoDB와 RDBMS의 차이점

구분 DynamoDB RDBMS
데이터 모델 Key-Value, Document 테이블, 행(Row), 열(Column)
스키마 스키마리스 (유연) 엄격한 스키마
확장성 수평적 확장 (샤딩 자동화) 수직적 확장 위주
트랜잭션 제한적 지원 (ACID 일부) 완전한 ACID 보장
설계 방식 액세스 패턴 중심 정규화 중심
사용 사례 IoT, 로그 처리, 세션 관리 ERP, 회계, 관계형 데이터 관리

결론

이번 포스팅에서는 AWS DynamoDB의 특징, 기본 사용법, 데이터 모델링 전략, 그리고 RDBMS와의 차이점을 살펴보았습니다.
핵심은 DynamoDB는 스키마리스 구조와 수평 확장성 덕분에 고성능 분산 애플리케이션에 최적화되어 있으며, 전통적인 RDBMS와는 완전히 다른 설계 사고방식이 필요하다는 점입니다.

👉 이 글을 통해 독자분들은 DynamoDB를 단순한 NoSQL 서비스가 아닌, 실무에 최적화된 강력한 데이터베이스로 이해할 수 있습니다.

'Infrastructure' 카테고리의 다른 글

웹 앱 성능측정 도구, 라이트하우스  (0) 2020.04.29
WSL Native Docker  (0) 2019.11.26
리눅스 Strace & Valgrind 디버깅 기법  (0) 2019.04.14
Comments