본문 바로가기

카테고리 없음

AWS DynamoDB 사용법(작성중)

DynamoDB

Build Status

DynamoDB 사용법

이 문서에서는 AWS DynamoDB 사용법에 대해 설명한다.
AWS에서 DynamoDB를 사용하면 과금을 해야하니 로컬 환경에 설치한 DynamoDB 기준으로 설명하였다.
조회API를 구현하면서 겪은 경험을 바탕으로 작성되어 찾고자하는 내용이 없을 수 있다.
공식 레퍼런스 문서를 참고하는게 도움이 될 것이다.
마지막으로 프로그램은 Spring boot 2.1.4 기준이다.

AWS DynamoDB 공식 레퍼런스문서:
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Introduction.html

테이블 생성

조회기능 구현 조건

  1. 정렬이 필요하다.
  2. 데이터가 많아도 조회 속도가 일정해야한다.

조회 방법

DynamoDB에는 조회방법이 SCAN방식과 Query방식 2가지가 있다.
스캔방식으로 조회 할 때 Spring-data와 pageable을 사용하여 연동이 가능하다.
중요한 점은 필터는 가능하지만 정렬은 불가능하다...
그러므로 스캔으로 조회로 구현하지 않는다..

쿼리방식으로 조회 할 때 파티션키를 기본인자로 받는다.
정렬은 Sort Key기준으로만 가능하다.
다른속성 값을 기준으로 정렬을 하고싶다면, LSI를 추가하여 사용하면 된다고 한다. (사용은 안해봤다.ㅎㅎ)

DynamoDB - Spring-boot 연동

연동에 필요한 config 파일, properties 파일을 작성한다.

■ DynamoDBConfig.java

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

@Configuration
public class DynamoDBConfig {

    @Value("${aws.dynamodb.endpoint}")
    private String endpoint;
    @Value("${aws.dynamodb.accesskey}")
    private String accesskey;
    @Value("${aws.dynamodb.secretkey}")
    private String secretkey;

    @Bean
    public Table dynamodbTable() {
        DynamoDB dd = new DynamoDB(amazonDynamoDB());
        Table table = dd.getTable("Eth-txs");
        return table;
    }

    private AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(accesskey, secretkey);
    }

    private AmazonDynamoDB amazonDynamoDB() {
        AmazonDynamoDB dynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials());
        dynamoDB.setEndpoint(endpoint);
        return dynamoDB;
    }
}

■ application.properties

aws.dynamodb.endpoint=http://localhost:8000/
aws.dynamodb.accesskey=access123
aws.dynamodb.secretkey=secret123