입문1분 분량

Docker로 DynamoDB Local 실행하기

DynamoDB Local은 실제 DynamoDB 엔진을 단일 프로세스로 담은 것입니다 — AWS 계정도, 네트워크도, 요청당 청구도 없습니다. 로컬 개발과 통합 테스트에 사용한 뒤, 프로덕션에서는 동일한 코드를 클라우드로 연결하세요.

컨테이너 시작

docker run -p 8000:8000 amazon/dynamodb-local

이렇게 하면 엔진이 http://localhost:8000에 노출됩니다.

docker-compose

대부분의 프로젝트는 팀 전체가 동일한 endpoint를 쓸 수 있도록 docker-compose.yml에 고정합니다:

services:
  dynamodb:
    image: amazon/dynamodb-local
    command: '-jar DynamoDBLocal.jar -sharedDb -dbPath /data'
    ports:
      - '8000:8000'
    volumes:
      - dynamodb-data:/data
volumes:
  dynamodb-data:

지속성

기본적으로 DynamoDB Local은 인메모리입니다 — 컨테이너가 멈추면 모든 테이블이 사라집니다. 두 개의 플래그가 데이터를 영속화합니다:

  • **-sharedDb**는 모든 클라이언트를 하나의 공유 데이터베이스 파일에 묶어 둡니다(이 플래그가 없으면 자격 증명/리전 조합마다 격리된 DB가 생겨 — "내 테이블 어디 갔지?"라는 흔한 함정이 됩니다).
  • -dbPath /data + 마운트된 볼륨은 그 파일을 디스크에 기록하므로, docker compose down 후에도 데이터가 유지됩니다.

SDK를 연결하기

endpoint만 바뀌면 됩니다 — 자격 증명은 아무 더미 값이어도 됩니다:

import {DynamoDBClient} from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({
  endpoint: 'http://localhost:8000',
  region: 'local',
  credentials: {accessKeyId: 'x', secretAccessKey: 'x'}
});

테이블 생성

aws dynamodb create-table \
  --endpoint-url http://localhost:8000 \
  --table-name AppData \
  --attribute-definitions AttributeName=PK,AttributeType=S AttributeName=SK,AttributeType=S \
  --key-schema AttributeName=PK,KeyType=HASH AttributeName=SK,KeyType=RANGE \
  --billing-mode PAY_PER_REQUEST

이처럼 싱글 테이블 PK/SK schema는 좋은 기본값입니다. 픽스처를 로드할 때는 DynamoDB-JSON 변환기로 일반 JSON을 와이어 형식으로 변환하세요.

컨테이너가 떠 있고 테이블이 생성되었는지 확인하세요:

aws dynamodb list-tables --endpoint-url http://localhost:8000

GUI로 탐색하기

CLI 호출은 금세 번거로워집니다. 흔한 선택지는 오픈소스 dynamodb-admin 웹 UI나 데스크톱 클라이언트입니다. DynoTablelocalhost:8000(또는 모든 LocalStack endpoint — DynamoDB Local 및 LocalStack 연결하기 참조)에 곧바로 연결하여, 클라우드 테이블에 쓰는 것과 동일한 UI로 로컬 테이블을 탐색하고, SQL 워크벤치로 쿼리하고, 항목을 편집할 수 있게 해 줍니다 — aws CLI 왕복이 필요 없습니다.

업데이트됨