토비의 스프링 3.1 Vol. 1: 스프링의 이해와 원리
대한민국 전자정부 표준 프레임워크 스프링을 설명하는 No. 1 베스트셀러!
단순한 예제를 스프링 3.0과 스프링 3.1의 기술을 적용하며 발전시켜 나가는 과정을 통해 스프링의 핵심 프로그래밍 모델인 IoC/DI, PSA, AOP의 원리와 이에 적용된 다양한 디자인 패턴, 프로그래밍 기법을 이해할 수 있도록 도와준다. 이어지는
『토비의 스프링 3.1』은 스프링을 처음 접하거나 스프링을 경험했지만 스프링이 어렵게 느껴지는 개발자부터 스프링을 활용한 아키텍처를 설계하고 프레임워크를 개발하려고 하는 아키텍트에 이르기까지 모두 참고할 수 있는 스프링 완벽 바이블이다.
저자 이일민은 호주의 IT 서비스 기업인 이프릴의 대표 컨설턴트다. 엔터프라이즈 오픈소스 커뮤니티인 오픈시드의 대표이며 한국스프링사용자모임(KSUG)의 공동설립자이기도 하다. 8비트 컴퓨터 시절 프로그래밍의 매력에 빠져 10여 년간 취미로 프로그래밍을 즐겨오다 전문 개발자의 길로 들어서서 19년째 소프트웨어 개발과 교육, 컨설팅 일을 해오고 있다. 2004년부터 스프링을 이용해서 기업과 학교, 인터넷 서비스 업체의 시스템을 개발해왔고 스프링을 기반으로 한 애플리케이션 프레임워크 제작 컨설팅과 스프링 개발자 교육을 해오고 있다. JCO 컨퍼런스에서 세 차례 스프링을 주제로 발표했고 기묘, 이프릴, KSUG 등을 통해 스프링 세미나를 진행하기도 했다. 스프링과 오픈소스 기술에 관련된 정보와 경험을 공유하는 블로그를 운영하고 있다.
1장 오브젝트와 의존관계
1.1 초난감 DAO
1.1.1 User
1.1.2 UserDao
1.1.3 main()을 이용한 DAO 테스트 코드
1.2 DAO의 분리
1.2.1 관심사의 분리
1.2.2 커넥션 만들기의 추출
UserDao의 관심사항
중복 코드의 메소드 추출
변경사항에 대한 검증: 리팩토링과 테스트
1.2.3 DB 커넥션 만들기의 독립
상속을 통한 확장
1.3 DAO의 확장
1.3.1 클래스의 분리
1.3.2 인터페이스의 도입
1.3.3 관계설정 책임의 분리
1.3.4 원칙과 패턴
개방 폐쇄 원칙
높은 응집도와 낮은 결합도
전략 패턴
1.4 제어의 역전(IoC)
1.4.1 오브젝트 팩토리
팩토리
설계도로서의 팩토리
1.4.2 오브젝트 팩토리의 활용
1.4.3 제어권의 이전을 통한 제어관계 역전
1.5 스프링의 IoC
1.5.1 오브젝트 팩토리를 이용한 스프링 IoC
애플리케이션 컨텍스트와 설정정보
DaoFactory를 사용하는 애플리케이션 컨텍스트
1.5.2 애플리케이션 컨텍스트의 동작방식
1.5.3 스프링 IoC의 용어 정리
1.6 싱글톤 레지스트리와 오브젝트 스코프
1.6.1 싱글톤 레지스트리로서의 애플리케이션 컨텍스트
서버 애플리케이션과 싱글톤
싱글톤 패턴의 한계
싱글톤 레지스트리
1.6.2 싱글톤과 오브젝트의 상태
1.6.3 스프링 빈의 스코프
1.7 의존관계 주입(DI)
1.7.1 제어의 역전(IoC)과 의존관계 주입
1.7.2 런타임 의존관계 설정
의존관계
UserDao의 의존관계
UserDao의 의존관계 주입
1.7.3 의존관계 검색과 주입
1.7.4 의존관계 주입의 응용
기능 구현의 교환
부가기능 추가
1.7.5 메소드를 이용한 의존관계 주입
1.8 XML을 이용한 설정
1.8.1 XML 설정
connectionMaker() 전환
userDao() 전환
XML의 의존관계 주입 정보
1.8.2 XML을 이용하는 애플리케이션 컨텍스트
1.8.3 DataSource 인터페이스로 변환
DataSource 인터페이스 적용
자바 코드 설정 방식
XML 설정 방식
1.8.4 프로퍼티 값의 주입
값 주입
value 값의 자동 변환
1.9 정리
2장 테스트
2.1 UserDaoTest 다시 보기
2.1.1 테스트의 유용성
2.1.2 UserDaoTest의 특징
웹을 통한 DAO 테스트 방법의 문제점
작은 단위의 테스트
자동수행 테스트 코드
지속적인 개선과 점진적인 개발을 위한 테스트
2.1.3 UserDaoTest의 문제점
2.2 UserDaoTest 개선
2.2.1 테스트 검증의 자동화
2.2.2 테스트의 효율적인 수행과 결과 관리
JUnit 테스트로 전환
테스트 메소드 전환
검증 코드 전환
JUnit 테스트 실행
2.3 개발자를 위한 테스팅 프레임워크 JUnit
2.3.1 JUnit 테스트 실행 방법
IDE
빌드 툴
2.3.2 테스트 결과의 일관성
deleteAll()의 getCount() 추가
deleteAll()과 getCount()의 테스트
동일한 결과를 보장하는 테스트
2.3.3 포괄적인 테스트
getCount() 테스트
addAndGet() 테스트 보완
get() 예외조건에 대한 테스트
테스트를 성공시키기 위한 코드의 수정
포괄적인 테스트
2.3.4 테스트가 이끄는 개발
기능설계를 위한 테스트
테스트 주도 개발
2.3.5 테스트 코드 개선
@Before
픽스처
2.4 스프링 테스트 적용
2.4.1 테스트를 위한 애플리케이션 컨텍스트 관리
스프링 테스트 컨텍스트 프레임워크 적용
테스트 메소드의 컨텍스트 공유
테스트 클래스의 컨텍스트 공유
@Autowired
2.4.2 DI와 테스트
테스트 코드에 의한 DI
테스트를 위한 별도의 DI 설정
컨테이너 없는 DI 테스트
DI를 이용한 테스트 방법 선택
2.5 학습 테스트로 배우는 스프링
2.5.1 학습 테스트의 장점
2.5.2 학습 테스트 예제
JUnit 테스트 오브젝트 테스트
스프링 테스트 컨텍스트 테스트
2.5.3 버그 테스트
2.6 정리
3장 템플릿
3.1 다시 보는 초난감 DAO
3.1.1 예외처리 기능을 갖춘 DAO
JDBC 수정 기능의 예외처리 코드
JDBC 조회 기능의 예외처리
3.2 변하는 것과 변하지 않는 것
3.2.1 JDBC try/catch/finally 코드의 문제점
3.2.2 분리와 재사용을 위한 디자인 패턴 적용
메소드 추출
템플릿 메소드 패턴의 적용
전략 패턴의 적용
DI 적용을 위한 클라이언트/컨텍스트 분리
3.3 JDBC 전략 패턴의 최적화
3.3.1 전략 클래스의 추가 정보
3.3.2 전략과 클라이언트의 동거
로컬 클래스
익명 내부 클래스
3.4 컨텍스트와 DI
3.4.1 JdbcContext의 분리
클래스 분리
빈 의존관계 변경
3.4.2 JdbcContext의 특별한 DI
스프링 빈으로 DI
코드를 이용하는 수동 DI
3.5 템플릿과 콜백
3.5.1 템플릿/콜백의 동작원리
템플릿/콜백의 특징
JdbcContext에 적용된 템플릿/콜백
3.5.2 편리한 콜백의 재활용
콜백의 분리와 재활용
콜백과 템플릿의 결합
3.5.3 템플릿/콜백의 응용
테스트와 try/catch/finally
중복의 제거와 템플릿/콜백 설계
템플릿/콜백의 재설계
제네릭스를 이용한 콜백 인터페이스
3.6 스프링의 JdbcTemplate
3.6.1 update()
3.6.2 q