[dynamoDB] spring boot 프로젝트에서 dynamoDB 기본 환경 구성하기.
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값을 프로퍼티 파일에 있는 변수를 참조하도록 작성하였다.
위 어노테이션이 프로젝트 경로의 해당 프로퍼티 파일을 찾아서,
위 프로퍼티 파일에서 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 키워드로 서비스객체 내에서 사용한다.
간단히 행을 테이블에 저장하는 코드를 보자.
위코드는 dynamoDB의 도메인 클래스 Temp를 읽어와서,
해당 도메인 클래스에 작성되어있는 테이블 정보, 속성 정보를 참조하여
매개변수로 받아온 temp 객체를 dynamodb에 저장한다.
dynamodb용 도메인 클래스를 작성하는 방법은 이전에 작성해놓은 아래 포스트를 참고하면 된다.
https://ppuagirls.blog.me/221412092340
또한, 다중행을 한꺼번에 저장할 수 있는 메소드도 제공한다.
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
항목 save load delete query queryPage scan scanPage parallelScan batchSave batchLoad batchDelete batchWrite count generateCreateTableRequest createS3Link getS3ClientCache save 지정한 객체를 테이블에 저장합니다. 여기서 저장하는 객체가 이 메서드에게 유일하게 필요한 파라미터입니다. DynamoDBMapperConfig 객체를 사용하여 옵션으로 구성 파라미터를 입력할 수도 있습니다. 동일한 기본 키를 ...
docs.aws.amazon.com
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/QueryingJavaDocumentAPI.html
AWS 설명서 » Amazon DynamoDB » 개발자 안내서 » DynamoDB 작업 » 쿼리 작업 » 테이블 및 인덱스 쿼리: Java 참고 또한 Java용 SDK에서는 객체 지속성 모델을 제공하므로 DynamoDB 테이블로 클라이언트 측 클래스를 매핑할 수 있습니다. 이러한 접근 방식을 활용하면 작성해야 할 코드가 줄어듭니다. 자세한 내용은 Java: DynamoDBMapper 단원을 참조하십시오. 다음은 AWS SDK for Java Document API를 사용하여 항목을 ...
이처럼 다중행 저장, 다중행 삭제, 테이블 정보 읽어오기, 스캔, 쿼리 등 다양한 메소드를 제공한다.
위 문서를 읽어보면 제공되는 메소드들이 정리가 잘 되어 있다.
[SES] AWS Simple Email Service 맞춤형 이메일 보내기 (Java)
2019.08.11
댓글 영역