Overview
이전 글에서는 AWS DynamoDB의 개념과 사용 사례에 대해 살펴보았다. 이번에는 로컬 환경 또는 쿠버네티스 클러스터에서 DynamoDB Local을 설치하고 테스트하는 방법에 대해 다룬다.
DynamoDB Local은 AWS에서 제공하는 로컬 테스트용 NoSQL 데이터베이스이며, 실제 AWS DynamoDB와 유사한 인터페이스를 제공한다. 개발 및 테스트 환경에서 비용 없이 DynamoDB 연동 기능을 검증할 수 있으며, AWS 자격 증명이나 인터넷 연결 없이도 사용할 수 있다는 장점이 있다.
특히, Kubernetes 환경에서 In-Memory 방식과 Data Storage 방식의 차이를 이해하고, 목적에 따라 적절한 배포 전략을 선택하는 것이 중요하다.

📅 관련 글
2022.02.13 - [AWS] - AWS IAM (Identity and Access Management) 개요 및 설정 방법
2022.02.07 - [AWS] - AWS EC2 인스턴스 생성
2022.02.13 - [AWS] - AWS S3 (Simple Storage Service) 개요 및 활용 방법
2023.03.30 - [AWS] - AWS Secrets Manager란?(OAuth, SSO)
2023.03.29 - [AWS] - AWS CLI 정리
2023.03.28 - [AWS] - AWS IAM이란?
2023.03.28 - [AWS] - AWS S3 권한이란?
2023.03.28 - [AWS] - AWS S3란?(개념, 속성)
2023.03.30 - [AWS] - AWS Cloudfront란? / Canary 및 Blue-Green 배포
2023.04.03 - [AWS] - AWS VPC란?
2023.05.26 - [AWS] - AWS IRSA(IAM Roles for Service Accounts)란?
2024.11.07 - [AWS] - AWS Ingress Annotations 정리
2024.11.04 - [AWS] - AWS Assume Role이란?
2024.11.16 - [AWS] - AWS Network ACL vs Security Group
2024.11.21 - [AWS] - ALB access Log 활성화 → S3 권한 설정 및 로그 저장
2024.11.24 - [AWS] - EKS Pod Identity Addon
2024.11.27 - [AWS] - AWS DynamoDB란?
2025.01.03 - [AWS] - AWS DynamoDB Local 설치
DynamoDB 설치
DynamoDB는 In-Memory(Stateless) 방식과 Data Storage(Stateful) 방식으로 설치할 수 있다.
DynamoDB Local 이미지의 Docker hub 주소는 아래와 같다.
아래의 방식으로 간단하게 설치 가능하다.
In-Memory 및 Data Storage 방법 간의 차이점
Feature | In-Memory Method | Data Storage Method |
Data Persistence | DynamoDB Local이 중지되면 데이터가 손실된다. | 데이터는 디스크에 저장되어 지속적으로 유지된다. |
Configuration | -dbPath 매개변수가 필요없다. |
-dbPath 매개변수가 필요하다. |
Performance | 디스크 I/O가 없으므로 더 빠르다. | 디스크 쓰기로 인해 약간 느리다. |
Use Case | 일시적 또는 임시적 테스트. | 지속적인 데이터로 테스트 |
In-Memory 설치 방법
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: stateless-dynamodb
name: stateless-dynamodb
spec:
replicas: 1
selector:
matchLabels:
app: stateless-dynamodb
template:
metadata:
labels:
app: stateless-dynamodb
spec:
containers:
- image: amazon/dynamodb-local:2.5.3
name: dynamodb-local
ports:
- containerPort: 8000
volumeMounts:
- name: dynamodb-data
mountPath: /home/dynamodblocal/data
volumes:
- name: dynamodb-data
persistentVolumeClaim:
claimName: stateless-dynamodb-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: stateless-dynamodb-pvc
spec:
storageClassName: nfs-client-sts
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
labels:
app: stateless-dynamodb
name: stateless-dynamodb
spec:
type: NodePort
ports:
- port: 8000
nodePort: 30637
protocol: TCP
selector:
app: stateless-dynamodb
In-Memory Pod 로그
Initializing DynamoDB Local with the following configuration:
Port: 8000
InMemory: true
Version: 2.5.3
DbPath: null
SharedDb: false
shouldDelayTransientStatuses: false
CorsParams: null
Data Storage 설치 방법
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: stateful-dynamodb
name: stateful-dynamodb
spec:
replicas: 1
selector:
matchLabels:
app: stateful-dynamodb
template:
metadata:
labels:
app: stateful-dynamodb
spec:
containers:
- image: amazon/dynamodb-local:2.5.3
name: dynamodb-local
command: ["java", "-jar", "DynamoDBLocal.jar", "-sharedDb", "-dbPath", "/home/dynamodblocal/data"]
ports:
- containerPort: 8000
volumeMounts:
- name: dynamodb-data
mountPath: /home/dynamodblocal/data
volumes:
- name: dynamodb-data
persistentVolumeClaim:
claimName: stateful-dynamodb-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: stateful-dynamodb-pvc
spec:
storageClassName: nfs-client-sts
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
labels:
app: stateful-dynamodb
name: stateful-dynamodb
spec:
type: NodePort
ports:
- port: 8000
nodePort: 30637
protocol: TCP
selector:
app: stateful-dynamodb
Data Storage Pod 로그
Initializing DynamoDB Local with the following configuration:
Port: 8000
InMemory: false
Version: 2.5.3
DbPath: /home/dynamodblocal/data
SharedDb: true
shouldDelayTransientStatuses: false
CorsParams: null
실습: aws-cli로 DynamoDB Local 연동
# 로컬 테스트용 AWS profile 설정
aws configure --profile local-dynamodb
# 테이블 생성
aws dynamodb create-table \
--table-name TestTable \
--attribute-definitions AttributeName=ID,AttributeType=S \
--key-schema AttributeName=ID,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--endpoint-url http://localhost:8000 \
--profile local-dynamodb
# 데이터 입력
aws dynamodb put-item \
--table-name TestTable \
--item '{"ID": {"S": "001"}, "Name": {"S": "Alice"}}' \
--endpoint-url http://localhost:8000 \
--profile local-dynamodb
# 데이터 조회
aws dynamodb scan --table-name TestTable \
--endpoint-url http://localhost:8000 \
--profile local-dynamodb
- 위 연동 예제는 로컬 개발뿐만 아니라 CI 환경에서의 자동화 테스트에도 활용 가능하다.
마무리
DynamoDB Local은 실제 AWS 환경에 배포하기 전, 로컬 또는 개발용 클러스터에서 로직을 빠르게 검증하거나 자동화 테스트 환경을 구축할 때 매우 유용한 도구다.
- In-Memory 모드는 빠른 테스트와 반복 실행이 필요한 개발 환경에 적합하고,
- Data Storage 모드는 재시작 후에도 데이터를 유지해야 하는 장기 테스트 시나리오에 적합하다.
Kubernetes 환경에서는 볼륨 설정을 통해 원하는 영속성 수준을 설정할 수 있으며, AWS DynamoDB와 동일한 포트를 사용하기 때문에 로컬 개발 시 큰 차이 없이 연동이 가능하다.
로컬에서의 연동 테스트를 마친 후, AWS DynamoDB에 연결만 변경하면 실제 운영 환경으로 쉽게 전환할 수 있다.
CI/CD 파이프라인이나 GitOps 기반 테스트 환경에서도 이 구성을 적극 활용해보자.
Reference
'AWS' 카테고리의 다른 글
AWS DynamoDB란? (0) | 2024.11.27 |
---|---|
EKS Pod Identity Addon (0) | 2024.11.24 |
ALB access Log 활성화 → S3 권한 설정 및 로그 저장 (0) | 2024.11.21 |
AWS Network ACL vs Security Group (0) | 2024.11.16 |
AWS Ingress Annotations 정리 (0) | 2024.11.07 |