Description
대한민국 전자정부 표준 프레임워크 스프링을 설명하는 No. 1 베스트셀러!

단순한 예제를 스프링 3.0과 스프링 3.1의 기술을 적용하며 발전시켜 나가는 과정을 통해 스프링의 핵심 프로그래밍 모델인 IoC/DI, PSA, AOP의 원리와 이에 적용된 다양한 디자인 패턴, 프로그래밍 기법을 이해할 수 있도록 도와준다. 이어지는 에서 상세히 소개하는 스프링 3.0과 스프링 3.1의 방대한 기술을 쉽게 이해하고 효과적으로 응용하는 데 필요한 기반 지식을 쌓도록 도와준다.

『토비의 스프링 3.1』은 스프링을 처음 접하거나 스프링을 경험했지만 스프링이 어렵게 느껴지는 개발자부터 스프링을 활용한 아키텍처를 설계하고 프레임워크를 개발하려고 하는 아키텍트에 이르기까지 모두 참고할 수 있는 스프링 완벽 바이블이다.

저자

이일민

지은이:이일민
호주의IT서비스기업인이프릴의대표컨설턴트다.엔터프라이즈오픈소스커뮤니티인오픈시드의대표이며한국스프링사용자모임(KSUG)의공동설립자이기도하다.8비트컴퓨터시절프로그래밍의매력에빠져10여년간취미로프로그래밍을즐겨오다전문개발자의길로들어서서19년째소프트웨어개발과교육,컨설팅일을해오고있다.2004년부터스프링을이용해서기업과학교,인터넷서비스업체의시스템을개발해왔고스프링을기반으로한애플리케이션프레임워크제작컨설팅과스프링개발자교육을해오고있다.JCO컨퍼런스에서세차례스프링을주제로발표했고기묘,이프릴,KSUG등을통해스프링세미나를진행하기도했다.스프링과오픈소스기술에관련된정보와경험을공유하는블로그(toby.epril.com)를운영하고있다.

  

목차

1장오브젝트와의존관계
___1.1초난감DAO
______1.1.1User
______1.1.2UserDao
______1.1.3main()을이용한DAO테스트코드
___1.2DAO의분리
______1.2.1관심사의분리
______1.2.2커넥션만들기의추출
_________UserDao의관심사항
_________중복코드의메소드추출
_________변경사항에대한검증:리팩토링과테스트
______1.2.3DB커넥션만들기의독립
_________상속을통한확장
___1.3DAO의확장
______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.8XML을이용한설정
______1.8.1XML설정
_________connectionMaker()전환
_________userDao()전환
_________XML의의존관계주입정보
______1.8.2XML을이용하는애플리케이션컨텍스트
______1.8.3DataSource인터페이스로변환
_________DataSource인터페이스적용
_________자바코드설정방식
_________XML설정방식
______1.8.4프로퍼티값의주입
_________값주입
_________value값의자동변환
___1.9정리

2장테스트
___2.1UserDaoTest다시보기
______2.1.1테스트의유용성
______2.1.2UserDaoTest의특징
_________웹을통한DAO테스트방법의문제점
_________작은단위의테스트
_________자동수행테스트코드
_________지속적인개선과점진적인개발을위한테스트
______2.1.3UserDaoTest의문제점
___2.2UserDaoTest개선
______2.2.1테스트검증의자동화
______2.2.2테스트의효율적인수행과결과관리
_________JUnit테스트로전환
_________테스트메소드전환
_________검증코드전환
_________JUnit테스트실행
___2.3개발자를위한테스팅프레임워크JUnit
______2.3.1JUnit테스트실행방법
_________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.2DI와테스트
_________테스트코드에의한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.1JDBCtry/catch/finally코드의문제점
______3.2.2분리와재사용을위한디자인패턴적용
_________메소드추출
_________템플릿메소드패턴의적용
_________전략패턴의적용
_________DI적용을위한클라이언트/컨텍스트분리
___3.3JDBC전략패턴의최적화
______3.3.1전략클래스의추가정보
______3.3.2전략과클라이언트의동거
_________로컬클래스
_________익명내부클래스
___3.4컨텍스트와DI
______3.4.1JdbcContext의분리
_________클래스분리
_________빈의존관계변경
______3.4.2JdbcContext의특별한DI
_________스프링빈으로DI
_________코드를이용하는수동DI
___3.5템플릿과콜백
______3.5.1템플릿/콜백의동작원리
_________템플릿/콜백의특징
_________JdbcContext에적용된템플릿/콜백
______3.5.2편리한콜백의재활용
_________콜백의분리와재활용
_________콜백과템플릿의결합
______3.5.3템플릿/콜백의응용
_________테스트와try/catch/finally
_________중복의제거와템플릿/콜백설계
_________템플릿/콜백의재설계
_________제네릭스를이용한콜백인터페이스
___3.6스프링의JdbcTemplate
______3.6.1update()
______3.6.2queryForInt()
______3.6.3queryForObject()
______3.6.4query()
_________기능정의와테스트작성
_________query()템플릿을이용하는getAll()구현
_________테스트보완
______3.6.5재사용가능한콜백의분리
_________DI를위한코드정리
_________중복제거
_________템플릿/콜백패턴과UserDao
___3.7정리

4장예외
___4.1사라진SQLException
______4.1.1초난감예외처리
_________예외블랙홀
_________무의미하고무책임한throws
______4.1.2예외의종류와특징
______4.1.3예외처리방법
_________예외복구
_________예외처리회피
_________예외전환
______4.1.4예외처리전략
_________런타임예외의보편화
_________add()메소드의예외처리
_________애플리케이션예외
______4.1.5SQLException은어떻게됐나?
___4.2예외전환
______4.2.1JDBC의한계
_________비표준SQL
_________호환성없는SQLException의DB에러정보
______4.2.2DB에러코드매핑을통한전환
______4.2.3DAO인터페이스와DataAccessException계층구조
_________DAO인터페이스와구현의분리
_________데이터액세스예외추상화와DataAccessException계층구조
______4.2.4기술에독립적인UserDao만들기
_________인터페이스적용
_________테스트보완
_________DataAccessException활용시주의사항
___4.3정리

5장서비스추상화
___5.1사용자레벨관리기능추가
______5.1.1필드추가
_________Level이늄
_________User필드추가
_________UserDaoTest테스트수정
_________UserDaoJdbc수정
______5.1.2사용자수정기능추가
_________수정기능테스트추가
_________UserDao와UserDaoJdbc수정
_________수정테스트보완
______5.1.3UserServi

출판사 서평

★이책에서다루는내용★

★스프링의3대핵심기술인IoC/DI,PSA,AOP를빠르고효과적으로배울수있는실전예제중심의설명
개발현장에서매일만나는평범한자바코드를스프링의핵심기술을적용해서깔끔하고스프링다운코드로개선해나가는과정을상세하게보여줌으로써스프링의핵심원리와적용방법을이해할수있게해준다.

★자바언어와JDBC만알면누구라도따라할수있는58단계의상세한스프링애플리케이션핵심코드개발과정
자바초보개발자도부담없이따라할수있도록58단계로세분화된애플리케이션핵심코드개발과정과58개의예제프로젝트를제공해복잡한스프링의기술을차근차근학습해나갈수있게해준다.

★스프링3.0과스프링3.1의최신기술활용방법과업그레이드전략제시
스프링3.0과스프링3.1의최신기술을이용해서애플리케이션을개발할때필요로하는친절한가이드라인을제공해준다.스프링3.0으로개발된예제를스프링3.1의기술에맞게전환하는과정을상세하게보여준다.

★스프링애플리케이션아키텍처설계와스프링기반프레임워크제작을위한완벽가이드
스프링을이용한엔터프라이즈애플리케이션아키텍처작성을위한다양한아키텍처소개와전략분석,스프링을기반으로한사내프레임워크제작에꼭필요한스프링확장기법과원리를소개한다.

★이책의구성★

스프링이공개된지이미9년째이고많은개발자가스프링을사용해애플리케이션을개발해오고있다.그럼에도적지않은수의개발자들은스프링의핵심가치와혜택을충분히누리지못하는듯하다.스프링의가치를제대로누리며사용하려면스프링을제대로공부해야한다.스프링을효과적으로익히려면다음의세가지단계를통해스프링을학습해야한다.

▶스프링의핵심가치와원리에대한이해
▶스프링의기술에대한지식과선택기준정립
▶스프링의적용과확장

이책은이세가지단계를따라서스프링을공부하려는사람을대상으로쓰여진책으로,Vol.1에서는첫단계인'핵심가치와원리에대한이해'를중심으로하고,Vol.2에서는두번째단계인'스프링기술에대한지식과선택'을집중해서다룬다.세번째단계인확장에대해서는책의여러곳에서다양한전략과예제,힌트를제공한다.하지만본격적으로응용과확장에대한지식을쌓는일은독자들의몫이다.각자의상황에맞게처음두단계에서배운지식을응용해스프링을확장해보는훈련을해야한다.



의구성과예제



Vol.1에서는간단한예제를만들어가는과정을통해스프링의기본원리와핵심기술을설명한다.스프링은개발자가만드는코드가얹혀서동작하는프레임워크다.프레임워크의가장중요한목적은개발자가일정한틀을따라효과적으로애플리케이션을개발하도록돕는것이다.따라서프레임워크를잘이해하려면프레임워크를사용했을때애플리케이션코드가어떻게만들어지는지자세히살펴봐야한다.



Vol.1에서는각장마다스프링프레임워크를사용하지않고개발한단순한코드를먼저작성해보고,여러단계를거쳐최종적으로스프링프레임워크를활용한코드로발전시킨다.프레임워크를적용하지않았을때의코드와적용후의코드를비교하면서스프링프레임워크를사용하면어떤식으로코드가만들어져야하는지를설명한다.



Vol.1에서다루는내용은Vol.2에서본격적으로소개할스프링의다양한기술을이해하는데중요한기반이된다.스프링에적용된기본패턴과기반이되는원리를Vol.1에서설명하는순서에따라학습해두면이후에스프링의개별기술과API를익힐때많은도움이될것이다.



1장부터7장까지는사용자관리기능을구현하는하나의예제를만드는과정을단계적으로설명한다.예제는처음부터끝까지모두연결된다.코드를지속적으로개선하면서발전시키기때문에코드가계속바뀌고새로운클래스가추가되거나사라지기도한다.부록CD의예제들은각장에서코드가바뀌는주요절별로제공된다.가능하면Vol.1의예제는책의내용을참고해서직접따라해보기를권장한다.코드가만들어지고개선되고발전하는과정을직접체험하는것이Vol.1의내용을이해하는데가장좋은방법이다.



스프링3.1의새로운기술을다루는7.6절을제외한나머지모든예제는스프링3.0을기준으로사용할라이브러리를소개한다.모든내용은스프링3.1에서도동일하게적용되므로스프링3.1을이용해예제를작성해도무방하다.부록CD에는스프링3.0과3.1버전으로각각작성된Vol.1의예제프로젝트가담겨있다.





[부록CD수록]



-이책에들어있는모든예제의소스코드

-스프링3.0과스프링3.1의기술활용법을보여주는학습테스트코드

-스프링@MVC를이용한웹애플리케이션프로젝트





★이책의대상독자★



이책은스프링을이용해서엔터프라이즈자바애플리케이션을개발하려는모든개발자를대상으로한다.이책을공부하기위해서는자바언어와JDBC를이용한DB프로그래밍,그리고기초적인웹개발지식이필요하다.





★스프링3.1의새로운기능★



스프링3.1에추가된주요한기능과특징은다음과같다.



강화된자바코드를이용한빈설정

스프링3.1은스프링3.0부터지원하기시작한자바코드를이용한빈설정방식을대폭확장해서스프링빈설정의거의모든영역으로확대했다.기존에XML로작성했던스프링설정정보를3.1에서는자바코드로대체할수있다.XML을전혀사용하지않고스프링애플리케이션을작성할수도있다.자바코드를이용한빈설정을위해다양한애노테이션이추가됐다.XML의전용커스텀태그를대체할수있는,@Enable로시작하는전용애노테이션도제공된다.



런타임환경추상화

스프링애플리케이션이실행되는런타임환경정보를추상화한환경오브젝트가컨테이너를통해제공된다.실행환경에따라달라지는빈설정을효과적으로관리할수있는프로파일과각종프로퍼티정보를컨테이너를통해일관된방식으로제공할수있게해주는프로퍼티소스가환경오브젝트가제공하는주요기능이다.



JPA지원확장과하이버네이트4지원

하이버네이트4지원기능이새롭게추가됐다.JPA를이용할때보다편리하게설정정보를작성할수있는편리한기능도추가됐다.



새로운DispatcherServlet전략과플래시맵

스프링3.0에서사용되던DispatcherServlet전략의일부가새롭게설계된전략으로대체됐다.이를통해MVC기능을확장하기가편리해졌다.Post/Redirect/Get패턴에사용할수있는플래시맵기능도추가됐다.



캐시추상화

AOP를이용한메소드레벨의캐시추상화기능이추가됐다.이를이용해캐시구현기술에독립적인방식으로애플리케이션빈에캐시기능을적용할수있게됐다.맵을이용한간단한캐시구현부터ehcache를이용한고급캐시기술까지지원한다.





★『토비의스프링3.1』추천의글★



스프링의아버지로드존슨은'객체지향설계는특정구현기술보다,심지어자바보다도더중요하다.'고말했다.『토비의스프링3』책은그가치를잘담아냈다.테스트하기쉬운코드,구성요소의역할과책임을섬세하게나누는설계등이책에서강조하는기법은프로그래밍을하는사람이면누구나새겨볼만한내용이다.거기에비해어쩌면최신기술의소개라는측면은부차적일지도모른다.그럼에도최신스프링3.1에맞춰개정판이나온다는소식은반갑기그지없다.이제이책이단순히흘러가는트렌드를잡는책이아니라『수학의정석』처럼꾸준히개정되며늘우리에게지식과통찰을주는스테디셀러로자리잡기를기원한다.

-정상혁/NHNTechnologyService신규서비스개발팀차장



스프링활용법뿐아니라그원리까지쉽게이해할수있도록풀어서설명하는이책은대규모프로젝트에서정형화된업무로직의반복된구현에지친SI개발자분들에게학습의즐거움과더나은코드를만들어가는과정에서실력이늘어가는개발의재미를다시금느끼게해줄것입니다.최근들어서는3.0에서3.1,3.2로발전해나가는스프링의발전방향을눈여겨보는분들도많을것이다.이처럼매우적절한시기에스프링3.1을다루는개정판까지나온다니,클라우드,빅데이터등점점복잡해지는IT환경의변화를수용하기위해스프링이어떻게변해가는지도이책을통해엿볼수있을것입니다.

-김승권/금융분야독립컨설턴트





★『토비의스프링3』추천의글★



저자인이일민씨를아는사람에게는긴설명이필요없겠지만,잘모르는분을위해이책의고유한가치를몇가지떠올려봤다.

첫째,뛰어난강사이기도한저자의효과적인강의스타일을담아낸책의이야기전개다.저자는대뜸스프링이가진기술을나열하기보단친숙한자바코드(초난감DAO)를내밀었다.책을읽어가면점차독자는흔히쓰이던코드의문제점에공감하고,여러가지방식으로개선해가는여정을함께한다.책과함께고민한독자라면여정의끝에서스프링을쓰는이유와어떤게올바른사용법인지배울수있다.사실이런전개는정말뛰어난외국서적에서는종종볼수있는방식이지만,한글기술서로한정하면가히독보적이라할수있다.

둘째,사상과활용법을모두담은넓은효용성이다.시중에두꺼운기술서는드물지않지만,이책은API설명이나화면캡처로지면을할애하지않았다.책전반부는객체지향프로그래밍관점에서어떤코드가좋은코드인지를다루면서왜스프링을써야하는지를설명하고,후반부는스프링을구성하는요소기술을올바르게사용하는방법을빠짐없이설명하고있음을상기하면책의두께는놀랍도록얇다(?).학습과제에만초점을맞출수있도록구성한장의구성과단계별예제는SoC(SeparationofConcerns)를통해방대한내용을모두담아내기위해저자가각고해노력한결과물이다.

셋째,책의내용과예제코드의정확함이다.프로그래밍서적으로공부할때예제가작동하지않아시간을허비한경험이있는개발자는드물지않다.1부는테스트주도로진행하고,2부도예제전부가테스트코드형태로만들어져결함을막았다.한편개념설명을위해다이어그램을활용하고코드에도충분한부연설명을붙인결과,섬세하고정확한내용이만들어졌다.

변변한책이없던시절스프링을이해하기위해어쩔수없이스프링소스코드를봤다.스프링소스코드는객체를조직화하는설계에대한모범답안과도같았다.하지만방대한코드만보고의도를모두익힐수는없었다.그후에로드존슨의책을반복해읽으면서스프링을이해할수록감탄하고또감탄했다.다행스럽게도지금스프링을공부하는여러분에게는더나은방법을제시할수있다.로드존슨이했던이야기를로드존슨은할수없는우리말로읽을수있다.그리고진정한고수개발자로꾸준히노력해온이일민씨의노하우를함께배울수있다.

-안영회(http://younghoe.info)

한국스프링사용자모임공동설립자,(주)아이티와이즈컨설팅컨설턴트



이책은스프링의핵심가치를전달하는데집중하고있다.로드존슨이쓴『J2EEDevelopmentwithoutEJB』이후로지금까지출간된스프링서적중에서이책만큼스프링의핵심가치를제대로전달한책은보지못했다.이책은스프링을사용하지않더라도자바를기반으로애플