SlideShare a Scribd company logo
TDD Live
Spring Camp 2013 with Scala
최범균 (madvirus@madvirus.net, 트위터: @madvirus)
목표
● TDD 느껴보기
○ 조금 더 현실에서 볼 만한 예제
○ 코딩 하는 과정을 지켜보면서 ‘아~’ 하는 느낌 얻기
● 사전 필요 지식
○ JUnit, Mock에 대한 기본 지식 필요
● TDD가 뭔지는 설명하지 않음
TDD
● Test Driven Development 테스트 주도 개발
○ 제품 코드 만들기 전에 테스트 먼저 작성하기
● 기본 흐름 (완료할 때 까지 반복)
● 테스트 작성 순서
○ 쉬운 것, 예외적인 것 → 어려운 것, 정상적인 것
실패 테스트
작성
테스트
성공시키기
코드
청소하기
구현해 볼 것
● 웹 로그인 기능
Login
Controller
Login
Command
AuthService
Authentication
UserRepository
User
라이브 1 - AuthService
● 인증 서비스
Login
Controller
Login
Command
AuthService
Authentication
UserRepository
User
라이브 1 - AuthService
● TDD 순서
○ 테스트 클래스 만들기
○ 객체 생성하기 (쉬운)
○ ID 값이 비정상인 경우 (쉬운, 정상에서 벗어난)
○ PW 값이 비정상인 경우 (쉬운, 정상에서 벗어난)
○ User가 존재하지 않는 경우 (정상에서 벗어난)
○ ID에 해당하는 User가 존재하는데, PW가 일치하지
않는 경우 (정상에서 벗어난)
○ ID와 PW가 일치하는 경우 (정상)
■ 인증 정보를 리턴
라이브2 - LoginController
● 웹 요청 처리
Login
Controller
Login
Command
AuthService
Authentication
UserRepository
User
라이브 2 - LoginContrller
● LoginController
○ 비슷한 순서로 진행
■ 폼 요청 처리 (쉬움)
■ 폼 전송 시, LoginCommand 값 이상, 폼 뷰 리턴
(비정상)
■ 폼 전송 시, ID/PW 불일치, 폼 뷰 리턴 (비정상)
■ 폼 전송 시, ID/PW 일치, 성공 뷰 리턴 (정상)
● 쿠키 생성 확인
* 시간 관계상, 거의 만들어진 코드로 살펴 봄
라이브 3 - Spring MVC 테스트
● 웹 관점에서 컨트롤러 테스트
○ 컨트롤러 설정이 올바른지 확인
○ 응답 결과(JSON/XML 등)과 올바른지 확인
● 브라우저/서버 NO! 테스트 코드 YES!
○ spring-mvc-test 사용
● 여기선 맛 보기만
○ 더 자세한 내용은 이어지는 세션에서!
우릴 기다리는 더 많은 이야기...
● 스프링 통합 테스트
○ @RunWith(SpringJUnit4ClassRunner.class)
● 스프링 MVC 테스트
○ MockMVC: 바로 다음 세션!
● DB 통합 테스트
○ DB Unit
● 테스트 계층 구조
○ @RunWith(Enclosed.class)
정리
● TDD 장점
○ 짧은 호흡
■ 흐름(컨텍스트)을 유지, 집중력 향상
■ 문제 찾기 용이
● 테스트 직전에 작성한 코드에서 문제 발생 가능성 높음
○ 점진적 코드 완성
■ 필요한 코드만 쓰도록 유도
○ 회귀(regression) 테스트 기반
■ 코드 수정에 대한 자신감, 과감한 리팩토링 가능
● Mock
○ 외부 시스템 없이 핵심 코드 작성 가능
○ 필요한 경우 임시 구현 사용
참고자료
● TDD 관련 서적
○ 테스트 주도 개발 (켄트 벡 저)
○ 객체 지향 설계와 실천 (스티브 프리먼 저)
○ Test Driven (Lasse Koskela)
● 본 강의 자료
○ http://javacan.tistory.com/entry/TDD-Live-in-SpringCamp-2013
■ 본 발표 자료와 강의 영상 포함
● TDD 관련 비디오
○ 백명석님 TDD 강의 자료 (4회)
■ http://youtu.be/wmHV6L0e1sU (TDD 1)
■ http://youtu.be/c-Pv2ia05Ek (TDD 2)
■ http://youtu.be/fFwDMzML7hI (TDD 3)
■ http://youtu.be/X4JtF2BfA0U (TDD 4)
광고
● 코드 리뷰 함께 해요!
○ 코드에 대한 리뷰를 받아보고 싶은데
■ 마땅한 선배 개발자가 없나요?
■ 주변이 다들 바쁜가요?
○ 자리를 만들어서 같이 리뷰해 보아요~
■ 준비물은 코드를 볼 수 있으면 됨 (노트북, IDE)
○ 연락주세요!
■ 이메일: madvirus@madvirus.net
■ 트위터: @madvirus
○ 그냥 개발 얘기도 합니다.
Q&A

More Related Content

What's hot

파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
정주 김
 
TDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDSuwon Chae
 
C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
선협 이
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
KH Park (박경훈)
 
목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해
Yong Hoon Kim
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
Ji Heon Kim
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
Sunghyouk Bae
 
TDD
TDDTDD
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
SangIn Choung
 
Tdd ver.2
Tdd ver.2Tdd ver.2
Tdd ver.2
Henry Lee
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
SangIn Choung
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
Taeyeop Kim
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
Sehun Kim
 
Work With Engineer
Work With EngineerWork With Engineer
Work With Engineer
Sungchul Park
 
JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개
Hyunil Shin
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
Suwon Chae
 

What's hot (17)

파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
 
TDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDD
 
C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
TDD
TDDTDD
TDD
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
Tdd ver.2
Tdd ver.2Tdd ver.2
Tdd ver.2
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
Work With Engineer
Work With EngineerWork With Engineer
Work With Engineer
 
JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 

Viewers also liked

간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기
beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
beom kyun choi
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
Sungchul Park
 
세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화
Jay JH Park
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
Jay JH Park
 
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
Jay JH Park
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝
Jay JH Park
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platform
Jay JH Park
 

Viewers also liked (9)

간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
 
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platform
 

Similar to Tdd live spring camp 2013

프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
Lee Geonhee
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
Minseok Jang
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test
라한사 아
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
Chris Ohk
 
애자일 하라
애자일 하라애자일 하라
애자일 하라
진수 허
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
Mijeong Park
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
SangIn Choung
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)
brain816
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
ukjinkwoun
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나JunHak Kim
 
Tdd
TddTdd
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
Choonghyun Yang
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
Ahreum Kim
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
Mijeong Park
 
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
DK Lee
 
SQL Server에서 Django를 추구하면 안 되는 걸까?
SQL Server에서 Django를 추구하면 안 되는 걸까?SQL Server에서 Django를 추구하면 안 되는 걸까?
SQL Server에서 Django를 추구하면 안 되는 걸까?
태환 김
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practicesHyunil Shin
 
dbt 101
dbt 101dbt 101
dbt 101
건 손
 

Similar to Tdd live spring camp 2013 (20)

Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test
 
Tdd
TddTdd
Tdd
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
애자일 하라
애자일 하라애자일 하라
애자일 하라
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나
 
Tdd
TddTdd
Tdd
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
 
SQL Server에서 Django를 추구하면 안 되는 걸까?
SQL Server에서 Django를 추구하면 안 되는 걸까?SQL Server에서 Django를 추구하면 안 되는 걸까?
SQL Server에서 Django를 추구하면 안 되는 걸까?
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practices
 
dbt 101
dbt 101dbt 101
dbt 101
 

More from beom kyun choi

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
beom kyun choi
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
beom kyun choi
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
beom kyun choi
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
beom kyun choi
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
beom kyun choi
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
beom kyun choi
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
beom kyun choi
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
beom kyun choi
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
beom kyun choi
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
beom kyun choi
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
beom kyun choi
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
beom kyun choi
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료beom kyun choi
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
beom kyun choi
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
beom kyun choi
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
beom kyun choi
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
beom kyun choi
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
beom kyun choi
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
beom kyun choi
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
beom kyun choi
 

More from beom kyun choi (20)

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
 

Tdd live spring camp 2013

  • 1. TDD Live Spring Camp 2013 with Scala 최범균 (madvirus@madvirus.net, 트위터: @madvirus)
  • 2. 목표 ● TDD 느껴보기 ○ 조금 더 현실에서 볼 만한 예제 ○ 코딩 하는 과정을 지켜보면서 ‘아~’ 하는 느낌 얻기 ● 사전 필요 지식 ○ JUnit, Mock에 대한 기본 지식 필요 ● TDD가 뭔지는 설명하지 않음
  • 3. TDD ● Test Driven Development 테스트 주도 개발 ○ 제품 코드 만들기 전에 테스트 먼저 작성하기 ● 기본 흐름 (완료할 때 까지 반복) ● 테스트 작성 순서 ○ 쉬운 것, 예외적인 것 → 어려운 것, 정상적인 것 실패 테스트 작성 테스트 성공시키기 코드 청소하기
  • 4. 구현해 볼 것 ● 웹 로그인 기능 Login Controller Login Command AuthService Authentication UserRepository User
  • 5. 라이브 1 - AuthService ● 인증 서비스 Login Controller Login Command AuthService Authentication UserRepository User
  • 6. 라이브 1 - AuthService ● TDD 순서 ○ 테스트 클래스 만들기 ○ 객체 생성하기 (쉬운) ○ ID 값이 비정상인 경우 (쉬운, 정상에서 벗어난) ○ PW 값이 비정상인 경우 (쉬운, 정상에서 벗어난) ○ User가 존재하지 않는 경우 (정상에서 벗어난) ○ ID에 해당하는 User가 존재하는데, PW가 일치하지 않는 경우 (정상에서 벗어난) ○ ID와 PW가 일치하는 경우 (정상) ■ 인증 정보를 리턴
  • 7. 라이브2 - LoginController ● 웹 요청 처리 Login Controller Login Command AuthService Authentication UserRepository User
  • 8. 라이브 2 - LoginContrller ● LoginController ○ 비슷한 순서로 진행 ■ 폼 요청 처리 (쉬움) ■ 폼 전송 시, LoginCommand 값 이상, 폼 뷰 리턴 (비정상) ■ 폼 전송 시, ID/PW 불일치, 폼 뷰 리턴 (비정상) ■ 폼 전송 시, ID/PW 일치, 성공 뷰 리턴 (정상) ● 쿠키 생성 확인 * 시간 관계상, 거의 만들어진 코드로 살펴 봄
  • 9. 라이브 3 - Spring MVC 테스트 ● 웹 관점에서 컨트롤러 테스트 ○ 컨트롤러 설정이 올바른지 확인 ○ 응답 결과(JSON/XML 등)과 올바른지 확인 ● 브라우저/서버 NO! 테스트 코드 YES! ○ spring-mvc-test 사용 ● 여기선 맛 보기만 ○ 더 자세한 내용은 이어지는 세션에서!
  • 10. 우릴 기다리는 더 많은 이야기... ● 스프링 통합 테스트 ○ @RunWith(SpringJUnit4ClassRunner.class) ● 스프링 MVC 테스트 ○ MockMVC: 바로 다음 세션! ● DB 통합 테스트 ○ DB Unit ● 테스트 계층 구조 ○ @RunWith(Enclosed.class)
  • 11. 정리 ● TDD 장점 ○ 짧은 호흡 ■ 흐름(컨텍스트)을 유지, 집중력 향상 ■ 문제 찾기 용이 ● 테스트 직전에 작성한 코드에서 문제 발생 가능성 높음 ○ 점진적 코드 완성 ■ 필요한 코드만 쓰도록 유도 ○ 회귀(regression) 테스트 기반 ■ 코드 수정에 대한 자신감, 과감한 리팩토링 가능 ● Mock ○ 외부 시스템 없이 핵심 코드 작성 가능 ○ 필요한 경우 임시 구현 사용
  • 12. 참고자료 ● TDD 관련 서적 ○ 테스트 주도 개발 (켄트 벡 저) ○ 객체 지향 설계와 실천 (스티브 프리먼 저) ○ Test Driven (Lasse Koskela) ● 본 강의 자료 ○ http://javacan.tistory.com/entry/TDD-Live-in-SpringCamp-2013 ■ 본 발표 자료와 강의 영상 포함 ● TDD 관련 비디오 ○ 백명석님 TDD 강의 자료 (4회) ■ http://youtu.be/wmHV6L0e1sU (TDD 1) ■ http://youtu.be/c-Pv2ia05Ek (TDD 2) ■ http://youtu.be/fFwDMzML7hI (TDD 3) ■ http://youtu.be/X4JtF2BfA0U (TDD 4)
  • 13. 광고 ● 코드 리뷰 함께 해요! ○ 코드에 대한 리뷰를 받아보고 싶은데 ■ 마땅한 선배 개발자가 없나요? ■ 주변이 다들 바쁜가요? ○ 자리를 만들어서 같이 리뷰해 보아요~ ■ 준비물은 코드를 볼 수 있으면 됨 (노트북, IDE) ○ 연락주세요! ■ 이메일: madvirus@madvirus.net ■ 트위터: @madvirus ○ 그냥 개발 얘기도 합니다.
  • 14. Q&A