본문 바로가기

스프링

[Spring] 자바메일_Gmail셋팅_기본1

 

1.     Com.springsource.junit : junit

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

3.     Mail : java-mail

4.     Mysql-connector : Mysql JDBC

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

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

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

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

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

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

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

12.   Spring-test.jar

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

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

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

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

 

Mail-1.4.7 추가 > java-mail

<dependency>

    <groupId>javax.mail</groupId>

    <artifactId>mail</artifactId>

    <version>1.4.7</version>

</dependency>

 

 

 

 

 

다음 정보를 가지고 있고 다음정보를 리턴하는 역할 위임

 

 

 

 

 

Try/catch/finally 등의 템플릿 영역은 jdbcTemplate에게 위임.

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

 

 

DataSourceTransactionManager : JDBC 트랜잭션임. JDO,JPA, Hibernate 구현시 해당 설정만 해당트랜잭션 클래스로 바꿔주면 됨.

 

67. sendUpgradeEMail : upgradeLevel 메서드에서 분리. 이제 왜 분리하는지는 묻지말자.

 

 

Gmail 기본셋팅

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

71. mail.smtp.host : 이메일 발송을 처리해줄 SMTP 서버지정

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

76. javax.mail.Session : 이 오브젝트가 있어야만 메일 메시지를 생성/전송 가능. 인터페이스가 아닌 클래스, 게다가 생성자가 모두 private로 되어있어 직접 생성 불가능. 상속 불가능한 final 클래스. 전송기능을 맡고 있는 Transport 역시 마찬가지. JavaMail은 확장이나 지원이 불가능하도록 만들어진 가장 악명 높은 표준API

89. 예외처리 : 런타임(언체크 예외)로 전환하여 이 메서드를 사용하는 메서드들은 의무적인 throws를 안날려도됨

 

TLS 방식을 위처림 SSL방식을 사용해도됨 gmail의 경우. TLS방식은 029.Spring자바메일편 참조

 

JavaMail을 이용해 메일을 발송하는 가장 전형적인 코드. 엔코딩 부분은 생략됨

1.     Session.getInstance(props, null) : JavaMail에서는 Session 오브젝트를 만들어야만 메일 메시지를 생성할 수 있고, 메일을 전송할 수 있다.

2.     Session은 인터페이스가 아닌 클래스이다.

3.     생성자가 private로 직접 생성 불가하므로 static 팩토리 메소드를 이용해 오브젝트를 생성해야한다.

4.     Session클래스는 더 이상 상속이 불가능한 final 클래스다.

>  테스트 대용으로 바꿔치기할 만한 인터페이스의 존재가 보이지 않음. MailMessage도 마찬가지임.

 

 

 

1.     JavaMail이 포함된 코드의 테스트 방법

메일서버가 준비되지 않았다면? 어찌할 것인가?

메일발송이란 매우 부하가 큰 작업임 메일 서버에 상당한 부담을 줄 수 있다.

정말 메일이 잘 도착했는지 확인을 못하는 경우가 있다.

메일서버까지만 메일이 잘 전달됐으면, 성공이라고 생각할 수 있다. 메일 서버는 이미 충분히 테스트된 시스템이라고 볼 수 있으므로.

JavaMail > 테스트 메일서버 > 서버는 메일발송하지 않고, 메일 전송 요청까지만 담당

>  JavaMail이 동작하면 외부 메일 서버와 네트워크로 연동하고 전송하는 부하가 큰 작업이 일어나기 때문에 이를 생략한다면 좋을 것이다.

 

 

'스프링' 카테고리의 다른 글

[Spring] MailSender 네이버 메일_2  (0) 2020.11.05
[java] 싱글톤패턴  (0) 2020.11.04
[spring] 트랜잭션 기본3  (0) 2020.11.03
[spring] JTA 트랜잭션 2  (0) 2020.11.03
[Spring] 트랜잭션_기본1  (0) 2020.11.02