728x90
반응형
AWS SDK for Java에서 SES(Simple Email Service)를 사용할 때, 버전 1.x에서 2.x로 마이그레이션하는 과정에 대해 설명하겠습니다. 버전 2.x는 많은 변경 사항과 개선된 기능을 제공하므로, 이를 통해 더 나은 성능과 유지보수성을 확보할 수 있습니다.
Overview
AWS SDK 버전 1.x는 `groupId`로 `com.amazonaws`를 사용하고, 버전 2.x는 `software.amazon.awssdk`를 사용합니다. 이는 패키지 구조의 변경을 의미하며, 코드 수정이 필요합니다.
Migration
Maven dependency
먼저, 프로젝트의 의존성을 변경해야 합니다. 다음은 Maven을 사용하는 경우의 예시입니다.
AWS SDK for Java 1.x의 SES)
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-ses</artifactId>
<version>1.12.372</version>
</dependency>
AWS SDK for Java 2.x의 SES V1)
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>ses</artifactId>
<version>2.25.64</version>
</dependency>
AWS SDK for Java 2.x의 SES V2)
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sesv2</artifactId>
<version>2.25.64</version>
</dependency>
Configuration
설정 클래스를 변경합니다. 버전 2.x에서는 새로운 인증 및 클라이언트 빌더를 사용합니다.
SDK V1)
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
@Configuration
public class AwsSesConfiguration {
@Bean
public AmazonSimpleEmailService amazonSimpleEmailService() {
BasicAWSCredentials credentials = new BasicAWSCredentials(username, password);
return AmazonSimpleEmailServiceClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(Regions.valueOf(region))
.build());
}
}
SDK V2)
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.ses.SesClient;
// import software.amazon.awssdk.services.sesv2.SesV2Client;
@Configuration
public class AwsSesConfiguration {
@Bean
public SesClient amazonSesClient() { // SES V2 사용 시 SesV2Client
AwsBasicCredentials credentials = AwsBasicCredentials.create(username, password);
return SesClient.builder()
.credentialsProvider(StaticCredentialsProvider.create(credentials))
.region(Region.of(region))
.build();
}
}
Send email
SES 클라이언트의 사용법이 변경되었기 때문에 이메일을 보내는 로직을 변경해야합니다.
SDK V1)
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.model.*;
public void sendEmail(String sendEmailAddr, String personal, String receiverEmailAddr, String subject, String content, boolean isHtmlMail) throws UnsupportedEncodingException {
// 받는사람
Destination destination = new Destination().withToAddresses(receiverEmailAddr);
// Create the subject and body of the message.
Content subjectCont = new Content().withData(subject).withCharset("UTF_8");
Content textBodyCont = new Content().withData(content).withCharset("UTF_8");
Body body = new Body();
if (isHtmlMail) { //HTML 메일
body.setHtml(textBodyCont);
} else {
body.setText(textBodyCont);
}
// Create a message with the specified subject and body.
Message message = new Message().withSubject(subjectCont).withBody(body);
InternetAddress addr = new InternetAddress(sendEmailAddr, personal);
// Assemble the email.
SendEmailRequest request = new SendEmailRequest().withSource(addr.toString()).withDestination(destination).withMessage(message);
SendEmailResult result = amazonSimpleEmailService.sendEmail(request);
if (result.getSdkHttpMetadata().getHttpStatusCode() != 200) {
throw new Exception(String.valueOf(result.getSdkHttpMetadata().getHttpStatusCode()));
}
}
SDK V2)
import software.amazon.awssdk.services.ses.SesClient;
import software.amazon.awssdk.services.ses.model.*;
public void sendEmail(String sendEmailAddr, String personal, String receiverEmailAddr, String subject, String content, boolean isHtmlMail) throws UnsupportedEncodingException {
// 받는사람
Destination destination = Destination.builder().toAddresses(receiverEmailAddr).build();
// Create the subject and body of the message.
Content subjectCont = Content.builder().charset("UTF_8").data(subject).build();
Content textBodyCont = Content.builder().charset("UTF_8").data(content).build();
Body body;
if (isHtmlMail) { //HTML 메일
body = Body.builder().html(textBodyCont).build();
} else {
body = Body.builder().text(textBodyCont).build();
}
// Create a message with the specified subject and body.
Message message = Message.builder().subject(subjectCont).body(body).build();
InternetAddress addr = new InternetAddress(sendEmailAddr, personal, "UTF_8");
// Assemble the email.
SendEmailRequest request = SendEmailRequest.builder().source(addr.toString()).destination(destination).message(message).build();
SendEmailResponse response = amazonSesClient.sendEmail(request);
if (!response.sdkHttpResponse().isSuccessful()) {
throw new Exception(String.valueOf(response.sdkHttpResponse().statusCode()));
}
}
이 가이드는 AWS SDK 버전 1.x에서 2.x로 마이그레이션하는 과정에서 발생할 수 있는 주요 변경 사항을 다루고 있습니다. 이 외에도 코드의 다른 부분에서 추가적인 변경이 필요할 수 있으므로, AWS 공식 문서를 참고하여 모든 변경 사항을 반영하시기 바랍니다.
728x90
반응형
'infra > aws' 카테고리의 다른 글
[AWS SDK for JAVA] S3 버전 1.x에서 2.x로 마이그레이션 (0) | 2024.06.04 |
---|---|
[AWS SDK for JAVA] EC2 보안그룹(Security Group) 조회 (0) | 2023.06.21 |
[CloudFront] JA3 TLS Client Fingerprint (0) | 2023.04.19 |
Java Mail API로 Amazon SES 반송 이메일 세부 정보 읽기 (1) | 2021.04.07 |
[JAVA] AWS S3 Https 연결이 비공개로 설정되어 있지 않습니다. (Your connection is not private) 해결방안 (0) | 2020.10.31 |
댓글