안녕하세요. 캐시워크에서 백엔드를 담당하고 있는 이문규입니다.
이번 포스팅에서는 Local에서 DynamoDB를 이용해 운영하는 것에 대해 설명하려고합니다.
DynamoDB 는 AWS 에서 만든 NoSQL Database 입니다. 따라서 AWS 시스템에 종속되어 있습니다.
우리는 AWS 시스템에 종속된 Database 를 제외하고 마음대로 삭제하고 변경해도되는 테스트용 Database 가 필요 했습니다. Local 환경에서 DynamoDB 를 운영해야 할 이유가 되었죠.
Cashwalk 개발자는 전원 Apple Macintosh 를 사용하고 있으니, MAC 기준으로 설명 하도록 하겠습니다.
(참고로, Mcintosh 는 사과의 한 품종 이름 입니다. Mac 이냐 Mc 냐의 차이 입니다. — 발음은 같습니다.)
문서를 읽기에 앞서
제 컴퓨터는 moonkyu 라는 계정을 사용합니다. 따라서 /Users/moonkyu 라는 이름으로 설명이 됩니다. 여러분의 아이디가 specialAgent 라면 /Users/specialAgent 라는 이름으로 진행 하셔야 합니다.
설명 순서는 다음과 같습니다.
- AWS 공식 페이지에서 DynamoDB Download 받기
- Service 로 등록하여 MAC 재부팅 시에도 항상 DynamoDB 가 서비스 상태로 유지 되도록 하기
- NodeJS 에서 Local DynamoDB 에 접속하기
(저는 개인적으로 Java Spring 에서도 돌아가는 시스템을 만들어야 하는군요)
1. AWS 공식 페이지에서 DynamoDB Download 받기
AWS 에서 DynamoDB 의 Local 테스트 환경 구축을 위하여 다음의 페이지를 운영하고 있습니다.
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/DynamoDBLocal.html
한글로 친절히 설명 하고 있고, 사실 이 글의 대부분 내용의 핵심이 정리 되어 있다고 보면 됩니다. 이 글은 여러분이 더 쉽게 그리고 안전하게 DynamoDB를 Local에서 운영하도록 도와 드릴 뿐 입니다. 중간에 보시면 (아시아 태평양(도쿄) 리전) 라는 부분을 보실 수 있습니다. 해당 파일을 다운로드 받습니다.압축을 해제합니다.
Source 를 관리하는 /Users/moonkyu/Documents/workspace 디렉토리 아래에 dynamodb 라고 폴더를 만들었습니다.
2. 재부팅 시에도 항상 DynamoDB 동작하도록 만들기
두 단계로 나누어 진행 하겠습니다.
- DynamoDB를 실행 하기 위한 스크립트를 만드는 부분
- Service 에 등록하여 MAC에서 관리 하는 부분
우선, DynamoDB를 실행 하기 위한 스크립트를 만드는 부분부터 살펴 보겠습니다.
DynamoDB가 설치된 위치로 먼저 이동 하여 DynamoDB라는 파일을 vi 편집기로 열어 줍니다.
cd /Users/moonkyu/Documents/workspace/dynamodb
vi DynamoDB
vi 편집기를 i 키를 눌러 Insert 모드로 변경 한 뒤
#! /bin/shjava -Djava.library.path=/Users/moonkyu/Documents/workspace/dynamodb/DynamoDBLocal_lib -jar /Users/moonkyu/Documents/workspace/dynamodb/DynamoDBLocal.jar -sharedDb -inMemory
위와 같이 입력 해 줍니다. 그 다음 ESC 누르고 : 키 누르고 wq 를 눌러 저장 합니다. (vi 편집기 사용 기본 명령어 입니다.)
chmod +x DynamoDB
를 입력하여 DynamoDB를 실행 파일로 만들어 줍니다.
./DynamoDB를 입력하여 다음과 같이 실행 되는지 확인 합니다.
축하합니다! DynamoDB가 준비 되었습니다.
하지만 우린 MAC의 Service에 등록하여 MAC에서 관리 하도록 해 주어야 합니다. 이것은 여느 Linux의 Service(/etc/init.d/ 를 관리 해주는것)와는 사뭇 다릅니다.
MAC은 .plist 를 사용합니다.
cd /Library/LaunchDaemons/sudo vi dynamodb.plist
를 입력하여 vi 편집기를 열어 줍니다. — root 권한이 필요 하므로 계정의 비밀번호를 입력 해야 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>dynamodb</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/Users/moonkyu/Documents/workspace/dynamodb/DynamoDB</string>
</array>
</dict>
</plist>
와 같이 입력하고 저장 해 줍니다.
sudo chmod +x dynamodb.plist
을 입력하여 실행할 수 있도록 변경 해 줍니다.
sudo launchctl load /Library/LaunchDaemons/dynamodb.plist
을 입력하여 Service 를 작동 시킵니다. 해제는 unload 입니다.
sudo launchctl list | grep dynamodb
을 입력하여 dynamodb 가 정상적으로 서비스 상태로 올라갔는지 확인 하세요.
7124 0 dynamodb
첫번째 숫자는 PID (ProcessID) 이므로 같지 않을 수 있지만, 반드시 두번째 숫자는 0 이어야 정상 작동 하는 것 입니다.
크롬을 열어 주시고, http://localhost:8000/shell/ 라고 주소를 입력 해 보세요. DynamoDB WEB Console 이 보인다면 정상적으로 작동 하는 것 입니다.
축하합니다! 설정을 마무리 하였습니다.
3. NodeJS 에서 Local DynamoDB 에 접속하기
NodeJS 에서 aws-sdk 를 사용하는 방법과 연결하여 설명하도록 하겠습니다.
const AWS = require('aws-sdk');AWS.config.update({
region: process.env.AWS_REGION,
endpoint: process.env.DYNAMODB_ENDPOINT,
accessKeyID: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey : process.env.AWS_SECRET_KEY
});let docClient = new AWS.DynamoDB.DocumentClient();module.exports = {
docClient,
};
process.env.DYNAMODB_ENDPOINT 의 local 환경의 값은 http://localhost:8000 이 됩니다.
production 에서의
process.env.DYNAMODB_ENDPOINT 의 도쿄 리전 값은 https://dynamodb.ap-northeast-1.amazonaws.com 이 됩니다.
수고하셨습니다.
전 이제, Linux Instance에서 DynamoDB 설정 및 환경 셋팅에 대하여 처리 하러 가겠습니다.
긴 글 읽어 주셔서 감사합니다.