로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

토비의 스프링 3

 [오픈소스 프로그래밍 시리즈 14]
   
지은이 이일민   |   출판사 에이콘  |   발행일 2010년 08월 05일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 50,000원45,000원 10%
마일리지 5% 2,500원
발행일 2010-08-05
ISBN 8960771465 | 9788960771468
기타정보 국내서 | 1400쪽 | 양장본
예상출고일
배송비 무료배송
   
종합지수 21p 9 위
   
 

[출판사서평]

대한민국 전자정부 표준 프레임워크 기술로 선정된 스프링의 국내 최고 권위자 토비 이일민이 저술한 스프링 프레임워크 3 프로그래밍 완벽 바이블.
스프링의 핵심 프로그래밍 모델인 IoC/DI, PSA, AOP의 동작원리와 이를 다양한 방식으로 응용한 예제을 통해서 스프링을 빠르게 이해할 수 있고 엔터프라이즈 개발에 효과적으로 적용할 수 있는 접근방법을 소개한다. 또한 스프링 3.0의 최신 기술을 상세하게 소개하고 그 중에서 자신에게 맞는 최적의 기술을 선택하고 조합할 수 있는 기준과 전략을 다룬다. 스프링을 처음 접하거나 스프링을 경험했지만 스프링이 어렵게 느껴지는 개발자부터 스프링을 활용한 아키텍처를 설계하고 프레임워크를 개발하려고 하는 아키텍트에 이르기까지 모두 참고할 수 있는 스프링 종합 안내서다.


< 소개 >

★ 이 책에서 다루는 내용 ★

스프링의 3대 핵심 기술인 IoC/DI, PSA, AOP를 빠르고 효과적으로 배울 수 있는 실전 예제 중심의 설명
개발 현장에서 매일 만나는 평범한 자바코드를 스프링의 핵심 기술을 적용해서 깔끔하고 스프링다운 코드로 개선해나가는 과정을 상세하게 보여줌으로써 스프링의 핵심 원리와 적용 방법을 이해할 수 있게 해준다.
자바언어와 JDBC만 알면 누구라도 따라할 수 있는 52단계의 상세한 스프링 애플리케이션 핵심 코드 개발과정
자바 초보 개발자도 부담없이 따라할 수 있도록 52단계로 세분화된 애플리케이션 핵심코드 개발과정과 52개의 예제 프로젝트를 제공해 복잡한 스프링의 기술을 차근차근 학습해 나갈 수 있게 해준다.
DIJ/JavaConfig, OXM, @MVC, SpEL, Task, REST 등의 스프링 3.0의 최신 기술 소개
Java EE 6의 JSR-303과 자바코드를 이용한 최첨단 DI기술, XML 매핑을 위한 OXM, 기존 MVC를 완벽하게 대체한 강력한 웹 프레임워크인 @MVC, 스프링 공식 EL인 SpEL, JSR-303(BeanValidation)과 새로운 컨버터와 포매터 활용방법, 각종 비동기 작업을 위한 Task 기능, REST 템플릿 사용법 등 스프링 3.0의 새로운 기능을 기존 스프링 기술과 함께 상세히 소개한다.
스프링 기술 선택을 위한 상세한 기술 비교, 선택 기준 제시
같은 기술에도 수많은 옵션을 제공하는 스프링의 특성 때문에 기술 선택에 고민하는 개발자를 위해서 스프링이 제공하는 다양한 기술 옵션을 비교하고, 환경에 따른 적절한 선택을 위한 기준을 제공해준다.
스프링 애플리케이션 아키텍처 설계와 스프링 기반 프레임워크 제작을 위한 완벽 가이드
스프링 3.0을 이용한 엔터프라이즈 애플리케이션 아키텍처 작성을 위한 다양한 아키텍처 소개와 전략 분석, 스프링을 기반으로 한 사내 프레임워크 제작에 꼭 필요한 스프링 확장 기법을 소개한다.


★ 이 책의 구성 ★

이 책은 2부로 구성되어있다. 1부에서는 스프링의 기본원리와 핵심기술을 소개하고, 2부에서는 스프링의 개별 기술의 내용과 응용방법을 다룬다. 스프링을 차근차근 공부할 계획이라면 책의 순서를 따라서 먼저 1부를 공부한 후에 2부로 진행하는 것이 좋을 것이다. 만약 당장 스프링을 사용해 개발을 해야 하거나, 개별적인 기술의 사용방법이 궁금하다거나, 스프링 3.0의 새로운 기술에 대해서 알고 싶다면 일단 2부부터 시작해도 상관없다. 다만, 1부에서 소개하는 스프링의 핵심 기술과 프로그래밍 모델을 충분히 이해하지 못하면 2부에서 소개하는 기술을 효과적으로 적용하기 어려울 수 있다.

[부록 CD 수록]

- 이 책에 들어있는 모든 예제의 소스코드
- 스프링 3.0 기술의 활용법을 보여주는 학습 테스트 코드
- 스프링 3.0의 @MVC를 이용한 웹 애플리케이션 프로젝트


★ 이 책의 대상 독자 ★

이 책은 스프링을 이용해서 엔터프라이즈 자바 애플리케이션을 개발하려는 모든 개발자들을 대상으로 한다. 이 책을 공부하기 위해서는 자바 언어와 JDBC를 이용한 DB 프로그래밍, 그리고 기초적인 웹 개발 지식이 필요하다. 2부에는 스프링 외의 서드-파티 프레임워크나 Java EE 표준 기술을 스프링에 통합해서 사용하는 내용이 일부 포함되어있다. 이런 내용을 살펴볼 때는 관련 기술에 대한 지식이 추가로 필요할 수 있다.


★ 추천의 글 ★

한국스프링사용자모임(KSUG) 활동이나 프레임워크 전문가로 일하는 탓에 많은 사람에게 스프링 프레임워크 서적 추천 요구를 받아왔지만, 그때마다 기대하는 명쾌한 답을 줄 수 없었다. 대답은 늘 이런 식이었다. ‘설계 사상을 이해하시려면 로드 존슨(Rod Johnson)이 쓴 세 권의 빨간 표지 책이 가장 좋습니다. 다만, 영문으로 써있고 설명이 쉽지 않습니다. 한글로 쓰인 책 중에서는 OOO는 개념 설명은 좋은데 실제 상황에서 문제 푸는데 도움을 받기에는 부족합니다. OOO는 웹에 있는 공식 참조 문서(Reference Documentation)를 기준으로 개괄적인 내용을 정리한 책입니다. 처음 따라 할 의도라면 OOO가 좋습니다.’ 구구절절한 설명 배경은 자신 있게 추천할 수 있는 한글 책이 없다는 사실이다. 그러나 앞으로는 자신 있게 이 책을 추천할 수 있어 흐뭇하다.
저자를 아는 사람에게는 긴 설명이 필요 없겠지만, 저자를 모르는 분을 위해 이 책이 갖는 고유한 가치를 몇 가지 떠올려봤다.
첫째, 뛰어난 강사이기도 한 저자의 효과적인 강의 스타일을 담아낸 책의 이야기 전개다. 저자는 대뜸 스프링이 가진 기술을 나열하기보단 친숙한 자바 코드(초난감 DAO)를 내밀었다. 책을 읽어가면 점차 독자는 흔히 쓰이던 코드가 갖고 있는 문제에 대해 공감하고, 여러 가지 방식으로 개선해가는 여정을 함께한다. 책과 함께 고민한 독자라면 여정의 끝에서 스프링을 쓰는 이유와 어떤 방법이 올바른 사용인지 배울 수 있다. 사실 이러한 전개는 정말 뛰어난 외국 서적에서는 종종 볼 수 있는 방식이지만, 한글 기술서로 한정하면 독보적이라 할 수 있다.
둘째, 사상과 활용법을 모두 담은 넓은 효용성이다. 시중에 두꺼운 기술서는 드물지 않지만, 이 책이 API 설명이나 화면 캡처로 지면을 할애하지 않았다. 책 전반부는 객체지향프로그래밍 관점에서 어떤 코드가 좋은 코드인지를 다루면서 왜 스프링을 써야 하는지를 설명하고, 후반부는 스프링을 구성하는 요소 기술을 올바르게 사용하는 방법을 빠짐 없이 설명하고 있음을 상기하면 책의 두께는 놀랍도록 얇다(?). 학습과제에만 초점을 맞출 수 있도록 구성한 장의 구성과 단계별 예제는 SoC(Separation of Concerns)를 통해 방대한 내용을 모두 담아내기 위해 저자가 각고해 노력한 결과물이다.
셋째, 책의 내용과 예제 코드의 정확함이다. 프로그래밍 서적으로 공부할 때 예제가 작동하지 않아 시간을 허비한 경험이 있는 개발자는 드물지 않다. 1부는 테스트 주도로 진행하고, 2부도 예제 전부가 테스트 코드 형태로 만들어져 결함을 막았다. 한편 개념 설명을 위해 다이어그램을 활용하고 코드에도 충분한 부연 설명을 붙인 결과로 섬세하고 정확한 내용이 만들어졌다.
나름대로 객관적인 시각으로 책의 가치를 정리했더니 책을 볼 때 느낀 감동은 잘 드러나지 않아 개인적인 소회를 덧붙인다. 변변한 책이 없던 시절 스프링을 이해하기 위해서 어쩔 수 없이 스프링 소스코드를 보았다. 스프링 소스코드는 객체를 조직화 하는 설계에 대한 모범답안과도 같았다. 하지만, 방대한 코드만 보고 의도를 모두 익힐 수는 없었다. 그 후에 로드 존슨의 책을 반복해 읽으면서 스프링을 이해할수록 감탄하고 또 감탄했다. 다행스럽게도 지금 스프링을 공부하는 여러분에게는 더 나은 방법을 제시할 수 있다. 로드 존슨이 했던 이야기를 로드 존슨은 할 수 없는 우리말로 읽을 수 있다. 그리고 진정한 고수 개발자로 꾸준히 노력해온 이일민씨의 노하우를 함께 배울 수 있다.
이일민씨는 한국스프링사용자모임의 공동 설립자다. 2007년 우리는 수 차례 공개 세미나를 통해 스프링을 알렸다. 이 책은 이일민씨의 수많은 고민과 생각을 그러모아 담아낸 결정체다. 지금보다 많은 자바 개발자가 이 책을 읽고 진정한 설계에 대해 고민을 함께 하는 모습을 상상해본다. 그리고 이일민씨의 다음 행보를 기대한다. J

- 안영회 (http://younghoe.info)
한국스프링사용자모임공동설립자 / ㈜아이티와이즈컨설팅 컨설턴트


엔터프라이즈 애플리케이션의 업무 난이도는 증가하고 있으며 사용자의 눈높이는 지속적으로 높아지고 있다. 하지만 자바 기술(특히 JEE)은 이 같은 요구사항을 만족시키기에 기술적으로 점점 더 복잡해져 가고 있는 것이 현실이다. 자바를 기반으로 엔터프라이즈 애플리케이션을 개발하려면 많은 학습 시간과 경험을 필요로 한다. 스프링은 2008년 SpringOne에서 자바를 기반으로 한 엔터프라이즈 애플리케이션 개발에 대한 복잡도와의 전쟁을 선포했다.
스프링이 자바 복잡도와의 전쟁을 선포할 수 있었던 가장 큰 이유는 스프링이 가지고 있는 단순함과 유연성 때문이다. 스프링은 이 같은 단순함과 유연성을 기반으로 개발자에게 점점 더 많은 편의를 제공하고 있으며, 엔터프라이즈 애플리케이션 개발에 필요한 여러 개의 하위 프로젝트까지 발전하고 있는 상태이다. 이 같은 스프링의 발전은 오히려 자바 개발자에게 또 하나의 복잡함으로 인식되고 있다. 하지만 스프링이 가지고 있는 핵심 가치를 이해한다면 복잡함으로 인식되었던 부분이 단순함과 유연성 때문이라는 것을 느낄 수 있을 것이다.
이 책은 스프링이 가지고 있는 핵심 가치를 전달하는 데 집중하고 있다. 로드 존슨이 쓴 『J2EE Development without EJB』 이후로 지금까지 출간된 스프링 서적 중에서 이 책만큼 스프링의 핵심 가치를 제대로 전달한 책을 보지 못했다. 이 책은 스프링을 사용하지 않더라도 자바를 기반으로 애플리케이션을 개발하는 모든 개발자가 읽어야 하는 책이다. 그 만큼 자바가 추구하고자 하는 핵심 가치에 집중하고 있는 책이다. 특히 이 책의 모든 소스 코드에는 테스트 코드가 같이 포함되어 있다. 이는 테스트하기 쉬운 코드를 만들도록 유도하는 스프링의 강점을 보여주면서 테스트의 중요성을 자연스럽게 이야기하고자 저자의 의도이리라.
자바 기반의 엔터프라이즈 개발은 지금까지 많은 우여곡절을 겪으면서 먼 길을 돌아왔다. 이 책으로 인해 자바가 추구하고자 했던 초심으로 돌아갈 수 있는 계기가 되었으면 하는 바람이다.

- 박재성 / XLGames 웹 서비스 개발자


지난 10회 한국 스프링 사용자 모임 세미나 도입부 때 개회사를 겸한 간단한 발표를 하면서 저는 두 가지를 말했습니다. 스프링이 단순한 프레임워크가 아닌 플랫폼으로 발전했다는 사실과, 그럼에도 초기 스프링의 철학은 여전히 유효하고 더욱 강조되어야 하며 스프링 자체보다 중요하다는 점입니다.
스프링 사이트의 스프링 소개(About Spring)에서 확인할 수 있는 이 철학을 지금까지 로드 존스의 책을 제외한 어떤 스프링 관련 책에서도 충분히 다루지 않았습니다. 그래서 많은 사람이 스프링이 주는 이점과 즐거움을 누리지 못하면서 스프링을 쓰고 있습니다. 고맙게도 이일민씨는 스프링이 무엇인지 명시적으로 설명하기를 8장으로 미루고 그보다 먼저, 친절하고 쉽게 그리고 감동적으로 스프링의 배경(곧 좋은 객체지향 기법과 우수 실천법)을 설명합니다.
이 책의 1장에서 초난감 DAO 객체에 객체지향 원리를 적용해 개선하면서 자연스럽게 스프링으로 넘어가는 과정은 마치 마틴 파울러의 『리팩토링』 1장을 보는 듯합니다. 그리고 풍부한 객체지향 원리와 기법 설명을 접할 때는 로버트 C. 마틴의 『UML, 실전에서는 이것만 쓴다』를 읽었을 때의 감동이 다시 생각났습니다.
이일민씨는 뛰어난 개발자이고 완벽주의자인 동시에 타고난 이야기꾼입니다. 전 이 책을 눈으로 읽으면서도 어떻게 이렇게 다양하고 방대한 내용이 한 책으로 엮어질 수 있는지 이해할 수가 없습니다. 스프링을 닮은 책입니다.

- 박성철 / 한국 스프링 사용자 모임 큰일꾼


스프링을 처음 본 게 2003년이었는데 그 때만해도 아무도 지금처럼 스프링이 전세계 애플리케이션 개발 시장에 가장 영향력이 있는 프레임워크로 성장하리라고 예측하지는 못했던 것 같다. 스프링이 성공할 수 있었던 가장 큰 요인 중 하나는 객체 지향 원칙을 충실히 지켜내면서도 더 나아가 개발자의 자율성과 창의성을 극대화시킬 수 있는 유연한 구조를 지니고 있기 때문이다. 이 책은 스프링이 추구했던 이러한 내면의 원칙을 현실과 잘 맞추어 풀어낸 한 편의 흥미 진진한 소설과도 같다. 이 시대의 아키텍트나 개발자라면 반드시 한 번은 꼭 읽어봐야 할 책이다.

- 김창제 / 삼성 SDS 수석, Anyframe Java 기획·개발 총괄


스프링은 이제 자바개발의 필수 프레임웍으로 자리잡았다. 스프링은 자바의 객체지향적 사고와 애자일한 가치를 구현한 프레임웍이지만 대부분의 개발자들은 필요한 템플릿을 수정하기만 할 뿐 스프링 프레임웍이 지향하는 가치와 동작원리를 충분히 이해하지 못한 채로 사용하고 있다. 이 책은 스프링을 배우기 위한 DAO, AOP 같은 중요 개념의 이해를 시작으로 실전 프로젝트에 적용하는 방법까지 체계적으로 다루고 있다. 그리고 스프링의 학습법까지 친절히 다루는 등 곳곳에 저자 이일민씨의 숨은 노력과 배려가 깃든 책으로 자바 개발자라면 꼭 읽어보길 권한다.

- 옥상훈 / 제4대 한국자바개발자 협의회 회장, 현 한국SW아키텍트 연합 공동회장


그동안 구글 버즈를 통해 토비님의 스프링 책 집필 소식을 접해오던 차에 출판사인 에이콘으로부터 추천사의 요청을 받고 만감이 교차했습니다.
먼저, 저는 스프링을 전혀 모릅니다. J2EE 1.4, Java EE 5, 그리고 Java EE 6까지, 기술 표준과 구현에 참여하고 관심을 두어왔던 저로서는, Java EE(특히 EJB)의 안티테제로 시작한 스프링에 어느 정도 반감이 있어왔고, 그래서 의도적으로 알려 하기를 꺼렸습니다.
하지만 티맥스를 떠나 오픈마루에서 웹 서비스 개발을 하게 되자 스프링은 당면한 과제가 돼버렸습니다. 루비온레일스로 비켜가 보기도 했지만, 결국 자바 플랫폼으로 가게 됐습니다. 제가 아무리 Java EE만으로 개발하자고 주장해도, 결국 스프링을 채택하기에 이르렀습니다.
토비님의 블로그 또한 자바와 비자바를 떠나 많은 개발자들에게 감명을 주었습니다. 그리고 그 이면에 담긴 Java EE의 한계와 문제점들은 실은 저를 부끄럽게 만들기 충분했지요. 무엇보다도, 그 깊이, 토비님이 보여주신 그 깊이가 저는 한없이 부러웠고 존경스러웠습니다.
저는 이 책의 1장을 읽었습니다. 이제서야 스프링이 뭔지를 겨우 알아가게 되다니, 마치 요새 “맥주 맛도 모르면서”의 광고 카피처럼 말입니다.
저는 솔직히, 추천사를 쓸 자격이 없습니다. 그런데도 이렇게 졸필을 남기는 것은, 거절을 잘 못하는 성정 탓이기도 하지만, 그동안 품어왔던 경외를 표하는 것이 이 공전절후할 책의 출간에 대해 제가 할 수 있는 유일한 이바지라고 여기기 때문입니다.
이 책이 독자에게 영감과 격려를 주리라 믿습니다.

- 이창신 / ias(iNDIE aPPLICATION sOFTWARE) 대표


먼저, 기다려온 스프링 3 서적의 출간을 축하합니다. 스프링 2.5 버전을 경험했던 사람으로 달라진 기능은 무엇인지? 하위 버전과의 호환성 보장을 위해 어떻게 확장되고 발전되었는지? 새로운 버전이 나올 때마다 갖게 되는 궁금증들에 대해 명쾌한 해답을 얻을 수 있는 좋은 기회가 됐습니다. 또한, 스프링의 각 개념이 예제 중심으로 잘 설명되어 있어 스프링을 처음 접하는 분들도 쉽게 다가갈 수 있으리라 생각되며, 이전 버전 경험자 분들에게는 스프링이 확장 포인트를 어떻게 응용하면서 업그레이드됐는지 배울 수 있는 좋은 기회가 되리라 생각합니다. 다시 한 번 『토비의 스프링 3』출간을 축하하며, 스프링을 도입하거나 스프링 3.0으로 버전 업그레이드를 고려하고 있는 많은 개발자 분들의 고민을 조금이나마 덜어 줄 수 있기를 기대합니다.

- 이봉옥 책임 / 전자정부 표준프레임워크 커미터 삼성SDS


언젠가 토비님과 이런 대화를 나눴던 기억이 난다. 스프링이 주는 많은 자유도로 인해 개발자이 어떻게 해야 할지 길을 잃게 되지는 않을까 우려 섞인 이야기를 한적이 있다. 처음 시작하는 사람들, 그리고 스프링을 좀 더 잘 써보고자 하는 개발자에게 이 책은 스프링이 제공하는 진정한 가치를 같이 누릴 수 있도록 안내하는 어두운 밤바다의 등대 같은 이정표가 될 것이라 확신한다.
이 책을 접하면서, 개발자들은 리팩토링과 디자인 패턴, 객체지향 핵심원칙들도 자연스럽게 접하면서, 책에 담긴 내용을 자신의 것으로 받아들일 것이라고 생각한다. 원칙과 코드를 잘 어울리게 설명한 대목에서는 누구나 내공을 느끼게 할 만큼 쉽고 깊이 있게 저자가 풀어 내고 있는 책이기에, 초보개발자는 물론 연차가 오래됐지만 기초가 부족하다고 느끼는 개발자들에게 적극적으로 권해주고 싶다.
독자들이 이 책을 마칠 즈음엔 스프링을 배우러 왔다가 객체지향이라는 월척을 낚았다고 웃으며 책장을 덮게 될 것이라고 확신한다. 아울러 스프링을 지금까지 써왔던 방식과 달리 스프링에서 주고자 했던 핵심 가치를 느끼며, 코딩하고 있는 자신을 느끼게 될 것이라고 조심스럽게 상상해본다.

- 양수열 / 인피언컨설팅 연구소장, JCO 3대회장, 현 고문


한국은 좋은 IT 저서가 출간되기에 그다지 좋은 환경이 아닙니다. 해외 주요 국가들에 비해 시장이 적은 것은 물론이고, 책값 또한 낮은 탓입니다. 경제적인 이익만 고려한다면 애당초 가능하지 않은 일입니다. 그럼에도 불구하고 뜻있는 개발자와 출판사들의 노력으로 이처럼 좋은 책들이 끊임없이 출간됨에 늘 감사합니다.
집필 기간 3년. 1400페이지에 달하는 방대한 분량은 잘 팔리는 책보다는 꼭 필요한 책을 만들겠다는 에이콘의 출판 철학과 토비 형님의 열정이 있었기에 가능했습니다. 사실 이 책의 계약에 어느 정도 가담한 저 또한 중간에 책이 잘못 될까 봐 얼마나 마음을 졸였는지 모릅니다. 에이콘 출판사와 토비 형님의 열정과 노고에 응원가를 불러드립니다.
저는 스프링은 잘 모르지만 토비 형님과 에이콘 출판사를 잘 알기에 이 책을 자신 있게 권해드릴 수 있습니다. 토비 형님은 어려운 내용을 쉽게 설명하는 마력을 가진 사람입니다. 사실 쉬운 내용도 어렵게 설명하는 분들이 워낙 많기에 그의 글이 더욱 빛납니다.
두 개의 부로 구성된 이 책의 1부는 그의 그런 장점을 잘 녹여내어 처음 시작하는 자바 개발자들도 쉽게 내용을 이해할 수 있습니다. 2부는 실제 프로젝트에 적용하기 위해 필요한 내용들을 담고 있습니다. 또한 고심에 고심을 거듭하여 만든 예제들은 프로젝트를 진행하는데 적잖은 도움을 드릴 것입니다.
이 책을 구입한 모든 분들이 한 단계 더 발전하는 좋은 계기가 되길 바라겠습니다.
대한민국 개발자 파이팅!

- 정희용 / 월간 마이크로소프트웨어 발행인


★ 저자 서문 ★

나는 스프링에게 고마움을 느낀다. 스프링을 통해서 이전보다 조금 더 나은 개발자가 되었다고 생각하기 때문이다. 스프링은 그저 폼 나는 최신 기술을 사용해서 고객이 원하는 기능만 적당히 빠르게 만들어내면 충분하다고 생각해온 나에게 기본으로 돌아가서 원칙에 충실하려고 노력하는 것이 얼마나 중요한지, 그것이 개발자인 나 자신과 고객에게 얼마나 유익을 줄 수 있는지 깨닫게 해줬다. 전문 개발자로서의 17년을 포함해 지금까지 27년간 다양한 언어와 기술을 사용해서 프로그래밍을 해왔지만 스프링만큼 다른 사람들에게 알려주고 싶고, 가르쳐주고 싶은 기술은 없었던 것 같다. 그 동안 블로그와 세미나, 컨퍼런스, 개발팀 교육, 공개 강의 등을 통해서 틈나는 대로 스프링에 대한 지식을 나누려고 노력해왔지만 항상 제한된 시간과 공유 방법의 한계 때문에 아쉬움을 느낄 수밖에 없었다. 이 책은 그 동안 나누고 싶었지만 기회를 얻지 못했던 생각과 이야기들을 꺼내서 얼기설기 늘어놓은 것이다.

막상 책으로 엮고나니 후련한 마음과 함께 부끄러운 마음이 든다. 책을 쓰는 동안 정확하고 완벽한 내용을 작성해야 한다는 부담 때문에 적지 않은 날을 썼던 내용을 지우고 다시 써가며 고민 속에서 지내기도 했다. 나는 책을 쓸 만한 실력이 없다는 좌절감에 포기하려고도 마음을 먹은 적도 있다. 하지만 그럴 때마다 이 책은 내 실력을 사람들에게 증명하고 뽐내려고 쓰는 것이 아니라 부족한 지식과 경험이라도 이를 나누면 누군가에게 도움이 될 수 있을 것이라는 작은 희망이 있기 때문에 쓰는 것이라는 생각으로 마음을 잡으면서 여기까지 올 수 있었다. 다른 것은 몰라도 이 책을 쓴 덕분에 내가 조금은 겸손해지지 않았을까 싶다.

처음 계획하고 약속했던 시간을 훌쩍 넘어서 책이 나오게 된 것에 많은 분들께 죄송하다. 동시에 이 책이 나오기까지 힘써주시고 격려해주신 분들에게 고맙다. 무엇보다도 오랜 시간을 기대하며 기다려주셨던 독자 여러분께 감사드리고 싶다.


- 브리즈번에서 토비 이일민
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.1 오브젝트 팩토리를 이용한 스프링 IoC
_________애플리케이션 컨텍스트와 설정정보
___1.5 스프링의 IoC
_________DaoFactory를 사용하는 애플리케이션 컨텍스트
______1.5.2 애플리케이션 컨텍스트의 동작방식
______1.5.3 스프링 IoC의 용어 정리
___1.6 싱글톤 레지스트리와 오브젝트 스코프
______1.6.1 싱글톤 레지스트리로서의 애플리케이션 컨텍스트
_________서버 애플리케이션과 싱글톤
_________싱글톤 패턴의 한계
_________싱글톤 레지스트리
______1.6.2 싱글톤과 오브젝트의 상태
______1.6.3 스프링 빈의 스코프
______1.7.1 제어의 역전(IoC)과 의존관계 주입
___1.7 의존관계 주입(DI)
______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.1 JdbcContext의 분리
___3.4 컨텍스트와 DI
_________클래스 분리
_________빈 의존관계 변경
______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 queryForInt()
______3.6.3 queryForObject()
______3.6.4 query()
_________기능 정의와 테스트 작성
_________query() 템플릿을 이용하는 getAll() 구현
_________테스트 보완
______3.6.5 재사용 가능한 콜백의 분리
_________DI를 위한 코드 정리
_________중복 제거
_________템플릿/콜백 패턴과 UserDao
___3.6 정리

4장 예외
___4.1 사라진 SQLException
______4.1.1 초난감 예외처리
_________예외 블랙홀
_________무의미하고 무책임한 throws
______4.1.2 예외의 종류와 특징
______4.1.3 예외처리 방법
_________예외 복구
_________예외처리 회피
_________예외 전환
______4.1.4 예외처리 전략
_________런타임 예외의 보편화
_________add() 메소드의 예외처리
_________애플리케이션 예외
______4.1.5 SQLException은 어떻게 됐나?
___4.2 예외 전환
______4.2.1 JDBC의 한계
_________비표준 SQL
_________호환성 없는 SQLException의 DB 에러정보
______4.2.2 DB 에러 코드 매핑을 통한 전환
______4.2.3 DAO 인터페이스와 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.3 UserService.upgradeLevels()
_________UserService 클래스와 빈 등록
_________UserServiceTest 테스트 클래스
_________upgradeLevels() 메소드
_________upgradeLevels() 테스트
______5.1.4 UserService.add()
______5.1.5 코드 개선
_________upgradeLevels() 메소드 코드의 문제점
_________upgradeLevels() 리팩토링
_________User 테스트
_________UserServiceTest 개선
______5.2.1 전부 아니면 전무
_________테스트용 UserService 대역
___5.2 트랜잭션 서비스 추상화
_________강제 예외 발생을 통한 테스트
_________테스트 실패의 원인
______5.2.2 트랜잭션 경계설정
_________JDBC 트랜잭션의 트랜잭션 경계설정
_________UserService와 UserDao의 트랜잭션 문제
_________비즈니스 로직 내의 트랜잭션 경계설정
_________UserService 트랜잭션 경계설정의 문제점
______5.2.3 트랜잭션 동기화
_________Connection 파라미터 제거
_________트랜잭션 동기화 적용
_________트랜잭션 테스트 보완
_________JdbcTemplate과 트랜잭션 동기화
______5.2.4 트랜잭션 서비스 추상화
_________기술과 환경에 종속되는 트랜잭션 경계설정 코드
_________트랜잭션 API의 의존관계 문제와 해결책
_________스프링의 트랜잭션 서비스 추상화
_________트랜잭션 기술 설정의 분리
_________수직, 수평 계층구조와 의존관계
___5.3 서비스 추상화와 단일 책임 원칙
_________단일 책임 원칙
_________단일 책임 원칙의 장점
___5.4 메일 서비스 추상화
______5.4.1 JavaMail을 이용한 메일 발송 기능
_________JavaMail 메일 발송
______5.4.2 JavaMail이 포함된 코드의 테스트
______5.4.3 테스트를 위한 서비스 추상화
_________JavaMail을 이용한 테스트의 문제점
_________메일 발송 기능 추상화
_________테스트용 메일 발송 오브젝트
_________테스트와 서비스 추상화
______5.4.4 테스트 대역
_________의존 오브젝트의 변경을 통한 테스트 방법
_________테스트 대역의 종류와 특징
_________목 오브젝트를 이용한 테스트
___5.5 정리

6장 AOP
___6.1 트랜잭션 코드의 분리
______6.1.1 메소드 분리
______6.1.2 DI를 이용한 클래스의 분리
_________DI 적용을 이용한 트랜잭션 분리
_________UserService 인터페이스 도입
_________분리된 트랜잭션 기능
_________트랜잭션 적용을 위한 DI 설정
_________트랜잭션 분리에 따른 테스트 수정
_________트랜잭션 경계설정 코드 분리의 장점
___6.2 고립된 단위 테스트
______6.2.1 복잡한 의존관계 속의 테스트
______6.2.2 테스트 대상 오브젝트 고립시키기
_________테스트를 위한 UserServiceImpl 고립
_________고립된 단위 테스트 활용
_________UserDao 목 오브젝트
_________테스트 수행 성능의 향상
______6.2.3 단위 테스트와 통합 테스트
______6.2.4 목 프레임워크
_________Mockito 프레임워크
___6.3 다이내믹 프록시와 팩토리 빈
______6.3.1 프록시와 프록시 패턴, 데코레이터 패턴
_________데코레이터 패턴
_________프록시 패턴
______6.3.2 다이내믹 프록시
_________프록시의 구성과 프록시 작성의 문제점
_________리플렉션
_________프록시 클래스
_________다이내믹 프록시 적용
_________다이내믹 프록시의 확장
______6.3.3 다이내믹 프록시를 이용한 트랜잭션 부가기능
_________트랜잭션 InvocationHandler
_________TransactionHandler와 다이내믹 프록시를 이용하는 테스트
______6.3.4 다이내믹 프록시를 위한 팩토리 빈
_________팩토리 빈
_________팩토리 빈의 설정 방법
_________다이내믹 프록시를 만들어주는 팩토리 빈
_________트랜잭션 프록시 팩토리 빈
_________트랜잭션 프록시 팩토리 빈 테스트
______6.3.5 프록시 팩토리 빈 방식의 장점과 한계
_________프록시 팩토리 빈의 재사용
_________프록시 팩토리 빈 방식의 장점
_________프록시 팩토리 빈의 한계
___6.4 스프링의 프록시 팩토리 빈
______6.4.1 ProxyFactoryBean
_________어드바이스: 타깃이 필요 없는 순수한 부가기능
_________포인트컷: 부가기능 적용 대상 메소드 선정 방법
______6.4.2 ProxyFactoryBean 적용
_________TransactionAdvice
_________스프링 XML 설정파일
_________테스트
_________어드바이스와 포인트컷의 재사용
______6.5.1 자동 프록시 생성
___6.5 스프링 AOP
_________중복 문제의 접근 방법
_________빈 후처리기를 이용한 자동 프록시 생성기
_________확장된 포인트컷
_________포인트컷 테스트
___6.5.2 DefaultAdvisorAutoProxyCreator의 적용
_________클래스 필터를 적용한 포인트컷 작성
_________어드바이저를 이용하는 자동 프록시 생성기 등록
_________포인트컷 등록
_________어드바이스와 어드바이저
_________ProxyFactoryBean 제거와 서비스 빈의 원상복구
_________자동 프록시 생성기를 사용하는 테스트
_________자동생성 프록시 확인
______6.5.3 포인트컷 표현식을 이용한 포인트컷
_________포인트컷 표현식
_________포인트컷 표현식 문법
_________포인트컷 표현식 테스트
_________포인트컷 표현식을 이용하는 포인트컷 적용
_________타입 패턴과 클래스 이름 패턴
______6.5.4 AOP란 무엇인가?
_________트랜잭션 서비스 추상화
_________프록시와 데코레이터 패턴
_________다이내믹 프록시와 프록시 팩토리 빈
_________자동 프록시 생성 방법과 포인트컷
_________부가기능의 모듈화
_________AOP: 애스펙트 지향 프로그래밍
______6.5.5 AOP 적용기술
_________프록시를 이용한 AOP
_________바이트코드 생성과 조작을 통한 AOP
______6.5.6 AOP의 용어
______6.5.7 AOP 네임스페이스
_________AOP 네임스페이스
___6.6 트랜잭션 속성
_________어드바이저 내장 포인트컷
______6.6.1 트랜잭션 정의
_________트랜잭션 전파
_________고립수준
_________제한시간
_________읽기전용
______6.6.2 트랜잭션 인터셉터와 트랜잭션 속성
_________TransactionInterceptor
_________메소드 이름 패턴을 이용한 트랜잭션 속성 지정
_________tx 네임스페이스를 이용한 설정 방법
______6.6.3 포인트컷과 트랜잭션 속성의 적용 전략
_________트랜잭션 포인트컷 표현식은 타입 패턴이나 빈 이름을 이용한다
_________공통된 메소드 이름 규칙을 통해 최소한의 트랜잭션 어드바이스와 속성을 정의
한다
_________프록시 방식 AOP는 같은 타깃 오브젝트 내의 메소드를 호출할 때는 적용되지
않는다
______6.6.4 트랜잭션 속성 적용
_________트랜잭션 경계설정의 일원화
_________서비스 빈에 적용되는 포인트컷 표현식 등록
_________트랜잭션 속성을 가진 트랜잭션 어드바이스 등록
_________트랜잭션 속성 테스트
___6.7 애노테이션 트랜잭션 속성과 포인트컷
______6.7.1 트랜잭션 애노테이션
_________@Transactional
_________트랜잭션 속성을 이용하는 포인트컷
_________대체 정책
_________트랜잭션 애노테이션 사용을 위한 설정
______6.7.2 트랜잭션 애노테이션 적용
___6.8 트랜잭션 지원 테스트
______6.8.1 선언적 트랜잭션과 트랜잭션 전파 속성
______6.8.2 트랜잭션 동기화와 테스트
_________트랜잭션 매니저와 트랜잭션 동기화
_________트랜잭션 매니저를 이용한 테스트용 트랜잭션 제어
_________트랜잭션 동기화 검증
_________롤백 테스트
______6.8.3 테스트를 위한 트랜잭션 애노테이션
_________@Transactional
_________@Rollback
_________@TransactionConfiguration
_________NotTransactional과 Propagation.NEVER
_________효과적인 DB 테스트
___6.9 정리

7장 스프링 핵심 기술의 응용
___7.1 SQL과 DAO의 분리
______7.1.1 XML 설정을 이용한 분리
_________개별 SQL 프로퍼티 방식
_________SQL 맵 프로퍼티 방식
______7.1.2 SQL 제공 서비스
_________SQL 서비스 인터페이스
_________스프링 설정을 사용하는 단순 SQL 서비스
___7.2 인터페이스의 분리와 자기 참조 빈
______7.2.1 XML 파일 매핑
_________JAXB
_________SQL 맵을 위한 스키마 작성과 컴파일
_________언마샬링
______7.2.2 XML 파일을 이용하는 SQL 서비스
_________SQL 맵 XML 파일
_________XML SQL 서비스
______7.2.3 빈의 초기화 작업
______7.2.4 변화를 위한 준비: 인터페이스 분리
_________책임에 따른 인터페이스 정의
_________SqlRegistry 인터페이스
_________SqlReader 인터페이스
______7.2.5 자기참조 빈으로 시작하기
_________다중 인터페이스 구현과 간접 참조
_________인터페이스를 이용한 분리
_________자기참조 빈 설정
______7.2.6 디폴트 의존관계
_________확장 가능한 기반 클래스
_________디폴트 의존관계를 갖는 빈 만들기
______7.3.1 OXM 서비스 추상화
___7.3 서비스 추상화 적용
_________OXM 서비스 인터페이스
_________JAXB 구현 테스트
_________Castor 구현 테스트
______7.3.2 OXM 서비스 추상화 적용
_________멤버 클래스를 참조하는 통합 클래스
_________위임을 이용한 BaseSqlService의 재사용
______7.3.3 리소스 추상화
_________리소스
_________리소스 로더
_________Resource를 이용해 XML 파일 가져오기
___7.4 인터페이스 상속을 통한 안전한 기능확장
______7.4.1 DI와 기능의 확장
_________DI를 의식하는 설계
_________DI와 인터페이스 프로그래밍
______7.4.2 인터페이스 상속
______7.5.1 ConcurrentHashMap을 이용한 수정 가능 SQL 레지스트리
_________수정 가능 SQL 레지스트리 테스트
___7.5 DI를 이용해 다양한 구현 방법 적용하기
_________수정 가능 SQL 레지스트리 구현
______7.5.2 내장형 데이터베이스를 이용한 SQL 레지스트리 만들기
_________스프링의 내장형 DB 지원 기능
_________내장형 DB 빌더 학습 테스트
_________내장형 DB를 이용한 SqlRegistry 만들기
_________UpdatableSqlRegistry 테스트 코드의 재사용
_________XML 설정을 통한 내장형 DB의 생성과 적용
______7.5.3 트랜잭션 적용
_________다중 SQL 수정에 대한 트랜잭션 테스트
_________코드를 이용한 트랜잭션 적용
___7.6 정리

8장 스프링이란 무엇인가?
___8.1 스프링의 정의
___8.2 스프링의 목적
______8.2.1 엔터프라이즈 개발의 복잡함
_________복잡함의 근본적인 이유
_________복잡함을 가중시키는 원인
______8.2.2 복잡함을 해결하려는 도전
_________제거될 수 없는 근본적인 복잡함
_________실패한 해결책: EJB
_________비침투적인 방식을 통한 효과적인 해결책: 스프링
______8.2.3 복잡함을 상대하는 스프링의 전략
_________기술적 복잡함을 상대하는 전략
_________비즈니스와 애플리케이션 로직의 복잡함을 상대하는 전략
_________핵심 도구: 객체지향과 DI
___8.3 POJO 프로그래밍
______8.3.1 스프링의 핵심: POJO
______8.3.2 POJO란 무엇인가?
______8.3.3 POJO의 조건
______8.3.4 POJO의 장점
______8.3.5 POJO 프레임워크
___8.4 스프링의 기술
______8.4.1 제어의 역전(IoC) / 의존관계 주입(DI)
_________DI의 활용 방법
______8.4.2 애스펙트 지향 프로그래밍(AOP)
_________AOP의 적용 기법
_________AOP의 적용 단계
_________8.4.3 포터블 서비스 추상화(PSA)
___8.5 요약

9장 스프링 프로젝트 시작하기
___9.1 자바 엔터프라이즈 플랫폼과 스프링 애플리케이션
______9.1.1 클라이언트와 백엔드 시스템
______9.1.2 애플리케이션 서버
_________스프링소스 tcServer
______9.1.3 스프링 애플리케이션의 배포 단위
___9.2 개발도구와 환경
______9.2.1 JavaSE와 JavaEE
_________JavaSE/JDK
_________JavaEE/J2EE
______9.2.2 IDE
______9.2.3 SpringSoruce Tool Suite
_________SpringIDE 플러그인
_________STS 플러그인
_________기타 플러그인
______9.2.4 라이브러리 관리와 빌드 툴
_________라이브러리 관리의 어려움
_________라이브러리 선정
_________빌드 툴과 라이브러리 관리
_________스프링 모듈의 두 가지 이름과 리포지토리
___9.3 애플리케이션 아키텍처
______9.3.1 계층형 아키텍처
_________아키텍처와 SoC
_________3계층 아키텍처와 수직 계층
_________계층형 아키텍처 설계의 원칙
______9.3.2 애플리케이션 정보 아키텍처
_________DB/SQL 중심의 로직 구현 방식
_________거대한 서비스 계층 방식
______9.3.3 오브젝트 중심 아키텍처
_________데이터와 오브젝트
_________도메인 오브젝트를 사용하는 코드
_________도메인 오브젝트 사용의 문제점
_________빈약한 도메인 오브젝트 방식
_________풍성한 도메인 오브젝트 방식
_________도메인 계층 방식
_________DTO와 리포트 쿼리
______9.3.4 스프링 애플리케이션을 위한 아키텍처 설계
_________계층형 아키텍처
_________정보 전송 아키텍처
_________상태 관리와 빈 스코프
_________서드파티 프레임워크, 라이브러리 적용
___9.4 정리

10장 IoC 컨테이너와 DI
___10.1 IoC 컨테이너: 빈 팩토리와 애플리케이션 컨텍스트
______10.1.1 IoC 컨테이너를 이용해 애플리케이션 만들기
_________POJO 클래스
_________설정 메타정보
______10.1.2 IoC 컨테이너의 종류와 사용 방법
_________StaticApplicationContext
_________GenericApplicationContext
_________GenericXmlApplicationContext
_________WebApplicationContext
______10.1.3 IoC 컨테이너 계층구조
_________부모 컨텍스트를 이용한 계층구조 효과
_________컨텍스트 계층구조 테스트
______10.1.4 웹 애플리케이션의 IoC 컨테이너 구성
_________웹 애플리케이션의 컨텍스트 계층구조
_________웹 애플리케이션의 컨텍스트 구성 방법
_________루트 애플리케이션 컨텍스트 등록
_________서블릿 애플리케이션 컨텍스트 등록
___10.2 IoC/DI를 위한 빈 설정 메타정보 작성
______10.2.1 빈 설정 메타정보
_________빈 설정 메타정보 항목
______10.2.2 빈 등록 방법
_________XML: 태그
_________XML: 네임스페이스와 전용 태그
_________자동인식을 이용한 빈 등록: 스테레오타입 애노테이션과 빈 스캐너
_________자바 코드에 의한 빈 등록: @Configuration 클래스의 @Bean 메소드
_________자바 코드에 의한 빈 등록: 일반 빈 클래스의 @Bean 메소드
_________빈 등록 메타정보 구성 전략
______10.2.3 빈 의존관계 설정 방법
_________XML: ,
_________XML: 자동와이어링
_________XML: 네임스페이스와 전용 태그
_________애노테이션: @Resource
_________애노테이션: @Autowired / @Inject
_________@Autowired와 getBean(), 스프링 테스트
_________자바 코드에 의한 의존관계 설정
_________빈 의존관계 설정 전략
______10.2.4 프로퍼티 값 설정 방법
_________메타정보 종류에 따른 값 설정 방법
_________PropertyEditor와 ConversionService
_________컬렉션
_________Null과 빈 문자열
_________프로퍼티 파일을 이용한 값 설정
______10.2.5 컨테이너가 자동등록하는 빈
_________ApplicationContext, BeanFactory
_________ResourceLoader, ApplicationEventPublisher
_________systemProperties, systenEnvironment
___10.3 프로토타입과 스코프
______10.3.1 프로토타입 스코프
_________프로토타입 빈의 생명주기과 종속성
_________프로토타입 빈의 용도
_________DI와 DL
_________프로토타입 빈의 DL 전략
______10.3.2 스코프
_________스코프의 종류
_________스코프 빈의 사용 방법
_________커스텀 스코프와 상태를 저장하는 빈 사용하기
___10.4 기타 빈 설정 메타정보
______10.4.1 빈 이름
_________XML 설정에서의 빈 식별자와 별칭
_________애노테이션에서의 빈 이름
______10.4.2 빈 생명주기 메소드
_________초기화 메소드
_________제거 메소드
______10.4.3 팩토리 빈과 팩토리 메소드
___10.5 정리

11장 데이터 액세스 기술
___11.1 공통 개념
______11.1.1 DAO 패턴
_________DAO 인터페이스와 DI
_________예외처리
______11.1.2 템플릿과 API
______11.1.3 DataSource
_________학습 테스트와 통합 테스트를 위한 DataSource
_________오픈소스 또는 상용 DB 커넥션 풀
_________JDNI/WAS DB 풀
___11.2 JDBC
______11.2.1 스프링 JDBC 기술과 동작원리
_________스프링의 JDBC 접근 방법
_________스프링 JDBC가 해주는 작업
______11.2.2 SimpleJdbcTemplate
_________SimpleJdbcTemplate 생성
_________SQL 파라미터
_________SQL 실행 메소드
_________SQL 조회 메소드
_________SQL 배치 메소드
______11.2.3 SimpleJdbcInsert
_________SimpleJdbcInsert 생성
_________SimpleJdbcInsert 실행
______11.2.4 SimpleJdbcCall
_________SimpleJdbcCall 생성
_________SimpleJdbcCall 실행
______11.2.5 스프링 JDBC DAO
___11.3 iBatis SqlMaps
______11.3.1 SqlMapClient 생성
_________iBatis 설정파일과 매핑파일
_________SqlMapClient를 위한 SqlMapClientFactoryBean 등록
______11.3.2 SqlMapClientTemplate
_________등록, 수정, 삭제
_________조회
_________SqlMapClientCallback
___11.4 JPA
______11.4.1 EntityManagerFactory 등록
_________LocalEntityManagerFactoryBean
_________JavaEE 5 서버가 제공하는 EntityManagerFactory
_________LocalContainerEntityManagerFactoryBean
_________트랜잭션 매니저
______11.4.2 EntityManager와 JpaTemplate
_________JpaTemplate
_________애플리케이션 관리 EntityManager와 @PersistenceUnit
_________컨테이너 관리 EntityManager와 @PersistenceContext
_________@PersistenceContext와 확장된 퍼시스턴스 컨텍스트
_________JPA 예외 변환
_________JPA 예외 변환 AOP
___11.5 하이버네이트
______11.5.1 SessionFactory 등록
_________LocalSessionFactoryBean
_________AnnotationSessionFactoryBean
_________트랜잭션 매니저
______11.5.2 Session과 HibernateTemplate
_________HibernateTemplate
_________SessionFactory.getCurrentSession()
___11.6 트랜잭션
______11.6.1 트랜잭션 추상화와 동기화
_________PlatformTransactionManager
_________트랜잭션 매니저의 종류
______11.6.2 트랜잭션 경계설정 전략
_________코드에 의한 트랜잭션 경계설정
_________선언적 트랜잭션 경계설정
_________프록시 모드: 인터페이스와 클래스
_________AOP 방식: 프록시와 AspectJ
______11.6.3 트랜잭션 속성
_________트랜잭션 전파: propagation
_________트랜잭션 고립도: isolation
_________트랜잭션 제한시간: Timeout
_________읽기전용 트랜잭션: read-only, readOnly
_________트랜잭션 롤백 예외: rollback-for, rollbackFor, rollbackForClassName
_________트랜잭션 커밋 예외: no-rollback-for, noRollbackFor,
noRollbackForClassName
______11.6.4 데이터 액세스 기술 트랜잭션의 통합
_________트랜잭션 매니저별 조합 가능 기술
_________ORM과 비 ORM DAO를 함께 사용할 때의 주의사항
______11.6.5 JTA를 이용한 글로벌/분산 트랜잭션
_________독립형 JTA 트랜잭션 매니저
_________WAS 트랜잭션 매니저의 고급 기능 사용하기
___11.7 정리

12장 스프링 웹 기술과 스프링 MVC
___12.1 스프링의 웹 프레젠테이션 계층 기술
______12.1.1 스프링에서 사용되는 웹 프레임워크의 종류
_________스프링 웹 프레임워크
_________스프링 포트폴리오 웹 프레임워크
_________스프링을 기반으로 두지 않는 웹 프레임워크
______12.1.2 스프링 MVC와 DispatcherServlet 전략
_________DispatcherServlet과 MVC 아키텍처
_________DispatcherServlet의 DI 가능한 전략
___12.2 스프링 웹 애플리케이션 환경 구성
______12.2.1 간단한 스프링 웹 프로젝트 생성
_________루트 웹 애플리케이션 컨텍스트
_________서블릿 웹 애플리케이션 컨텍스트 등록
_________스프링 웹 프로젝트 검증
______12.2.2 스프링 웹 학습 테스트
_________서블릿 테스트용 목 오브젝트
_________테스트를 위한 DispatcherServlet 확장
_________ConfigurableDispatcherServlet을 이용한 스프링 MVC 테스트
_________편리한 DispatcherServlet 테스트를 위한 AbstractDispatcherServletTest
1001
___12.3 컨트롤러
______12.3.1 컨트롤러의 종류와 핸들러 어댑터
_________Servlet과 SimpleServletHandlerAdapter
_________HttpRequestHandler와 HttpRequestHandlerAdapter
_________Controller와 SimpleControllerHandlerAdapter
_________AnnotationMethodHandlerAdapter
______12.3.2 핸들러 매핑
_________BeanNameUrlHandlerMapping
_________ControllerBeanNameHandlerMapping
_________ControllerClassNameHandlerMapping
_________SimpleUrlHandlerMapping
_________DefaultAnnotationHandlerMapping
_________기타 공통 설정정보
______12.3.3 핸들러 인터셉터
_________HandlerInterceptor
_________핸들러 인터셉터 적용
______12.3.4 컨트롤러 확장
_________커스텀 컨트롤러 인터페이스와 핸들러 어댑터 개발
___12.4 뷰
______12.4.1 뷰
_________InternalResourceView와 JstlView
_________RedirectView
_________VelocityView, FreeMarkerView
_________MarshallingView
_________AbstractExcelView, AbstractJExcelView, AbstractPdfView
_________AbstractAtomFeedView, AbstractRssFeedView
_________XsltView, TilesView, AbstractJasperReportsView
_________MappingJacksonJsonView
______12.4.2 뷰 리졸버
_________InternalResourceViewResolver
_________VelocityViewResolver, FreeMarkerViewResolver
_________ResourceBundlerViewResolver, XmlViewResolver, BeanNameViewResolver
_________ContentNegotiatingViewResolver
___12.5 기타 전략
______12.5.1 핸들러 예외 리졸버
_________AnnotationMethodHandlerExceptionResolver
_________ResponseStatusExceptionResolver
_________DefaultHandlerExceptionResolver
_________SimpleMappingExceptionResolver
______12.5.2 지역정보 리졸버
______12.5.3 멀티파트 리졸버
_________RequestToViewNameTranslator
___12.6 정리

13장 스프링 @MVC
___13.1 @RequestMapping 핸들러 매핑
______13.1.1 클래스/메소드 결합 매핑정보
_________@RequestMapping 애노테이션
_________타입 레벨 매핑과 메소드 레벨 매핑의 결합
_________메소드 레벨 단독 매핑
_________타입 레벨 단독 매핑
______13.1.2 타입 상속과 매핑
_________매핑정보 상속의 종류
_________제네릭스와 매핑정보 상속을 이용한 컨트롤러 작성
___13.2 @Controller
______13.2.1 메소드 파라미터의 종류
_________HttpServletRequest, HttpServletResponse
_________HttpSession
_________WebRequest, NativeWebRequest
_________Locale
_________InputStream, Reader
_________OutputStream, Writer
_________@PathVariable
_________@RequestParam
_________@CookieValue
_________@RequestHeader
_________Map, Model, ModelMap
_________@ModelAttribute
_________Errors, BindingResult
_________SessionStatus
_________@RequestBody
_________@Value
_________@Valid
______13.2.2 리턴 타입의 종류
_________자동 추가 모델 오브젝트와 자동생성 뷰 이름
_________ModelAndView
_________String
_________void
_________모델 오브젝트
_________Map/Model/ModelMap
_________View
_________@ResponseBody
______13.2.3 @SessionAttributes와 SessionStatus
_________도메인 중심 프로그래밍 모델과 상태 유지를 위한 세션 도입의 필요성
_________@SessionAttributes
_________SessionStatus
_________등록 폼을 위한 @SessionAttributes 사용
_________스프링 목 오브젝트와 AbstractDispacherServletTest를 이용해 세션 테스트 만
들기
___13.3 모델 바인딩과 검증
______13.3.1 PropertyEditor
_________디폴트 프로퍼티 에디터
_________커스텀 프로퍼티 에디터
_________@InitBinder
_________WebBindingInitializer
_________프로토타입 빈 프로퍼티 에디터
______13.3.2 Converter와 Formatter
_________Converter
_________ConversionService
_________Formatter와 FormattingConversionService
_________바인딩 기술의 적용 우선순위와 활용 전략
______13.3.3 WebDataBinder 설정 항목
_________allowedFields, disallowedFields
_________requiredFields
_________fieldMarkerPrefix
_________fieldDefaultPrefix
______13.3.4 Validator와 BindingResult, Errors
_________Validator
_________JSR-303 빈 검증 기능
_________BindingResult와 MessageCodeResolver
_________MessageSource
______13.3.5 모델의 일생
_________HTTP 요청으로부터 컨트롤러 메소드까지
_________컨트롤러 메소드로부터 뷰까지
___13.4 JSP 뷰와 form 태그
______13.4.1 EL과 spring 태그 라이브러리를 이용한 모델 출력
_________JSP EL
_________스프링 SpEL
_________지역화 메시지 출력
______13.4.2 spring 태그 라이브러리를 이용한 폼 작성
_________단일 폼 모델
___과 BindingStatus
___13.4.3 form 태그 라이브러리
___
_________
_________
_________
_________
_________,
_________,
_________,
_________, ,
______커스텀 UI 태그 만들기
___13.5 메시지 컨버터와 AJAX
______13.5.1 메시지 컨버터의 종류
_________JSON을 이용한 AJAX 컨트롤러: GET + JSON
_________JSON을 이용한 AJAX 컨트롤러: POST(JSON) + JSON
___13.6 mvc 네임스페이스
_________
_________
_________
___13.7 @MVC 확장 포인트
______13.7.1 AnnotationMethodHandlerAdapter
_________SessionAttributeStore
_________WebArgumentResolver
_________ModelAndViewResolver
___13.8 정리

14장 AOP와 LTW
___14.1 애스펙트 AOP
______14.1.1 프록시 기반 AOP
_________프록시 기반 AOP 개발 스타일의 종류와 특징
_________자동 프록시 생성기와 프록시 빈
_________프록시의 종류
______14.1.2 @AspectJ AOP
_________@AspectJ를 이용하기 위한 준비사항
_________@Aspect 클래스와 구성요소
_________포인트컷 메소드와 애노테이션
_________어드바이스 메소드와 애노테이션
_________파라미터 선언과 바인딩
_________@AspectJ를 이용한 AOP의 학습 방법과 적용 전략
___14.2 AspectJ와 @Configurable
______14.2.1 AspectJ AOP
______14.2.2 빈이 아닌 오브젝트에 DI 적용하기
_________DI 애스펙트
_________@Configurable
_________로드타임 위버와 자바 에이전트
___14.3 로드타임 위버(LTW)

15장 컨텍스트 테스트 프레임워크
___15.1 컨텍스트 테스트 프레임워크
______15.1.1 테스트 프레임워크와 컨텍스트 테스트
_________테스트용 애플리케이션 컨텍스트 캐싱과 설정파일
_________컨텍스트 설정의 상속과 컨텍스트 로더
______15.1.2 테스트 코드의 테스트 컨텍스트 활용
_________테스트 컨텍스트로부터 DI 받기
_________공유 컨텍스트 사용 시 주의할 점
______15.2.1 테스트의 트랜잭션 지원 필요성
_________DAO 단독 테스트
___15.2 트랜잭션 지원 테스트
_________롤백 테스트
______15.2.2 트랜잭션 지원 테스트 작성 방법
_________트랜잭션 매니저
_________@Transactional 테스트
_________ORM 롤백 트랜잭션 테스트의 주의사항
_________트랜잭션 지원 테스트에 DBUnit 이용하기
___15.3 정리

16장 스프링의 기타 기술과 효과적인 학습 방법
___16.1 스프링 기술과 API를 효과적으로 학습하는 방법
______16.1.1 빈으로 등록되는 스프링 클래스와 DI
_________구현 인터페이스 분석
_________프로퍼티 분석
_________DI/확장 포인트 분석
___16.2 IoC 컨테이너 DI
______16.2.1 BeanPostProcessor와 BeanFactoryPostProcessor
_________BeanPostProcessor
_________BeanFactoryPostProcessor
___16.3 SpEL
______16.3.1 SpEL 사용 방법
___16.4 OXM
______16.4.1 Marshaller/Unmarshaller 인터페이스
______16.4.2 OXM 기술 어댑터 클래스
___16.5 리모팅과 웹 서비스, EJB
______16.5.1 익스포터와 프록시
_________익스포터
_________프록시
______16.5.2 RESTful 서비스 템플릿
______16.5.3 EJB 서비스 이용
______16.6.1 TaskExecutor 서비스 추상화
___16.6 태스크 실행과 스케줄링
______16.6.2 TaskScheduler
______16.6.3 task 네임스페이스
_________
_________
_________
______16.6.4 애노테이션을 이용한 스케줄링과 비동기 태스크 실행
_________@Scheduled
_________@Async
___16.7 정리

부록 A 스프링 모듈
___A.1 스프링 모듈의 종류와 특징
______A.1.1 스프링 모듈 이름
______A.1.2 스프링 모듈 추가
_________수동 추가
_________Maven/Ivy 자동 추가
______A.1.3 스프링 모듈 목록
___A.2 스프링 모듈의 의존관계
______A.2.1 모듈별 의존관계
_________ASM 모듈
_________Core 모듈
_________Beans 모듈
_________AOP 모듈
_________Expression 모듈
_________Context 모듈
_________Context.Support 모듈
_________Transaction 모듈
_________JDBC 모듈
_________ORM 모듈
_________Web 모듈
_________Web.Servlet 모듈
_________Web.Portlet 모듈
_________Web.Struts 모듈
_________JMS 모듈
_________Aspects 모듈
_________Instrument 모듈
_________Instrument.Tomcat 모듈
_________Test 모듈

부록 B 스프링 의존 라이브러리
___B.1 의존 라이브러리의 종류와 특징
______B.1.1 의존 라이브러리 이름
______B.1.2 의존 라이브러리 추가
_________수동 추가
_________자동 추가
______B.2.1 필수 라이브러리
______B.2.2 모듈별 선택 라이브러리
___B.2 모듈별 의존 라이브러리 의존관계
_________ASM 모듈
_________Core 모듈
_________Beans 모듈
_________AOP 모듈
_________Expression 모듈
_________Context 모듈
_________Context.Support 모듈
_________Transaction 모듈
_________JDBC 모듈
_________ORM 모듈
_________Web 모듈
_________Web.Servlet 모듈
_________Web.Portlet 모듈
_________Web.Struts 모듈
_________JMS 모듈
_________Aspects 모듈
_________Instrument 모듈
_________Instrument.Tomcat 모듈
_________Test 모듈
이일민
호주의 IT서비스 기업인 이프릴의 대표 컨설턴트다. 엔터프라이즈 오픈소스 커뮤니티인 오픈시드의 대표와 한국스프링사용자모임(KSUG)의 공동설립자이기도 하다. 8비트 컴퓨터 시절 프로그래밍의 매력에 빠져 10여 년간 취미로 프로그래밍을 즐겨오다 전문 개발자의 길로 들어서서 17년째 소프트웨어 개발과 교육, 컨설팅 일을 해오고 있다. 2004년부터 스프링을 이용해서 기업과 학교, 인터넷 서비스 업체의 시스템을 개발해왔고 스프링을 기반으로 한 애플리케이션 프레임워크 제작 컨설팅과 스프링 개발자 교육을 해오고 있다. JCO 컨퍼런스에서 세 차례 스프링을 주제로 발표했고 기묘, 이프릴, KSUG 등을 통해 스프링 세미나를 진행하기도 했다. 스프링과 오픈소스 기술에 관련된 정보와 경험을 공유하는 블로그(toby.epril.com)를 운영하고 있다.
설명이 아주 편한하게 다가오는
이종민님이 쓰신 서평보기 I 평점 I 조회수(1429) I 공감 (0) I 블로그
전 이책을 2번정도 완독해봤습니다.설명이 아주 친절해서 읽기 참 편했습니다.스프링에 관심있는 중급개발자 정도면 충분히 완독가능합니다.프로젝트 하면서 이 책에 나오는 API도 다 써보지 못한것 같습니다.전 특히나 예외, 데이터엑세스, 트랜잭션 파트는 많이 읽었습니다.항상 프로젝트를 하면서 마음 한구석에 찜찜함으로 자리잡고 있었던 부분이였기에 ㅋㅋㅋ하튼 좋은 책 맞습니다.!!!!
누구도 알려주지 않는 OOP
이태영님이 쓰신 서평보기 I 평점 I 조회수(1415) I 공감 (0) I 블로그
이 책은 스프링이라는 주제로 쓰여진 책이긴 하지만, 당장 스프링을 배워서 써먹을 용도라면 추천하지 않는다. 이 책은 빨리 먹고 배부르지만 영양가 없는 인스턴트 식품이 아니다. 이 책은 영양가 많고 오랫동안 조리를 해야하는 뚝배기라고 할 수 있다. 이 책을 통해서 누구도 알려주지 않은 진정한 OOP가 무엇인지 배울 수 있을 것이다.
구성이 참 좋습니다.
조계승님이 쓰신 서평보기 I 평점 I 조회수(1400) I 공감 (0) I 블로그
제가 여태까지 읽어본 스프링 책중에 가장 좋은거 같습니다.스프링에 대한 책이지만  전반적으로 좋은 설계 및 사상에 대해 저자의 숨은 내공을 느낄수 있습니다. 
 
전체평균(74)
회원평점   회원서평수 3
설명이 아주 편한하게 다가오는
이종민 님  2011-03-19
누구도 알려주지 않는 OOP
이태영 님  2011-02-21
구성이 참 좋습니다.
조계승 님  2011-01-17
이일민 의 최근 저서
 
스프링과 JPA를 활용한 자바 엔터프라이즈 애플리케이션 개발 세트 - 전3권
97,200원
(10%↓+5%)
 
스프링 웹 개발 마스터 세트 - 전3권
95,400원
(10%↓+5%)
 
토비의 스프링 3.1 Vol. 2
36,000원
(10%↓+5%)
 
토비의 스프링 3.1 Vol. 1
36,000원
(10%↓+5%)
 
토비의 스프링 3.1 세트 - 전2권
67,500원
(10%↓+5%)
 
에이콘 출판사의 신간
게임 테스팅 3/e
찰스 슐츠 , 로버트 덴튼 브라이언트 [옮긴이]진석준 저
31,500원
(10%↓+1%)
 
순수 함수형 데이터 구조
크리스 오카사키 [옮긴이] 오현석 저
31,500원
(10%↓+5%)
 
빅데이터 시각화
제임스 밀러 [옮긴이]최준규, 강형건 저
25,200원
(10%↓+5%)
 
자바 데이터 분석
존 R. 허바드 [옮긴이] 김명훈 저
31,500원
(10%↓+5%)
 
보안 빅데이터 분석 플랫폼 구축과 활용
김대용 저
31,500원
(10%↓+5%)
 
이메일주소수집거부