이 글은 개발 및 테스트 단계에서 DynamoDB를 웹 서비스로 접근하지 않고 로컬 환경에 구축하여 사용할 수 있는 방법을 소개합니다.
Amazon DynamoDB 공식 문서를 보면 DynamoDB를 로컬 환경에 구축하는 3가지 방법을 제공합니다. 그중에서 Docker 이미지를 사용하여 구축하는 방법을 설명합니다. (의존성과 필요한 설정이 이미지에 내장되어있어 신속하게 구축할 수 있는 장점에 Docker를 선택했습니다.)
DynamoDB를 구축하고 다루기 위해서는 Docker와 AWS 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 ID와 Secret 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로 기본 명령어를 사용해봤습니다.
부족한 글 끝까지 읽어주셔서 감사합니다. 피드백은 언제나 환영합니다. 😄