Amazon DynamoDB 로컬 환경에서 사용하기 (feat. Docker)

공병국
6 min readFeb 11, 2019
Amazon DynamoDB

이 글은 개발 및 테스트 단계에서 DynamoDB를 웹 서비스로 접근하지 않고 로컬 환경에 구축하여 사용할 수 있는 방법을 소개합니다.

Amazon DynamoDB 공식 문서를 보면 DynamoDB를 로컬 환경에 구축하는 3가지 방법을 제공합니다. 그중에서 Docker 이미지를 사용하여 구축하는 방법을 설명합니다. (의존성과 필요한 설정이 이미지에 내장되어있어 신속하게 구축할 수 있는 장점에 Docker를 선택했습니다.)

DynamoDB를 구축하고 다루기 위해서는 DockerAWS CLI가 필요하니 미리 준비합니다. 모든 준비를 마쳤으니 처음부터 차근차근 따라 하기만 하면 됩니다 :)

시작하겠습니다!

DynamoDB 실행하기 🚀

$ docker pull amazon/dynamodb-local$ docker run -d -p 8000:8000 amazon/dynamodb-local

Docker Hub에서 DynamoDB Local 이미지를 가져와 컨테이너를 실행합니다. 단 2줄로 DynamoDB를 구축했습니다. 🎉

AWS CLI 설정하기 🛠

AWS CLI를 사용하기 전에 반드시 2가지 과정을 거쳐야 합니다. (필요한 과정이니 꼭 해야 합니다)

  • IAM 사용자 생성하기
  • Access Key IDSecret Access Key 발급하받기 ( ⚠️ 키 값이 외부에 노출되면 경우 엄청난 과금 폭탄을 맞을 수 있으니 소중히 다뤄줍니다.)

위 과정을 다 거쳤다면, AWS CLI를 사용하기 위해 아래와 같이 설정합니다.

$ aws configure
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ********************
Default region name [None]: local
Default output format [None]: json

가장 복잡(?)했던 설정이 끝났습니다. 이제 연결을 확인해 봅니다.

AWS CLI로 DynamoDB의 연결 확인하기 🔎

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

테이블 목록을 출력하는 명령어를 통해서 DynamoDB에 연결이 가능한지 확인합니다. ( ⚠️ --endpoint-url 옵션을 입력하지 않으면, 로컬 환경에 연결된 것이 아니니 반드시 입력합니다.)

만약, 연결되지 않고 오류를 출력한다면 ~/.aws/config 의 설정 값을 확인합니다. (설정 값에 오타가 있을 수 있습니다.)

{
"TableNames": []
}

짠 ✨ 무사히 연결된 것을 확인했습니다. 이제 기본 명령어를 사용해 봅니다.

기본 명령어 사용하기 🔥

테이블 만들기

아이템을 넣기 전에 담을 테이블이 필요하니 만듭니다.

$ aws dynamodb create-table \
--table-name 테이블 이름 \
--attribute-definitions \
AttributeName=속성 이름,AttributeType=속성 타입 \
... \
--key-schema \
AttributeName=속성 이름,KeyType=키 타입 \
... \
--provisioned-throughput \
ReadCapacityUnits=1,WriteCapacityUnits=1 \
--endpoint-url http://localhost:8000

테이블이 잘 만들어졌다면 테이블에 대한 정보가 나타납니다.

테이블 확인하기

테이블에 대한 테이블 목록을 보여주는 명령어로 확인합니다.

$ aws dynamodb list-tables \
--endpoint-url http://localhost:8000
{
"TableNames": [
"테이블 이름"
]
}

테이블이 잘 만들어진 것을 확인했습니다. 하지만, 제대로 만들어졌는지 한 번 더 확인해 볼 필요가 있습니다. (테이블이 제대로 만들어져야 아이템을 제대로 넣을 수 있습니다)

$ aws dynamodb describe-table
--table-name 테이블 이름 \
--endpoint-url http://localhost:8000

테이블에 대한 자세한 정보가 나타납니다.

아이템 넣기

만들어둔 테이블에 아이템을 넣어봅니다.

$ aws dynamodb put-item
--table-name 테이블 이름 \
--item \
'{ \
"속성 이름": {"속성 타입": 내용}, \
... \
}' \
--endpoint-url http://localhost:8000

아이템을 잘 넣었다면 에러 없이 끝납니다.

아이템 가져오기

테이블에서 키 값으로 아이템을 가져옵니다.

$ aws dynamodb get-item \
--table-name 테이블 이름 \
--key \
'{ \
"속성 이름": {"속성 타입": 내용}, \
... \
}' \
--endpoint-url http://localhost:8000

아이템을 잘 가져왔다면 아이템에 대한 정보가 나타납니다.

아이템 지우기

테이블에서 키 값으로 아이템 지워봅니다.

$ aws dynamodb delete-item \
--table-name 테이블 이름 \
--key \
'{ \
"속성 이름": {"속성 타입": 내용}, \
... \
}'
--endpoint-url http://localhost:8000

아이템이 잘 지워졌다면 에러 없이 끝납니다.

테이블 지우기

DynamoDB에서 테이블 이름으로 테이블을 지워봅니다.

$ aws dynamodb delete-table \
--table-name 테이블 이름 \
--endpoint-url http://localhost:8000

테이블을 잘 지워졌다면 테이블에 대한 정보가 나타납니다.

마무리 👏

지금까지 Docker를 사용해 로컬 환경에 DynamoDB을 구축하고 AWS CLI로 기본 명령어를 사용해봤습니다.

부족한 글 끝까지 읽어주셔서 감사합니다. 피드백은 언제나 환영합니다. 😄

--

--