본문 바로가기

스프링

[Spring] MailSender 네이버 메일_2

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.junit : junit

4.     Commons-logging : Spring-context가 사용

5.     Mail : java-mail

6.     Mysql-connector : Mysql JDBC

7.     Org.springframework.context.support : Spring java-mail

8.     Spring-aop : 스프링 기능 자체의 aop

9.     Spring-bean : 스프링 빈을 활용하는 경우 필요. 스프링의 XML 설정파일과 자바 애노테이션을 파싱 하는데 필요한 클래스 포함

10.   Spring-context : 스프링 코어를 확장한 많은 클래스가 들어 있는데 모든 클래스는 EJB, JNDI(Java Naming Directory Interface), JMX용 클래스와 연동하는데 applicationcontext기능을 사용해야 하며 스프링 리모팅 클래스, 동적 스크립팅 언어(제이루비, 그루비등)와 연동하는 클래스, 빈 유효성검증(JSR-303) API, 스케줄링을 하는 클래스도 포함되어 있다.

11.   Spring-core : 모든 스프링 모듈에서 필요한 모듈. 다른 스프링 모듈에서 사용하는 공통 클래스가 포함됨.

12.   Spring-dao : EmpltyResultDataAccessException 등 사용을 위한 jar

13.   Spring-expression : 스프링 표현언어(SpEL) 지원 클래스 포함.

14.   Spring-jdbc : 스프링이 지원하는 jdbc.

15.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

16.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

 

네이버 메일설정

 

레벨은 다음 레벨에 대한 정보를 갖고 있고, 다음 레벨을 보내는 메서드를 위임함

 

User 객체에 Level 객체를 사용하여 다음 레벨정보를 셋팅하는 역할 위임

 

 

JDBC외의 JDA, JDO, Hibernate 등의 데이터 엑세스 API 사용시 유연한 대처를 위해 인터페이스

 

 

JDBC를 사용하는 DAO인터페이스 구현체

 

 

DAO 주입, DataAccess 주입. 스프링 트랜잭션 주입.

, DataAccess API들의 트랜잭션 방식이 제각각이므로, 스프링의 PlatFormTransactionManager 인터페이스를 사용하기 위함

 

 

26. 스프링의 JDBC 트랜잭션을 주입받아 트랜잭션 작성

 

 

> 이건 gmail 이고 navermail은 아래에 더 있음

1.     SMTP : 표준메일발송 프로토콜(컴퓨터와 컴퓨터간의 서로 이해할 수 있는 언어로 통신해야 한다는 규약)

58. 465 : SSL(Secure Socket Layer) 암호화 통신 프로토콜

59. 587 : TLS(SSL 버전업이라고 보면됨.) gmailTLS해도 그만 안해도 그만

64. mail.smtp.auth : SMTP 인증을 설정(서버에 등록된 계정인지 확인(스팸차단의도))

65. mail.smtp.start~ : TLS를 사용할 것인지에 대한 설정

 

SpringJavaMailSender 인터페이스를 구현한 JavaMailSenderImpl 이용한 기본셋팅.

1.     기존소스와 비교해 try/catch 블록이 사라진 짐. (JavaMailSenderImplJavaMail을 처리하는 중 각종 예외를 MailException이라는 런타임 예외로 포장해서 던져주기 때문)

2.     SimpleMailMessage : 간단한 텍스트가 전부이므로 사용함.

3.     JavaMailSenderImpl : 메일 전송 오브젝트. 내부적으로 JavaMail API를 이용해 메일을 전송해줌.

 

 

 

 

메일 발송 성공

 

 

 

 

Spring JavaMail 라이브러리

 

 

다음 레벨에 대한 정보 및 getterLevel에게 위임

 

 

Level에게 다음 레벨에 대한 정보를 얻어 User객체에 세팅은 User에게 위임

 

 

변하는 부분 전략 Interface

 

 

JDBC 구현 Hibernate, JPA, JDO 등도 구현하면 됨

 

 

 

 

네이버메일은 위와 같이

Naver.UserName 은 아이디 값만 넣으면됨 @naver.com은 필요없음

 

기본적인 등록 법

 

메일 전송 기능을 가진 오브젝트를 DI받도록 수정.

MailSender의 구현 클래스들은 싱글톤으로 사용 가능해야한다.

 

 

 

 

 

 

컴파일한 상태에서 스프링이 객체를 주입시키므로 자식에게는 interface변수 뿐이므로 수동 DI

 

 

 

테스트 수행시 JavaMail을 사용해서 메일을 전송할 필요가 없는 경우, 아무것도 하지 않는, MailSender 구현 빈클래스 생성.

메일전송 메소드가 호출됐는지 간단히 확인해보려면, 간단히 콘솔에 발송정보를 출력하고 확인해 보는 내용이 추가될 수 있다.

테스트대역(test double) : 테스트를 실행할 수 있도록 사용하는 오브젝트

테스트스텁(test stub) : 테스트 대상 오브젝트의 의존객체로서 존재하면서 테스트 동안 코드가 정상적으로 수행할 수 있도록 돕는 것(DummyMailSender).

>  목 오브젝트(mock object) : 스텁처럼 테스트 오브젝트가 정상적으로 실행을 도와주면서, 테스트 오브젝트와 자신의 사이에서 일어나는 커뮤니케이션을 저장해뒀다가 테스트 결과를 검증하는데 활용(아래아래 MockMailSender 참조)

 

 

JavaMail을 사용하는 JavaMailSenderImpl 대신 DummyMailSender로 변경한다.

이런식으로 JavaMail의 경우처럼 테스트를 어렵게 만드는 건전하지 않은 방식으로 설계된 API를 사용할 때도 유용하게 쓰일 수 있다.

>   스프링이 직접 제공하는 MailSender를 구현한 추상화 클래스는 JavaMailServiceImpl 하나 뿐이지만, 이 추상화된 메일 전송 기능을 사용해 어플리케이션을 작성함으로써 얻을 수 있는 경우가 크다.

 

 

실제 테스트대상 오브젝트(UserService)UserServiceTest 뿐만 아닌 다른 의존 오브젝트(SrpingMailSender)와도 커뮤니케이션 한다. SpringMailSender에게 값을 출력하기도 하고, 입력 받기도 한다. 이런 정보를 UserServiceTest에서는 직접 알 수 없다. 이때는 UserService와 테스트용 의존 오브젝트인 목 오브젝트를 만들어서 사용해야한다.

1.     Static 멤버 클래스 : UserServiceTest 안에서만 한정적으로 사용될 것이므로

124. List : 커뮤니케이션 저장용도

 

53. DI를 통해 DummyMailSender 대신 MockMailSender를 수동 DI하여 검증정보를 얻을 수 있다.