[TaskAgile] 03. 스프링 시큐리티 - 02. 이메일 보내기

2020. 11. 30. 16:45개발 관련/TaskAgile

이전 페이지 : zena1010.tistory.com/13

 

다음 페이지 : 


 

 

스프링 시큐리티 - 이메일 보내기

 

목표

 

  1. 웹 어플리케이션 보호
  2. 이메일 보내기 
  3. end-to-end 통합 테스트 수행
  4. 자바 단위 테스트 범위 리포트(coverage report) 추가

 

 


구현

 

  • pom.xml에 추가
 <dependencies>
 	...
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
    
    ...
    
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
    </dependency>
    
    ...

 

starter-boot-starter-mail : JavaMailSender와 같은 인터페이스 제공

freeamarker 라이브러리 존재로 인해 스프링 부트는 자동으로 freemarker.template.Configuration 인스턴스 생성

일반적으로 템플릿 로더의 경로는 classpath:/templates/이며 이 경로는 타임리프 뷰 템플릿을 저장하는데도 사용된다.

 

 


  • FreeMarker 로더의 경로를 변경(application.properties에 추가)
# email
spring.freemarker.template-loader-path=classpath:/mail-templates/

 

  • SMTP 서버 시작 명렁어, application이 전송한 이메일 메시지를 확인할 수 있는 SMTP 서버(정확히 파이썬 표준 LIBRARY인 DebuggingServer 구현체인 smtpd가 필요)
  • 서버의 호스트는 localhost이고 1025 포트를 리스닝한다.
// SMTP 서버 시작
$ python -m smtpd -n -C DebuggingServer localhost:1025
If localhost is not given then `localhost' is used, 
and if localport is not given then 8025 is used. 
If remotehost is not given then `localhost' is used,
and if remoteport is not given, then 25 is used.

localhost가 주어지지 않으면 `localhost`가 사용되고, 
localport가 주어지지 않으면 8025번이 사용됩니다.
remotehost가 주어지지 않으면 `localhost`가 사용되고
remoteport가 주어지지 않으면 25번이 사용됩니다.

 

 


클래스

 

  • DefaultMailManager
    • 템플릿으로부터 메시지 바디를 생성하는데 FreeMarkerTemplateUtils 사용
    • 메세지 전송하는데 메일 서버 API Mailer(구현체 : AsyncMailer - JavaMailSender 이용) 이용
  • AsyncMailer : 메세지를 비동기로 전송. JavaMailSendor에 의존
  • ApplicationProperties : 프로퍼티를 명시하기 위한 환경설정 클래스(메타데이터를 이용)

 


 

발생한 에러 목록

zena1010.tistory.com/61- .NoUniqueBeanDefinitionException, import한 패키지와 같은 이름일 때

'개발 관련 > TaskAgile' 카테고리의 다른 글

[TaskAgile] DB table/column 추가  (0) 2021.01.06
[TaskAgile] 02. 회원가입 구현  (0) 2020.11.26