상세 컨텐츠

본문 제목

[dynamoDB] spring boot 프로젝트에서 dynamoDB 기본 환경 구성하기.

프로그래밍/AWS

by jisooo 2019. 8. 11. 10:53

본문

 

1. pom.xml에 dynamoDB 라이브러리를 추가한다.

 

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <!-- <version>1.11.34</version> -->
</dependency>

2. Configuration 클래스에 AWSCredentials , AmazonDynamoDB 빈을 추가해준다.

 

@PropertySource("classpath:***.properties")
@Configuration
public class AmazonS3Config {
	
	@Value("${accesskey}")
	private String ACCESS_KEY;
	
	@Value("${secretKey}")
	private String SECRET_KEY;
	
	@Value("${endPoint}")
	private String END_POINT;
	
	@Bean
	public AWSCredentials AWSCredentials() {
		AWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
		return awsCredentials;
	}

    ...
    ...

    @Bean
	public AmazonDynamoDB AmazonDynamoDB() {
		AmazonDynamoDB dynamodb = AmazonDynamoDBClientBuilder.standard()
				.withRegion("ap-northeast-2")
				.withCredentials(new AWSStaticCredentialsProvider(AWSCredentials()))
				.build();
		return dynamodb;
	}

 

config 클래스에서 AWS에서 제공받은 access key, secret key 정보를 매개변수로

우선 AWSCredentials 빈도 추가해준다.

필자는 accesskey, secretkey값을 프로퍼티 파일에 있는 변수를 참조하도록 작성하였다.

@PropertySource("classpath:***.properties")

위 어노테이션이 프로젝트 경로의 해당 프로퍼티 파일을 찾아서,

@Value("${accesskey}") private String ACCESS_KEY;

위 프로퍼티 파일에서 accesskey이름으로 된 값을 변수 ACCESS_KEY에 주입한다.

3. DynamoDB에서 각종 연산을 수행할 서비스 클래스를 작성한다.

@Service
public class DynamoDBService {
	@Autowired
	private AmazonDynamoDB;

	private DynamoDBMapper mapper = new DynamoDBMapper(amazonDynamoDB);

	private DynamoDB dynamoDB = new DynamoDB(amazonDynamoDB);

    ...
    ...
    ...

 

 

2번에서 생성한 AmazonDynamoDB 빈이

amazonDynamoDB 변수에 @Autowired 어노테이션으로 인해 주입된다.

DynamoDBMapper , DynamoDB 객체들은 각종 테이블에 관한 연산 메소드들을 제공해준다.

위처럼 config클래스에서 빈으로 주입하여 사용가능하지만, 임시로 new 키워드로 서비스객체 내에서 사용한다.

간단히 행을 테이블에 저장하는 코드를 보자.

public void saveTemp(Temp temp) { mapper.save(temp); }

위코드는 dynamoDB의 도메인 클래스 Temp를 읽어와서,

해당 도메인 클래스에 작성되어있는 테이블 정보, 속성 정보를 참조하여

매개변수로 받아온 temp 객체를 dynamodb에 저장한다.

dynamodb용 도메인 클래스를 작성하는 방법은 이전에 작성해놓은 아래 포스트를 참고하면 된다.

 

https://ppuagirls.blog.me/221412092340

또한, 다중행을 한꺼번에 저장할 수 있는 메소드도 제공한다.

public void batchSaveTemp(List<Temp> temps) { mapper.batchSave(temps); }

DynamoDBMapper 클래스의 batchSave 메소드를 통해 List형태의 도메인객체를 매개변수로 전달하면 된다.

이번엔 삭제 연산을 보자.

 

 

// 기본키로 temp 데이터 삭제
	public void deleteTemp(String idx) {
		mapper.delete(mapper.load(Temp.class, idx, DynamoDBMapperConfig.ConsistentReads.EVENTUAL));
	}

 

mapper.load() 메소드는, 리스트형 도메인 객체를 반환한다.

위 코드에서는 List<Temp> 타입이 되겠다.

기본키 idx로 Temp 객체를 읽어와서, 해당 Temp 데이터들을 DB상에서 삭제한다.

마지막 매개변수 코드를 보면

 

DynamoDBMapperConfig.ConsistentReads.EVENTUAL
DynamoDBMapperConfig.ConsistentReads.CONSISTENT

라고 2가지중 한가지 옵션을 선택하도록 되어있는데,

DynamoDB에서는 읽기 옵션이 2가지가 있다.

두 읽기 방식 옵션차이에 따라 과금 정책에 살짝 차이가 있으니, AWS DynamoDB 문서를 잘 읽어보도록하자..

https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/DynamoDBMapper.Methods.html

이처럼 다중행 저장, 다중행 삭제, 테이블 정보 읽어오기, 스캔, 쿼리 등 다양한 메소드를 제공한다.

위 문서를 읽어보면 제공되는 메소드들이 정리가 잘 되어 있다.

 

관련글 더보기

댓글 영역