본문 바로가기

DevOps/AWS

AWS DynamoDB - (1) Local with Docker + Spring Boot 연동

DynamoDB란?

DynamoDB란 완벽하게 관리되는 NoSQL Database 서비스이다. 분산 데이터베이스를 운영할 때 관리부담을 줄여준다. 예를 들어, 하드웨어 할당, 설정 및 구성, 복제, 클러스터 조정에 대한 걱정을 할 필요가 없다. 암호화 기능까지 제공해준다고 한다. ( 나중에 따로 다루도록 하겠습니다. )

AWS DynamoDB Local을 컨테이너에 띄우기

Docker와 함께 AWS DynamoDB를 local에 띄워보자. ( Docker 설치와 관련해서는 다루지 않겠습니다. )


$ docker pull dwmkerr/dynamodb

$ docker run -p 8000:8000 dwmkerr/dynamodb -sharedDb


  • -sharedDb  : AWS CLI를 통해 만들어진 Data에 AWS SDK를 통해 접근하기 위해서는 다음 옵션을 주어야 한다. 이 옵션을 주지 않으면, connection마다 database를 가지게 되어 다른 client인 경우 database를 공유하지 않는다.

설정이 끝나면 브라우저에 http://localhost:8000/shell을 띄워보자. 오른쪽 상단에 있는 톱니바퀴를 클릭하여 Access Key를 설정하자.




AWS CLI를 이용하기

DynamoDB Local에 Table을 만들어보자. 


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

$ aws dynamodb create-table --table-name {Your Table Name} --attribute-definitions AttributeName={Your Key Name},AttributeType=S --key-schema AttributeName={Your Key Name},KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 --endpoint-url http://localhost:8000

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



아래 그림은 AWS SDK ( javascript ) 명령어를 이용하여 실행한 화면이다. 왼쪽에 API를 입력해준 후 재생버튼을 누르면 오른쪽에 실행결과가 나타난다. API에 대한 정보는 우측 상단에 있는 </>을 클릭하여 확인해보면 된다.


Spring Boot와 연동하기

1. AWS 서비스를 쓰기 위해서는 AWS SDK를 설치해야 한다. 이를 위해 build.gradle 파일에 다음 라이브러리들을 추가해주자. ( AWS SDK 동작에 관한 포스팅은 다음을 참고하자. )
// AWS Dynamic DB
compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.34'
compile group: 'com.github.derjust', name: 'spring-data-dynamodb', version: '4.3.1'

2. application-dev.yml에 Dynamodb에 접근하기 위해 주소와 accesskey를 설정을 하자.

# --- Amazon DynamoDB
amazon:
dynamodb:
endpoint: http://localhost:8000
aws:
accesskey: your access key
secretkey:


3. AWS SDK를 이용하여 Local에 설치된 DynamoDB와 연동을 하자.

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

@Configuration
public class DynamoDBConfig {

@Value("${amazon.dynamodb.endpoint}")
private String amazonDynamoDBEndpoint;

@Value("${amazon.aws.accesskey}")
private String amazonAWSAccessKey;

@Value("${amazon.aws.secretkey}")
private String amazonAWSSecretKey;

@Bean
public AmazonDynamoDB amazonDynamoDB() {
AmazonDynamoDB amazonDynamoDB
= new AmazonDynamoDBClient(amazonAWSCredentials());

if (!StringUtils.isEmpty(amazonDynamoDBEndpoint)) {
amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint);
}

return amazonDynamoDB;
}

@Bean
public AWSCredentials amazonAWSCredentials() {
return new BasicAWSCredentials(
amazonAWSAccessKey, amazonAWSSecretKey);
}

}

다음과 같이 설정을 해주면 DynamoDB API(https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations_Amazon_DynamoDB.html)를 이용하여 테스트를 진행하면 되겠다. 


마무리하며

다음 포스팅에서는 spring boot project가 배포된 EC2 instance에서 AWS DynamoDB에 접근하기 위한 설정에 대해 알아보자.