데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [AWS SES 연재 3] Using AWS SDK V1 with SpringBoot

      KIDO 21.10.06
      1,697 5 1

      AWS SDK 이용하기 Java SDK V1 이용하기

      Overview

      • AWS 에서는 SES 를 위한 SDK 라이브러리를 제공하고 있다.
      • 아래 내용은 관련메뉴얼 을 참조하여 작성하였다.

       

      메일 전송 개발하기

      • 이제 SpringBoot 를 이용하여 메일 전송 프로그램을 개발해 볼 것이다.

       

      사전 준비사항

      • AWS Cli 설치
      • AWS Credential 설정하기
      • AWS SES 생성하기
      • 스프링 프로젝트 생성
      • 의존성 추가

       

      AWS Cli 설치하기

      • Mac 을 기준으로 AWS Cli 를 설치하자. 다음을 참고하여 설치하면 된다.

       

      AWS Credential 설정하기

      • AWS Console에서 IAM 을 신규로 생성하고, Credential 을 다운로드 받는다.
      • 관련 정보는 AWS 자격증명 을 참조하자.
      • 로컬에 aws 설정을 수행하자.
       aws configure --profile schooldevops
      AWS Access Key ID [None]:  <다운받은 credential의 access key>
      AWS Secret Access Key [None]: <다운받은 credential의 secret access key>
      Default region name [None]: ap-northeast-2
      Default output format [None]: json
      • 이렇게 설정하고 나면 다음과 같이 정상적으로 프로파일이 등록 되었는지 확인해보자.
      cat ~/.aws/credentials
      
      [default]
      aws_access_key_id = AKXXXXXXXXXXXXXUF
      aws_secret_access_key = ixxxxxXXXXXXXXXXXXXXxxxxxxxxXXXXXXXXXXv
      [schooldevops]
      aws_access_key_id = AKXXXXXXXXXXXXXUF
      aws_secret_access_key = ixxxxxXXXXXXXXXXXXXXxxxxxxxxXXXXXXXXXXv

       

      의존성 추가하기

      • 우선 스프링 부트 프로젝트를 생성하자. https://start.spring.io/ 에서 생성하면 된다.
      • 이제 프로그램을 개발하기 위해서 필요한 의존성 라이브러리를 pom.xml 파일에 추가하자.
      ...생략
      
          com.amazonaws
          aws-java-sdk-ses
          1.12.58
      
      ...생략
      • 위 의존성은 aws-java-sdk 중 ses 의존성만 추가하였다.

       

      필요한 속성 설정하기

      • 이제 어플리케이션의 변경사항은 변수로 설정할 수 있도록 하기 위해서 application.properties 파일을 작성하자.
      • 파일위치는 src/main/resources/application.properties 이다.
      ... 생략
      aws.ses.profile=schooldevops
      aws.ses.from=baekido@gmail.com
      aws.ses.region=ap-northeast-2
      aws.ses.encoding=UTF-8
      
      ... 생략
      • aws.ses.profile 는 이전에 설정한 schooldevops 으로 프로파일 이름이다.
      • aws.ses.from 메일을 보내는 사람의 메일 주소이다.
      • aws.ses.region 우리가 사용할 ses의 리젼을 기술하였다.
      • aws.ses.encoding 기본 테스트 인코딩을 설정해 주었다. 고정으로 지정해도 된다.

       

      AWs SES 용 메일 전송을 위한 Bean 등록하기

      • 이제 Bean 을 등록하자.
      • Bean 은 AWS SES를 이용하여 메시지를 전송하기 위한 전송 객체를 빈으로 등록한다.
      • 빈 등록을 위해서 다음 경로에 파일을 작성하자. com.schooldevops.aws.mail.sdkv1.configs.SesSDKV1Config.java
      package com.schooldevops.aws.mail.sdkv1.configs;
      
      import com.amazonaws.auth.profile.ProfileCredentialsProvider;
      import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
      import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceAsyncClientBuilder;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class SesSDKV1Config {
      
          @Value("${aws.ses.profile}")
          private String profile;
      
          @Value("${aws.ses.region}")
          private String region;
      
          @Bean
          public AmazonSimpleEmailService amazonSimpleEmailService() {
      
              ProfileCredentialsProvider profileCredentialsProvider = new ProfileCredentialsProvider(profile);
              return AmazonSimpleEmailServiceAsyncClientBuilder.standard()
                      .withCredentials(profileCredentialsProvider)
                      .withRegion(region)
                      .build();
          }
      }
      
      • AmazonSimpleEmailServiceAsyncClientBuilder 을 이용하여 SES를 위한 객체를 빌드 한다.
      • 빌드한 객체에 credential 방식으로 profile을 이용 할 것이므로 profileCredentialsProvider 를 전달했다.
      • region은 이전에 properties에 설정한 리젼이 전달된다.
      • @Bean 을 이용하여 AmazonSimpleEmailService 를 빈으로 등록했다.

       

      Email Sender DTO 작성하기

      • 이베 메일을 전송할 DTO를 작성하자.
      • DTO에는 메일 전송 내역을 담고 있으며, 이 정보를 이용하여 메시지를 전송할 전송 객체인 SendEmailRequest를 생성해 내는 목적으로 사용된다.
      • com.schooldevops.aws.mail.sdkv1.dtos.EmailDto.java 파일을 만들자.
      package com.schooldevops.aws.mail.sdkv1.dtos;
      
      import com.amazonaws.services.simpleemail.model.*;
      
      import java.util.List;
      
      public class EmailDto {
      
          private final String from;
          private final List to;
          private final String subject;
          private final String content;
          private final boolean isHtml;
      
          public EmailDto(String from, List to, String subject, String content, boolean isHtml) {
              this.from = from;
              this.to = to;
              this.subject = subject;
              this.content = content;
              this.isHtml = isHtml;
          }
      
          public SendEmailRequest toSendRequest() {
              final Destination destination = new Destination().withToAddresses(this.to);
      
              final Message message = new Message()
                      .withSubject(new Content().withCharset("UTF-8").withData(this.subject))
                      .withBody(makeBody(this.isHtml));
      
              return new SendEmailRequest()
                      .withSource(this.from)
                      .withDestination(destination)
                      .withMessage(message);
          }
      
          private Body makeBody(boolean isHtml) {
              if (isHtml) {
                  return new Body().withHtml(new Content().withCharset("UTF-8").withData(this.content));
              } else {
                  return new Body().withText(new Content().withCharset("UTF-8").withData(this.content));
              }
          }
      }
      • 내용을 보면 from, to, subject, content, isHtml 의 필드를 가질 수 있다.
      • isHtml 이 true인경우 html 포맷으로 전송이 되며, false인경우 단순 텍스트가 전달된다.
      • 그리고 toSendRequest 메소드를 이용하여 SendEmailRequest 객체를 생성해 낸다.
      • makeBody 메소드를 이용하여 isHtml가 true 인경우 html 타입의 메일을, 그렇지 않은경우 text 타입의 메일을 생성한다.

       

      Service 작성하기

      • 이제 이를 사용하는 서비스를 생성하자.
      • 이전에 생성한 AmazonSimpleEmailService 을 이용하여 메시지를 전달하는 역할만 개발할 것이다.
      • com.schooldevops.aws.mail.sdkv1.services.SesV1Service.java 파일을 다음과 같이 작성하자.
      package com.schooldevops.aws.mail.sdkv1.services;
      
      import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
      import com.schooldevops.aws.mail.sdkv1.dtos.EmailDto;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.stereotype.Service;
      
      import java.util.List;
      
      @Service
      public class SesV1Service {
      
          @Value("${aws.ses.from}")
          private String from;
      
          private final AmazonSimpleEmailService amazonSimpleEmailService;
      
          public SesV1Service(AmazonSimpleEmailService amazonSimpleEmailService) {
              this.amazonSimpleEmailService = amazonSimpleEmailService;
          }
      
          public void send(final String subject, final String content, final List receiver, boolean isHTML) {
              final EmailDto mailDto = new EmailDto(from, receiver, subject, content, isHTML);
              amazonSimpleEmailService.sendEmail(mailDto.toSendRequest());
          }
      
      }
      
      • send 메시지를 생성하였고, 위와 같이 단순히 파라미터로 전달된 데이터를 이용하여 메일을 전송하는 역할만 수행하고 있다.

       

      테스트 메일 전송하기

      • 스프링 부트이므로 CommandLineRunner을 상속받아서 테스트를 진행한자.
      package com.schooldevops.aws.mail;
      
      import com.schooldevops.aws.mail.sdkv1.services.SesV1Service;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.CommandLineRunner;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      
      import java.util.List;
      
      @SpringBootApplication
      public class MailApplication implements CommandLineRunner {
      
      	public static void main(String[] args) {
      		SpringApplication.run(MailApplication.class, args);
      	}
      
      	@Autowired
      	SesV1Service sendEmailService;
      	
      	@Override
      	public void run(String... args) throws Exception {
      		sendEmailService.send("Hello kido..", "My name is...", List.of("baekido@gmail.com"), false);
      	}
      }
      
      
      • 위와같이 commandLineRunner 에 구현 객체를 작성하고, 메일 전송 테스트를 수행하였다.
      • 스프링 부트가 올라오면서 sendEmailService.send 메소드가 호출될 것이다.

       

      메일 결과 확인하기

      • 메일이 정상저긍로 전송이 되었으니, 이제는 메일을 확인해보자.

      ses_pro_01 ses_pro_02 ses_pro_03

      • 정상적으로 메일 수신됨을 확인할 수 있다.

       

      WrapUp

      • 지금까지 간단하게 메일 전송을 수행할 수 있도록 프로그램을 작성해 보았다.
      • AWS SDK 를 이용하면 간단한 라이브러리 이용으로 메일을 전송할 수 있음을 알 수 있다.
      • AmazonSimpleEmailService 을 이용하여 메일을 전송할 수 있고, 메일 전송을 위한 SendEmailRequest 객체를 생성하고, 전달하는 것으로 메일 전송 테스트를 완료할 수 있었다.
      • 중요한 것은 aws credential 이 로컬에 저장 되어야하며, 프로파일을 이용하여 해당 credential에 접근할 수 있게 하였고, ses 를 생성한 리젼을 이용하여 AmazonSimpleEmailService 생성한 것을 다시한번 확인하면 도움이 될 것이다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      KIDO 님의 최신 블로그

      더보기
      동영상 기고하기