5.4 메일 서비스의 추상화.

Slides:



Advertisements
Similar presentations
CUBRID 소개 (Object 개념) 서비스 사업부 / 기술지원팀. 목차 구조 일반적 특징 객체지향 특징 ORDB 개념을 이용한 스키마 ORDB 개념을 이용한 질의.
Advertisements

매쓰홀릭 – 설명회. 매쓰홀릭 설립 배경 : 강사 지향, 관리 지향, DB & History 에 기반한 교육실현 온라인 및 e-book 교육의 실현을 목표 연혁 2008 년 5 월 매쓰홀릭 고등부 사업 출범 DB 구축 및 시스템 기획 2009 년 5 월 매쓰홀릭 온라인.
`99 Webmaster Power Upgrade! 조직에서의 웹마스터 김도연
의료자원 규제현황과 개선방향 자원평가실. 의료자원 관리 개요 규제개혁 토론과제.
삼성전자 ZIPEL 의 인간공학적 분석 과 목 명 : 인간공학과 디자인 담당교수 : 최윤정 교수님 발 표 일 : 2001 년 6 월 11 일 발 표 자 : 9 조 김아름 박태민 오래미 이지영.
대 · 중소기업협력재단 교육목표 ○ 국 · 내외 기업의 경영환경 변화 속에서 협업 사례분석을 통해 협업의 필요성에 대한 이해도 제고 ○ 협업컨설팅 실무이론과 실습을 통해 현장 실무능력 향상 ○ 실무활용도가 높은 과정중심의 심층적인 교육으로 전문성강화 ○ 컨설턴트로서의 윤리규범과.
2 Ⅰ Ⅱ Ⅲ 3 Ⅰ 4 1. 추진배경 2. 사업의 정의 3. 사업의 범위 4. 개선방향.
지원직무주민등록번호 - 사진 * 사진 등록을 원하시지 않는 경우 등록하지 않으셔도 됩니다. 성명 ( 한글 ) 연락처 010) -, 02) - ( 영문 국적 ( 영주권 ) ■ 한국 □ 외국 ( 국적명 : ) ( 해외국적 취득일 : 년 월 ) 현주소 학력사항.
세계국학원청년 단 지 켜주지 못 해 미 안해, 이 제부터 지 켜줄께. 대한민국.... 세계국학원청년단 사이버 의병 배경 및 취지 세계국학원청년단활동 향후 비전 후원 지 켜주지 못 해 미 안해, 이 제부터 지 켜줄께.
© DBLAB, SNU 화일구조. 강의 소개 - 화일구조  Instructor : Prof. Sukho Lee (301 동 404 호 )  홈페이지 :  교과목 개요 – 이 과목은 데이타 관리와 응용을 위한 화일 구조의 설계와.
사 업 제 휴 제 안 서사 업 제 휴 제 안 서 J & K 목 차 1. 인사말 2. 사업 구상 및 기획 의도 3. 사업개요 4. 시장분석 5. 대 - 일본 홈쇼핑 사업전략 6. 년 매출 목표 7. 상품 선별 8. 제휴업체 9. 조직도 10. 프로필 J.
한옥과 신한옥의 개념.
정보 사회의 역기 능과 대처 01 인터넷 중독, 어떻게 예방할까
화일구조.
연 합 남 전 도 회 월 례 회 1부 예배- 찬 송 장 다같이 2011년 1월 2일 1부 예배- 찬 송 장 다같이 기 도
사 업 계 획 2011년 제1호 - 2월 1일 2011 주 안에서 소통하며 화합하고 참여하며 헌신하는 남신도회
소리가 작으면 이어폰 사용 권장!.
소프트웨어시스템설계(6주) 데이터베이스 연동
Premier Test 초급 이름 : • 속진 레이아웃(버전3)
고급 컴퓨터 프로그래밍 팀명:지식인 팀원:홍광수 원대연 이소정.
효과적인 DB암호화 구축을 위한 애슬론 v1.5 제안
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
WIPI 플랫폼 상의 휴대폰용 네트워크 게임 이 제걸(PL) 백 인호.
Toad for SQL Server 제품 소개서 – 프로넷소프트㈜.
Power Java 제4장 자바 프로그래밍 기초.
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
IOC, DI 2015 Web Service Computing.
Edus 충남 통합인증을 위한 교과부 표준보안 모듈 설치 안내 (smart.edus.or.kr)
5강. DI활용 의존 관계 DI사용에 따른 장점 Lecturer Kim Myoung-Ho Nickname 블스
CRM개발팀 CRM개발팀 구성 CRM 개발팀 구성원 CRM 개발팀 담당 업무 제품 구성 - 팀장 1명, 팀원 5명으로 총 6명
21강. 스프링JDBC JDBC를 이용한 반복코드 줄이기 Spring빈을 이용한 코드 간소화
자바 5.0 프로그래밍.
정책학개론 제3주 강의안 제3장 정책체제와 정책환경
웹 다이어리 완료보고서 이상제 정영석.
한국IT교육원 팀장 : 도신욱 팀원 : 박영준 윤상철 여성모
정보보안.
참가 신청서 (일반참가자用) 기 업 명 대 표 자 신청담당자 부서 사무실 직위 핸드폰 이름 총 참가인원: 명
119 신고방법.
Office 365 서비스 사용 안내 정보지원센터/ 두원공과대학교.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
인터넷 기반 보안시스템 담당 교수님 : 김재형 교수님 발 표 자 : 전익현 하유진.
Sep Youn-Hee Han Chapter 04. 예외 Sep Youn-Hee Han
Spring DI 이해 및 활용.
예산안 원가 구분 금액 총 제작비 대비 원가세부항목 기획개발비 270,000, % 기획비 120,000,000
인생이모작을 위한 지자체의 지원 방안 : 울산 북구청 사례 울산북구인생이모작이음센터
NoSQL 박훈
15 사용자 권한 제어 데이터베이스 보안 권한 롤 동의어.
환경관리 규정 - 목 차 – 1.적 용 범 위 9.환경관리 교육 2.목 적 10.환경 점검
나는 땅에서 키는 작지만 하늘로부터 재는 키는 이 세상 어느 누구보다도 크다
5.2 트랜잭션 서비스 추상화.
화일구조.
1 사회보험 2 공공부조 목차 3 사회서비스 4 가족수당 5 요약. 1 사회보험 2 공공부조 목차 3 사회서비스 4 가족수당 5 요약.
중등교원 전보시스템 로그인 오류시 해결 해결방안 * 작성일 2016 년 12 월 15일 * 작성자 광주광역시교육청.
제안 목적 고객성향 분석으로 매출 증대 유사업체 분석으로 신상품 홍보 원가요소 분석 및 피드백으로 원가율 관리
청각기관의 구조와 기능2 옥정달.
FINAL FANTASY XIV_2D.ver
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
장애부위검사 객관적인 청력검사.
천국 가는 길 천국 가는 길 ♧ 천국 가는 길 ♧ 1. 죄와 사망(지옥) 1) 사람의 3가지 공통점 - 죄인, 죽음, 심판
발표자 : 조윤혜 발표일 : 담당 교수 : 성미영 교수님
“경상북도 산업체, (예비)스타트업, 연구기관 엔지니어를
자료구조 강의소개 정성훈 연락처 : 이메일 : 연구실 : 연219호 연락처 : 이메일 : 홈페이지: 정성훈.
정보검색 시스템 평가 및 테스트 컬렉션 개발 조영환, 박혁로, 이준호 정보과학회지
2.4 스프링 테스트 적용.
Jre 설치 확인 방법 규제정보화 시스템 운영팀.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
大鵬(대붕) 김 시 습 국어국문학과 이준석.
2015년도 연세대학교 의과대학 의과학자육성 장학금 신청안내
Presentation transcript:

5.4 메일 서비스의 추상화

5.4.0 새로운 요구사항 접수 새로운 요구사항 새로운 요구사항 실현을 위한 변경 사항 레벨이 업그레이드 되는 사용자에게 안내 메일 발송 새로운 요구사항 실현을 위한 변경 사항 사용자 이메일 정보 관리 User에 email 필드 추가 UserDao 수정 userMapper 수정 insert(), update()에 email 필드 처리 코드 추가 UserServiceTest, UserDaoTest, UserTest 수정 업그레이드 작업을 담은 UserService의 upgradeLevel() 메소드에 메일 발송 기능 추가

5.4.1 JavaMail을 이용한 메일 발송 기능 JavaMail 메일 발송 upgradeLevel() 메소드 수정

5.4.1 JavaMail을 이용한 메일 발송 기능 JavaMail 메일 발송 javax.mail.JavaMail 클래스 사용 sendUpgradeEmail() 메소드 추가

5.4.2 JavaMail이 포함된 코드의 테스트 개발 중 JavaMail 관련 테스트시 고려점 개발 중 메일 서버가 부재한(올바르지 않은) 경우의 테스트 실패 개발 중 메일 서버가 올바르게 동작한다고 해도 매번 메일을 보내는 것이 올바른가? 테스트 실행은 빈번하게 발생 그 때 마다 메일 발송은 서버에 많은 부담 테스트시 수신자의 메일 주소는 올바른가? 괜찮은 해결책: 테스트용 메일 서버를 별도로 준비하여 사용

5.4.2 JavaMail이 포함된 코드의 테스트 개발 중 JavaMail 관련 테스트시 고려점 장점 매번 검증이 필요 없는 불필요한 메일 전송 요청을 보내지 않아도 됨 테스트가 빠르고 안전하게 수행됨

5.4.3 테스트를 위한 서비스 추상화 JavaMail을 이용한 테스트의 문제점 JavaMail의 핵심 클래스: javax.mail.Session Session 클래스의 경직성 Session은 인터페이스가 아니고 클래스 생성자가 private이라 직접 객체 생성 불가능 스태틱 팩토리 메소드를 이용하여 객체 Session 클래스는 상속이 불가능한 final 클래스 MailMessage와 Transport 클래스도 마찬가지임 JavaMail의 구현을 테스트용으로 바꿔치기가 거의 불가능

5.4.3 테스트를 위한 서비스 추상화 스프링의 JavaMail 추상화 스프링의 JavaMail 관련 클래스 및 코드 스프링은 java가 제공하는 JavaMail을 사용해 만든 코드가 테스트에 용이치 않은점을 인지하고 별도로 추상화 기능을 제공하고 있음 스프링의 JavaMail 관련 클래스 및 코드 MailSender/MailMessage 인터페이스 SimpleMailMessage 클래스

5.4.3 테스트를 위한 서비스 추상화 스프링의 JavaMail 관련 클래스 및 코드 JavaMailSender 인터페이스와 JavaMailSenderImpl 클래스 지저분한 try/catch 블록이 사라짐 MailException 런타임 예외 사용

5.4.3 테스트를 위한 서비스 추상화 스프링의 JavaMail 관련 클래스 및 코드 스프링의 DI 적용

5.4.3 테스트를 위한 서비스 추상화 스프링의 JavaMail 관련 클래스 및 코드 설정 파일 내의 빈 등록 현재까지는 기존 Java에서 제공하는 JavaMail API에서 스프링의 JavaMail API를 사용하도록 변경 메일 전송 기능을 인터페이스를 사용하여 추상화 DI를 통한 구체적 클래스 완전 분리 테스트에 활용하기가 매우 용이

5.4.3 테스트를 위한 서비스 추상화 테스트용 메일 발송 객체 테스트용 MailSender 클래스인 DummyMailSender 구현 send() 메소드가 실제로 하는 일이 없음 콘솔에 메일 내용을 출력하는 정도로 업그레이드 가능

5.4.3 테스트를 위한 서비스 추상화 테스트용 메일 발송 객체 DummyMailSender 빈 등록 UserServerTest 클래스에 테스트시 구현한 upgradeAllOrNothing() 메소드에도 mailSender 빈을 수동으로 주입

5.4.3 테스트를 위한 서비스 추상화 테스트와 서비스 추상화 서비스 추상화 기능은 유사하나 사용 방법이 다른 로우레벨의 다양한 기술에 대해 추상 인터페이스와 일관성 있는 접근 방법을 제공해 주는 것 스프링의 JavaMail 서비스 추상화 사용 JavaMail 의 구체적 기능이 변경되어도 클라이언트인 UserService는 전혀 수정할 필요가 없음

5.4.4 테스트 대역 의존 객체의 변경을 통한 테스트 방법 UserDaoTest는 UserDao의 동작을 테스트하기 위함 테스트시에는 SimpleDataSource를 사용하여 실제 운영하여 서버 활용을 못하게 막음 그럼에도 불구하고, 다음과 같은 단점 존재 테스트 DB와의 연결 SimpleDataSource 빈 생성 및 UserDao로의 DI 작업 UserDao 테스트만을 목적으로 한다면 위의 간단한 작업들 모두 번거로운 짐이 됨

5.4.4 테스트 대역 의존 객체의 변경을 통한 테스트 방법 UserServiceTest는 UserService의 동작을 테스트하기 위함 테스트시에는 DummyMailServer를 사용하여 실제 메일 전송차단 이 경우 그 외 번거로운 작업은 없음

5.4.4 테스트 대역 테스트 대상 객체의 의존성 문제 테스트 대역 (Test Double) UserService: 테스트 대상 객체 UserService는 DI를 통해 주입받는 객체가 세가지임 즉, UserService는 이 세가지 객체에 의존적이 됨 문제점 간단하게 UserService만을 테스트하기 위하여 DI를 통하여 세가지 객체를 주입하는 거창한 작업이 뒤따름 테스트 대역 (Test Double) 테스트 대상 객체가 사용하는 의존 객체들을 대체할 수 있도록 만든 객체 즉, 테스트 대상 객체가 원활하게 동작할 수 있도록 도우면서 테스트를 위해 간접적인 정보를 제공해주기도 함 종류: 테스트 스텁 (Test Stub)과 목 객체 (Mock Object)

5.4.4 테스트 대역 테스트 스텁 (Test Stub) 테스트 대상 객체의 의존객체로서 존재하면서 테스트 동안에 코드가 정상적으로 수행할 수 있도록 돕는 객체 테스트 코드 내부에서만 간접적으로 사용 테스트시에 DI를 통하여 테스트 대상 객체에 주입함 예: DummyMailSender 테스트 스텁의 한계 테스트 대상 객체의 메소드가 돌려주는 결과뿐 아니라 의존 객체가 넘기는 값과 그 행위 자체에 대한 검증이 불가함

5.4.4 테스트 대역 목 객체 (Mock Object) 테스트 대상 객체와 의존 객체 사이에서 일어나는 일을 검증할 수 있도록 특별히 설계된 객체 테스트 스텁처럼 테스트 객체가 정상적으로 실행되도록 도와주면서 테스트 객체와 자신 사이에서 일어나는 내용을 저장해 두었다가 테스트 결과를 검증하는 데 활용할 수 있도록 도와줌 (1)~(4)까지는 테스트 스텁과 동일한 기능 (5): 목 객체는 테스트 대상 객체와 자신 사이에 주고받는 정보를 보존하고 테스트에게 직접 그 정보를 제공한다.

5.4.4 테스트 대역 목 객체를 이용한 테스트 upgradeLevels() 테스트의 확장 메일 전송이 실제로 되었다는 점을 어느 정도 확인할 수 있도록 확장 send() 메소드가 수행되면 수신자의 메일 주소를 저장 외부에서는 접근자 메소드 getRequest()를 통해 저장해둔 메일 주소 확인 가능

5.4.4 테스트 대역 목 객체를 이용한 테스트 목 객체는 테스트 대상 객체의 내부에서 일어나는 일이나 자신과 함께 일어나는 일들에 대해 검증하게 해줌