『프로 스프링 2.5』는 이미 국내 출간된 그 어떤 책보다도 스프링 프레임워크 2.5에 대해 상세하게 설명하고 있다. 새로 추가된 기능에 대한 내용뿐 아니라 기본 원리 및 여러 가지 사용 방법과 그 장·단점에 관해서도 자세히 설명한다. 뿐만 아니라 독자의 이해를 돕고 실무에서도 쉽게 적용할 수 있도록 다양하고 유용한 많은 예제 코드를 제공한다. 따라서 스프링을 처음 사용하는 사용자에게도 유용하지만 기존의 프로젝트에 적용한 스프링을 보다 더 스프링답게 사용하려는 사용자에게도 유용한 참고서가 될 것이다.

최근 자바 세계는 EJB 같은 소위 ’중량’ 아키텍처에서 스프링과 같은 경량 프레임워크로의 드라마틱한 이전을 목격하였다. CMP 같은 복잡하고 컨테이너에 의존적인 서비스와 트랜잭션 관리 시스템은 더욱 간결한 하이버네이트나 관점 지향 프로그래밍(AOP, aspect-oriented programming) 같은 대안들로 대체되었다. 그 핵심에서 스프링은 제어의 역전(IoC, Inversion of Control)의 원칙에 기반하여 결합력 있고 가벼운 컨테이너를 제공하여 그 위에서 애플리케이션을 빌드할 수 있게 되었다. 스프링은 이 컨테이너 위에서 매우 다양한 범위의 고품질 오픈소스 프로젝트들을 하나의 응집성 있는 프레임워크로 묶으며 무수히 많은 유용한 서비스들을 제공해 준다.

스프링 프레임워크의 품질은 전통적인 Java EE 아키텍처를 많은 경우에서 대체할 만큼 훌륭하며, 그 결과 매우 많은 개발자들이 포괄적인 스프링 스킬을 필요로 하게 되었다. 스프링이 꽤 폭넓은 문서와 예제를 보유하고 있음에도, 우리는 많은 개발자들이 여전히 스프링을 사용하는 방법과 어떻게 효과적으로 사용할지 이해하는 데 어려움을 겪고 있다고 느끼고 있다. 그래서 우리는 프로 스프링 2판을 쓰기로 결정하였다.

처음에는, 몇몇 장들을 갱신한 뒤에 프로 스프링 2.5라고 부르려고 했었다. 하지만 스프링 2.5가 매우 많은 새로운 기능과 개선 사항들을 포함하고 있음을 깨달았다. 비록 과거 ’프로 스프링’이름을 하고 있지만, 이 책은 완전히 새롭게 쓰였다.

이 책 전반을 통해 독자 여러분들은 스프링을 사용하여 더 나은 웹과 독립 애플리케이션을 구축하는 방법과 이 프레임워크의 다양한 선택 사항들 중에 어떤 것을 사용할지 가려내는 법을 배우게 될 것이다. 우리의 목표는 독자 여러분들께 여러분 자신의 애플리케이션에서 스프링을 효율적으로 사용할 때 필요한 모든 지식을 제공하고 스프링의 내부가 어떻게 돌아가는지에 대한 통찰력을 주고자 함이다.

독자 여러분들은 다음과 같은 내용을 배울 것이다.

  • AOP 문맥 내에서 IoC에 대한 기본 개념
  • 책에서 제공하는 이해하기 쉬운 예제 애플리케이션을 통해 알게 될 스프링의 일관성과 강력한 기능
  • 스프링의 포괄적인 AOP 기반 트랜잭션 관리 프레임워크를 포함해서, 일반적인 EJB 기능을 스프링으로 대체하는 방법
  • 스프링의 내장 JMX 엔진을 사용하여 스프링 컴포넌트와 애플리케이션을 효율적으로 관리하는 방법
  • Quartz를 사용하여 스프링 애플리케이션에 스케줄링 기능을 추가하는 방법

이 책을 읽고 난 뒤에는 스프링과 이에 관련된 오픈소스 프로젝트들을 사용하여 효과적으로 애플리케이션을 구축하는 데 필요한 지식을 갖추게 될 것이다.

롭 해롭

- SpringSource 애플리케이션 플랫폼의 최고 소프트웨어 엔지니어겸 수석 엔지니어

침통한 마음으로 프로 스프링 2.5 저작에 참여하지 않기로 결정했었다. 이 책을 넘겨받아 작업해준 얀(Jan)이 그 때 옆에 있었다는 것에 마음속 깊이 감사하고 있다. 프로 스프링이 내 삶에 있어서 지난 3년간 커다란 부분을 차지하고 있었기에 애틋한 감정을 가벼이 놓을 수 없었다. 유겐(Juergen)과 내가 스프링 프레임워크 2.0 작업을 시작하면서, 소프트웨어를 만듦과 동시에 책을 쓰는 일에 참여할 만한 시간이 없다는 것을 깨닫고 있었다. 운 좋게도 얀이 나 대신 일을 맡아 준 것이다.

얀과 Apress는 원래 프로 스프링 2.0 책을 집필할 계획이었지만, 유겐과 내가 스프링 프레임워크를 많이 변경하는 바람에 의도치 않게 그들이 속도를 따라잡지 못하게 만들어 버렸다. 모든 JSP 폼 태그를 수정하면서 얀에게 너무 많을 일거리를 만들어 준다는 생각에 움츠렸었던 것이 선명히 기억난다.

2.5 버전이 서서히 등장하기 시작하면서 얀은 집필 중인 2.0에 관한 내용 대신 2.5로 바로 건너뛰기로 결정을 내렸다. 그것은 현명한 선택이었다. 스프링 프레임워크 버전 2.5는 스프링 프레임워크와 전반적인 엔터프라이즈 자바 프레임워크의 최신 기술들을 반영하고 있다. 성실한 자바 개발자라면 모두 이 중요한 도구에 대한 가이드 서적을 읽어볼 필요가 있다.

케이크 솔루션(Cake Solutions)을 운영하던 초기 시절에 다른 프로그래머를 고용할 필요가 생겼다고 결정하던 때가 떠오른다. 우리들은 대게 고용에 대한 경험이 없었고, 프로그래머를 고용하는 데에는 문제가 많았다. 우리는 대졸자를 원하긴 해지만, 얀처럼 조예가 깊은 사람을 얻게 될 거라고는 생각지도 못하고 있었다.

출근한 첫 주에 그는 바닥부터 시작해서 완전한 데스크톱 메일링 패키지를 작성했고, 그것이 잘 작동했던 것이 기억난다. 지난 5년간 얀은 케이크 솔루션의 대부분의 프로젝트에서 핵심적인 역할을 했다. 그 프로젝트들은 대부분 스프링 프레임워크 기반의 대규모 자바 제품들이었다.

스프링에 관한 그의 지식은 막대한 양의 실전 경험에서 우러나오는 것이다. 그는 스프링 버전 1.0 때부터 이와 함께 하였으며, 그 위에서 성공적으로 여러 시스템들을 론칭하였다.

그를 대변해 얘기하건대, 그는 프로 스프링 2.5를 쓰는 것이 혼자서 하기에는 너무 큰 일임을 절감하고, 케이크 솔루션 팀의 다른 사람들에게 도움을 요청하였다. 스프링을 진정으로 경험한, 진짜 프로그래머들로 이뤄진 팀이 지식을 서로 주고 받게 된다는 사실이 나를 크게 흥분하게 만들었다. 많은 사람들이 이 책이 없어서는 안 될 레퍼런스임을 알게 될 것을 믿어 의심치 않는다.

따라서 비록 나 자신은 책 작업에 참여할 수 없다는 사실에 낙담하긴 했지만, 얀이 많은 사람들이 바라마지 않았던 프로 스프링의 수정판을 출간한다는 사실이 기쁘다.

얀 마카첵 JAN MACHACEK

얀 마카첵(JAN MACHACEK)은 케이스 솔루션의 수석 소프트웨어 아키텍트이며, 모든 프로젝트에서 아키텍처 관련 결정의 핵심에 있는 인물이다. 아키텍처는 차치하고도, 얀은 구현에 있어 가장 복잡하고 어려운 분야들에 대해 도움을 자주 요청 받는 사람이기도 하다. 케이크 솔루션에 입사한 뒤로 얀은 복잡한 프로젝트들을 폭넓고 다양하게 수행했을 뿐만 아니라 출판한 책들을 통해서도 그의 자바에 대한 깊은 경험을 증명해 보였다. 그는 여가 시간에 싸이클을 타며 즐기는 맨체스터 자전거 클럽 회원이기도 하다. 그는 갖가지 힘겨운 상황에서도, 그리고 자전거 로드 레이스에서도 최선을 다하는 사람이다. 얀은 1-4, 6, 9, 11, 14, 16, 22장을 저술하였다.

알렉사 부코틱 ALEKSA VUKOTIC

알렉사 부코틱(ALEKSA VUKOTIC)은 케이크 솔루션의 소프트웨어 아키텍트이다. 대부분의 케이크 솔루션의 프로젝트들의 구현뿐만 아니라 아키텍처를 두루 살펴보고 있다. 그는 대부분의 Java EE 기술에 대해 폭넓은 경험을 보유하고 있으며, 특히 스프링 MVC와 시큐리티에 일가견이 있다. 그는 또한 사실상 모든 기술적 문제를 해결할 수 있는 솜씨를 가지고 있다. 그는 훌륭한 강사이며 케이크 솔루션 개발자 팀을 지휘하고 그 팀이 가장 복잡한 문제들을 해결할 수 있도록 돕는 역할을 하고 있다. 알렉사는 Java와 .NET 플랫폼에 대한 관심뿐만 아니라, 스포츠, 음악 그리고 밤에 나가 즐기는 것을 좋아한다. 알렉사는 케이크 솔루션의 모든 주요 프로젝트에서 얀과 함께 일한다. 알렉사는 5, 8, 10, 15, 17, 21장을 저술하였다.

아너반 차크라보티 ANIRVAN CHAKRABORTY

아너반 차크라보티(ANIRVAN CHAKRABORTY)는 케이크 솔루션 선임 개발자이다. 스프링 프레임워크에 대한 폭넓은 경험과 디테일한 부분에 주의를 기울이는 성격 덕분에 그는 케이크 솔루션 프로젝트의 어려운 측면들을 구현하는 역할을 하였다. 아너반은 그의 코드에 대해 큰 자부심을 가지고 있으며 항상 코드가 다른 이들에게 예시로 쓰일 수 있도록 최선을 다한다. Java EE와 리눅스를 다루지 않을 때는 친구들과 훌륭한 음식과 음료를 즐긴다. 그는 크리켓(야구 비슷한 스포츠)의 열렬한 팬이며 탐정 소설을 즐겨 읽는다. 아너반은 7, 13, 19, 20장을 저술하였다.

제시카 디트 JESSICA DITT

제시카 디트(JESSICA DITT)는 2008년 초부터 런던에 기반을 둔 Avenue A|Razorfish(세계 최대 규모의 광고 에이전시 중 하나-옮긴이)에서 개발자로 일하고 있다. 그 전에는 케이크 솔루션 팀에서 2년 반 동안 일했었다. 그는 매우 많은 엔터프라이즈급 프로젝트에서 일해왔으며, 그 모두는 스프링 프레임워크와 스프링 웹 플로우로 작성되었다. 제시카는 루씬(Lucene)을 이용한 효율적인 인덱싱에 관해 매우 전문적인 경험을 가지고 있으며, Gigaspaces(http://www.gigaspaces.com/)를 사용하여 Java EE 애플리케이션의 확장성 문제들을 효율적으로 해결해왔다. 제시카는 업무 시간이 끝나면 열심히 배구를 하고 헬스장에서 운동을 한다. 제시카는 12, 18장을 저술하였다.

백기선

스프링과 하이버네이트에 관심이 많으며, 블로그(http://whiteship.me)에서 모든 걸 공유하고 있다. 5, 6, 11장을 번역했으며, 책 전반에 걸쳐 용어정리와 감수를 맡았다.

손권남

『iBATIS 인 액션』을 번역했으며, 오픈 마루 웹 서비스팀에서 일하고 있다. 자신의 블로그(http://kwon37xi.egloos.com)에 가끔씩 부질 없는 글을 올리기도 하며, 공부하다 기억할 만한 내용들을 정리해 두기도 한다. 9,10,19,20,21,22장을 번역했다.

박천구

자바, 오픈소스, 미디어 서비스 등에 관심을 가지고 있다. 『EJB&WebLogic』(2002, 가메출판사)을 집필했으며, 『Prototype & Scriptaculous 인 액션』(2008, 위키북스)과 『프로 웹 2.0 매시업』(2009, 위키북스)을 번역했다. 16, 17, 18장을 번역했다.

김홍회

현재 JCO 기술전략팀장 및 자바스터디 네트워크(www.javastudy.co.kr) 대표운영자로 활동하고 있으며, 동부 CNI에서 금융개발을 담당하고 있다. 주된 관심분야는 개발 방법론 및 웹서비스이다. 1, 2, 3, 4, 7장을 번역했다.

허혁

nhn 포토서비스팀에서 포토 서비스를 하고 있으며 자동화시스템과 장애 검출을 위해 groovy와 spring batch 적용을 확대 중이다. 8, 12, 13, 14, 15장을 번역했다.

봄싹 스터디(http://s2c.pe.kr)

봄싹 스터디는 2008년 8월, 스프링 프레임워크 학습을 중심으로 결성된 오프라인 중심 스터디 모임이다. 자율적이며, 개방적인 스터디를 지향하며, 자기개발을 위해 꾸준히 노력하는 자바 개발자들의 모임이다.

내가 처음 스프링 프레임워크(이하 스프링)를 학습하던 시절에는 한글로 된 책이나 문서가 거의 없었다. 유명 블로거 한두 명의 블로그에 요약되어 있던 정보가 전부였다. 하지만 어느새 ‘스프링 프레임워크 2.5’를 다룬 책이 두 권이나 출간되었고, 그 전에도 스프링관련 번역서가 두 권 출간되었다(스프링 인 액션 1, 2). 이 책은 세 번째 번역서다. 그만큼 국내에서도 스프링 인기가 급상승하고 있으며 그 입지가 넓어지고 있다는 것을 실감할 수 있다.

국내뿐만 아니라 국외에서의 인기도 직접 체험할 수 있었다. 2008년 12월, 꿈에도 그리던 스프링 컨퍼런스(Spring One America)에 다녀왔다. 스프링의 아버지이자 나의 할아버지 격인(나는 스프링의 아들이니까) 로드 존슨과 함께 멋진 포즈로 사진을 찍었을 때 그 짜릿함은 아직도 날 설레게 한다. 그 자리에 모였던 전세계 각국의 개발자들 앞에서 스프링은 위풍당당하게 말했다. “복잡도를 제압하겠다.” 라고.

아이러니하게도 스프링 자체는 점점 더 복잡해지고 있다. 계속해서 새로운 기능들이 추가되고 있고 따라서 공부할 것들이 늘어나고 있다. 저자는 2.0.x 대부터 본격적으로 학습을 했는데, 그 당시에도 이미 스프링은 상당히 복잡해 보였다. 특히 개인적으로 AOP와 MVC 부분에 상당히 많은 학습 시간을 소비했다. 기본적인 동작 원리부터 파악하고 사용법을 익히는 방법으로 학습을 했는데 동작 원리도 쉽지 않을 뿐더러 사용법이 다양해서 몇 번에 걸쳐서 학습을 반복했던 경험이 있다. 특히 스프링 AOP의 프록시 메커니즘은 최근에 들어서야 이해할 수 있었다.

그럼 대체 스프링은 왜 복잡도를 제압하겠다면서 점점 더 복잡해지는 것일까? 스프링이 제압하려는 복잡도는 스프링 자체의 복잡도가 아니라 JEE의 복잡도이기 때문이다. 그것의 복잡도를 제압하기 위해서는 스프링이 더 커지고 복잡해질 수도 있다. 하지만 사용자에게는 점점 더 편리하고 간편한 방법을 제공할 것이다.

예를 들어 MVC가 그렇다. 이전 버전에서는 SimpleFormController의 복잡한 워크 플로를 개발자가 이해해야만 했고 스프링 API를 사용하더라도 Servlet API에서 완전히 벗어날 수 없었다. 하지만 스프링 2.5를 거쳐 3.0으로 가면서 스프링은 이전 MVC의 컨트롤러 계층 구조를 Deprecated 시켰고 라이브러리에서 삭제하려고 한다. 추측하건대, 그 이유는 사용하기 복잡하기 때문일 것이다. 그 대신 @MVC라고 일컫는 애노테이션들을 사용하여 POJO 스타일로 간편하게 컨트롤러를 개발할 수 있다. Servlet API를 직접 사용하지 않고도 request나 session 정보를 다룰 수 있다. 이 밖에도 2.5에 도입한 컴포넌트 스캔과 @Component 애노테이션 등 여러 기능들이 스프링이 JEE 복잡도를 제압하는 기반 시설에 해당한다고 볼 수 있다.

이렇게 점점 더 복잡해져 가는 스프링을 제대로 학습하려면 스프링의 가장 핵심부인 IoC와 AOP 원리 및 스프링의 추상화 패턴을 잘 이해하고 기본적인 기능들의 메커니즘을 이해하는 것이 중요하다. 그 뒤에는 점점 더 간편해지는 사용법만 조금씩 익히면 되기 때문에 학습 부담이 줄어든다. 『프로 스프링 2.5』는 그런 면에서 여러분에게 정말 유익한 스프링 참고서가 될 것이다.

01장 스프링 소개

스프링이란?
– 의존성 주입을 넘어서
– 스프링과 Aspect-Oriented Programming
– 스프링에서의 데이터 접근
– Java EE의 단순화 및 연동
– 잡(job) 스케줄링 지원
– 메일 지원
– 동적 언어
– 원격 지원
– 트랜잭션 관리
– 스프링 MVC 프레임워크
– 스프링 웹 플로
– AJAX
– 국제화
– 예외 처리 단순화
스프링 프로젝트
– 스프링의 기원
– 스프링 커뮤니티
– 마이크로소프트 닷넷용 스프링
– 스프링 IDE
– 스프링 시큐리티(예전 Acegi)
– 스프링 대안책
예제 코드
요약


02장 시작하기

스프링 프레임워크 가져오기
– CVS에서 스프링 체크아웃 하기
– 스프링 소스코드 빌드하기
– 스프링 배포판 검증하기
– 스프링 패키징
– 스프링 의존 라이브러리
– 스프링 예제 애플리케이션
– 스프링과 IDE 설정
Hello, World
“Hello, World”에 스프링 적용하기
– 의존성 주입
– 스프링의 영향력
요약

03장 제어 역전 소개

IoC와 DI
IoC의 유형
– 문맥에 따른 의존성 룩업
– 생성자 DI
– 세터 DI
– 주입 vs. 룩업
– 세터 주입 vs. 생성자 주입
스프링의 IoC
스프링을 사용하는 DI
– 빈과 빈팩토리
– BeanFactory 구현체
– XML 빈 정의
– 생성자 주입 사용하기
– 주입 매개변수
– 빈 작명 이해하기
– 빈 인스턴스화 모드
– 의존성 처리하기
– 빈을 자동으로 연결하기
– 의존성 확인하기
– 빈 상속
요약

04장 기초를 넘어서

스프링이 애플리케이션 이식성에 주는 영향
빈 생명 주기 관리
– 빈 생성에 끼어들기
– 빈 소멸에 끼어들기
빈이 스프링을 인식하도록 만들기
– BeanNameAware 인터페이스 사용하기
– BeanFactoryAware 인터페이스 사용하기
매소드 주입 사용하기
룩업 메서드 주입
메서드 교체
FactoryBean 사용하기
– MessageDigestFactoryBean
– FactoryBean에 직접 접근하기
BeanFactoryPostProcessor
BeanFactoryPostProcessor 구현하기
자바빈즈 PropertyEditor
– 내장 프로퍼티에디터
– 커스텀 프로퍼티에디터 만들기
BeanPostProcessor
– BeanPostProcessor 구현하기
– 빈포스트프로세서 사용 시기
스프링 애플리케이션컨텍스트
– 애플리케이션컨텍스트 구현체
– ApplicationContextAware 사용하기
– 빈 초기화 제어하기
– 애노테이션-기반 설정 사용하기
– MessageSource의 국제화
– MessageSource를 독립 애플리케이션에서 사용하기
– MessageSourceResolvable 인터페이스
– 애플리케이션 이벤트 사용하기
– 이벤트 사용에 대한 고려
– 리소스 접근
요약

05장 스프링 AOP 소개

AOP 개념
AOP 종류
– 정적인 AOP
– 동적인 AOP
– AOP 종류 선택하기
스프링에서 AOP
– AOP 진영
– AOP로 "Hello, World"
– 스프링 AOP 아키텍처
– ProxyFactory 클래스
– 스프링에서 어드바이스 만들기
어드바이저와 포인트컷
– Pointcut 인터페이스
– ComposablePointcut 사용하기
– 포인트컷팅 요약
프록시에 관한 모든 것
– 프록시 이해하기
– JDK 동적 프록시 사용하기
– CGLIB 프록시 사용하기
– 프록시 성능 비교하기
– 어떤 프록시를 사용해야 하는가?
요약

06장 AOP 심화 학습

@AspectJ
@AspectJ 애스팩트를 보다 자세히
– 포인트컷
– 포인트컷 표현식
– 포인트컷 표현식 살펴보기
– XML에서 @포인트컷 사용하기
– 어드바이스 종류
– 인자 바인딩
– Introduction
– 애스팩트 라이프 사이클
AOP를 지원하는 프레임워크 서비스
– aop 네임스페이스를 사용하여 첫 번째 애스팩트 작성하기 
– aop 네임스페이스에서 포인트컷
– aop 네임스페이스 사용하여 어드바이스 만들기
– aop 네임스페이스에서 Introduction
어떤 스타일을 사용해야 하는가?
스프링 AOP 프록시 사용하기
– 프록시의 영향
AspectJ 연동
– 첫 번째 애스팩트 작성하기
– 예제 애플리케이션 컴파일하기
– AspectJ의 애스팩트 스코프
로드-타임 위빙
– 여러분의 첫 번째 로드-타임 위빙 예제
– LoadTimeWeaver 룩업 전략 
실용적인 AOP 사용처
– 성능과 건강도 모니터링
요약

07장 스프링 스키마와 네임스페이스

왜 새로운 설정인가?
스프링 2.5에 포함되어 있는 스키마
– beans 스키마
– context 스키마
– util 스키마
– tx 스키마
– aop 스키마
– jee 스키마
– lang 스키마
스키마 무대 뒤편에
커스텀 스키마
IDE 설정
요약

08장 스프링 패턴

디렉터리 구조
– 단순한 애플리케이션
– 복잡한 애플리케이션
– 패키지 만들기와 이름짓기
디자인 패턴 소개
– 인터페이스 기반 프로그래밍
– 생성 패턴
– 구조 패턴
– 행위 패턴
– 템플릿 매서드
스프링 애플리케이션 패턴
– 계층 구조 설계
– 고성능 페이징
– 다중 오류 보고
– 사용자 인터페이스 트랜잭션
– 백그라운드 프로세스
– 이메일 통지
– 에러 수집과 로깅
요약

09장 JDBC 지원

JDBC 핵심 개념
– DriverManager와 Connections 사용하기
– PreparedStatement 사용하기
– CallableStatement 사용하기
– 다른 JDBC 개념들
스프링 데이터 접근 지원에 대한 개념
JDBC 데이터 접근 지원
JdbcTemplate 사용하기
– JdbcTemplate.execute
– JdbcTemplate.query와 그 친구들
– JdbcTemplate.update
– JdbcTemplate.batchUpdate
RdbmsOperation 하위클래스
– sqlUpdate
– BatchSqlUpdate
– SqlCall과 StoredProcedure
– SqlQuery와 그 하위클래스들
– JdbcTemplate이냐 RdbmsOperation이냐?
대형 이진 객체
JdbcDaoSupport
간단한 스프링 JDBC
– 간단한 스프링 JDBC
– SimpleJdbcCall
– SimpleJdbcInsert
– SimpleJdbcDaoSupport
요약

10장 iBATIS 통합하기

iBATIS는 무엇인가?
– iBATIS 버전
– 인프라스트럭처와 설정
매핑 파일
– sqlMap 파일
– iBATIS와 스프링 설정하기
데이터 질의
– 간단한 질의
– 일대일(1:1) 질의
– 일대다(1:n) 질의
– 다대다(m:n) 질의
데이터 갱신
데이터 삭제
데이터 삽입
iBATIS의 부족한 점은 무엇인가?
전반적인 성능
요약

11장 하이버네이트 지원

하이버네이트 기초
패키징
하이버네이트 지원 소개
– 하이버네이트 세션 사용하기
– HibernateDaoSupport 사용하기
– HibernateTemplate과 Session 중에 어떤 것을 사용할지 결정하기
엔터프라이즈 애플리케이션에서 하이버네이트 사용하기
– 변경된 데이터 수정 방지하기
– 객체 동일성
– 트랜잭션 처리
– 로딩 지연
– 대규모 데이터 집합 다루기
– 큰 객체 다루기
– 하이버네이트와 다른 DAO 코드 조합하기
요약

12장 스프링과 잡 스케줄링

JDK 타이머를 이용한 잡 스케줄링
– 타이머 트리거 타입
– 간단한 잡 만들기
– JDK 타이머 스케줄링에 대한 스프링 지원
OpenSymphony 쿼츠를 사용한 잡 스케줄링
쿼츠 소개하기
스프링의 쿼츠 지원
잡 스케줄링 고려사항
– 스케줄러 선택하기
– Job 클래스에서 잡 로직을 분리해서 묶기
– 작업 실행과 스레드 풀링
요약

13장 스프링의 메일 지원

스프링 메일 API의 구조
– 스프링을 사용하여 메일 설정하기
간단한 이메일 보내기
– 프로그램상에서 이메일 구성하고 전송하기
– 선언적으로 이메일 구성하기
– MIME 메시지의 작성과 전송
– 엔터프라이즈 수준의 이메일 처리에 대해 자세히 알아보기
요약

14장 동적 언어

지원되는 언어에 대한 기초적인 내용
– 빈쉘
– 그루비
– 제이루비
동적언어를 스프링 빈으로 사용하기
– 동적 언어 지원기능의 내부 동작 방식
– 동적 언어로 작성된 빈의 프록시 생성하기
– 성능
갱신이 가능한 빈
빈쉘로 구현한 빈
제이루비로 구현한 빈
그루비로 구현한 빈
스프링 애플리케이션에서 동적 언어의 일반적인 사용방법
요약

15장 스프링 리모팅 사용하기

스프링 리모팅 아키텍처
RMI
– 임의의 서비스 노출시키기
– 프록시를 사용한 RMI 서비스 접근
– CORBA 서비스 노출시키기
– CORBA 서비스 접속하기
JAX-RPC를 통한 웹 서비스
– 아파치 Axis 소개
– ServletEndpointSupport로 웹 서비스 만들기
– 프록시를 사용하여 RPC형식의 웹 서비스에 접근하기
– Axis 서비스에서 자바빈 이용하기
JAX-WS 웹 서비스 사용하기
– SimpleJaxWsServiceExporter를 사용하여 웹 서비스 노출하기
– XFire를 이용하여 웹 서비스 노출하기
– JAX-WS 웹 서비스에 접근하기
– 다른 클라이언트에서 자바 웹 서비스에 접근하기
HTTP Invoker를 이용하여 웹 서비스 만들기
– 간단한 서비스 노출시키기
– 프록시를 이용하여 HTTP Invoker 서비스에 접근하기
– HTTP Invoker 서비스에서 임의 객체 사용하기
– HTTP 기본 인증 사용하기
리모팅 아키텍처 선정하기
요약

16장 트랜잭션 관리

스프링 트랜잭션의 추상화 레이어
트랜잭션의 프로퍼티
– TransactionDefinition 인터페이스
– TransactionStatus 인터페이스 사용하기
– PlatformTransactionManager의 구현
트랜잭션 관리에 대한 예제 살펴보기
– 트랜잭션이 적용되지 않은 코드
프로그래밍을 통한 트랜잭션 관리
– TransactionTemplate 클래스 사용하기
– 프로그래밍을 통한 트랜잭션 관리에 대한 요약
선언을 통한 트랜잭션 관리
– TransactionProxyFactoryBean 사용하기
– 트랜잭션 관리에 프록시를 사용하여 얻어지는 효과
AOP 트랜잭션 관리
– 애노테이션 기반의 AOP 트랜잭션 관리
– XML AOP 트랜잭션 관리 사용하기
여러 개의 트랜잭션 리소스에 트랜잭션 적용하기
트랜잭션 동기화를 직접 구현하기
요약

17장 스프링 MVC로 웹 애플리케이션 개발하기

MVC 아키텍처
스프링 MVC
– MVC 구현
핸들러 맵핑하기
스프링 컨트롤러
– AbstractController
– ParameterizableViewController
– MultiActionController
인터셉터
뷰, 로케일, 그리고 테마
– 프로그래밍을 통해서 뷰 사용하기
– ViewResolver 사용하기
– 현지화된 메세지를 사용하기
– 로케일 사용하기
– 테마 사용하기
– 폼 컨트롤러 사용하기
– AbstractWizardFormController에 대해 알아보기
– 파일 업로드
예외 처리하기
스프링과 다른 웹 기술들
– JSP 사용하기
– 벨로시티 사용하기
– 프리마커
– XSLT 뷰
– PDF 뷰 사용하기
– 엑셀 뷰 사용하기
– 타일즈와 스프링 통합하기
– JasperReports
설정을 대신하는 스프링 컨벤션
– Controller 컨벤션
– MultiActionController 컨벤션
– Model 컨벤션
– View 컨벤션
Controller 설정에 애노테이션 사용하기
– @Controller 애노테이션
– @RequestMapping 애노테이션
– @RequestParam 애노테이션
– @ModelAttribute 애노테이션
– 애노테이션과 커맨드 컨트롤러 함께 사용하기
요약

18장 스프링 웹 플로

스프링 웹 플로에 대한 소개
– 핵심 개념
– 스프링 웹 플로 다운로드하기
– 스프링 웹 플로의 의존성
Hello, Web Flow!
상태에 대해서 알아보기
– 뷰 상태
– 디시젼 상태
– 종료 상태
트랜지션 다루기
고급 수준의 개념
– 표현 언어와 스코프
– 액션 구현하기
– 모델 데이터 바인딩하기
– 부분적으로 뷰를 렌더링하기
– 플로의 입력/출력 파라미터를 매핑하기
– 서브플로 사용하기
스프링 웹 플로의 내부구조
– 플로의 실행 구조
– 플로 실행자
– 플로 정의 레지스트리
– 플로 실행 저장소
스프링 MVC와 통합하기
– 플로 처리
– 뷰 결정하기
스프링 보안모듈로 플로에 보안설정하기
– 1단계: SecurityFlowExecutionListener 추가하기
– 2단계: 기본적인 사용자 인증과 권한 인증의 처리
– 3단계: 플로 정의에 보안 규칙 정의하기
문제 해결 방법
– 상태 정보가 제공되도록 내비게이션 제어하기
– 브라우저의 내비게이션 메뉴에 대한 지원과 중복 폼 전송
플로 정의 테스트하기
요약

19장 스프링과 AJAX

DWR
Installing DWR
스프링에서 DWR 설정하기
완전한 예제
DWR 설정 테스트하기
완전한 예제 실행해보기
DWR 스크립트의 기본
– 간단한 콜백 함수 사용하기
– 메타 데이터 객체 호출하기
engine.js
– 일괄 호출
– 호출 순서
– 오류와 경고 다루기
util.js
DWR과 보안
DWR의 장점과 단점
요약

20장 스프링과 JMX

JMX 다시보기
빈 노출시키기
– MBeanExporter
– MBeanServerFactoryBean
– 빈을 이미 존재하는 MBean 서버에 노출시키기
– 빈 등록 시 동작
객체 이름 제어하기
관리 인터페이스 제어하기
– MBeanInfoAssembler 인터페이스
– MethodNameBasedMBeanInfoAssembler 인터페이스
– 자바 인터페이스를 통해 관리 인터페이스 제어하기
– 소스 레벨 메타 데이터 사용하기
스프링 JMX 원격 제어하기
– 원격 MBean 노출시키기
– 원격 MBean에 접근하기
– MBean 프록시하기
스프링 JMX에서의 통지
– 통지 감지기
– 통지 발행하기
요약

21장 Spring에서 테스트하기

단위 테스트란?
단위 테스트
– 웹 계층 단위 테스트
통합 테스트
– AbstractSpringContextTests 사용하기
– AbstractDependencyInjectionSpringContextTests 사용하기
– AbstractTransactionalSpringContextTests 사용하기
– AbstractAnnotationAwareTransactionalTests 사용하기
– JNDI
스프링 TestContext 프레임워크
– TestContext 프레임워크에서의 애플리케이션 컨텍스트와 의존성 주입
– TestContext 프레임워크와 트랜잭션
– 지원 클래스
테스트 커버리지
요약

22장 스프링 성능 튜닝

성능과 응답성
엔터프라이즈 애플리케이션 성능 문제 살펴보기
자바 EE 애플리케이션 성능 측정하기
– 무엇을 측정할지 알아내기
– 필요한 데이터 셋 결정하기
– 데이터 접근 계층 개선하기
– 트랜잭션 관리 개선하기
– 원격 호출의 성능 제어
– 뷰 계층의 성능에 대한 이해
캐시 사용하기
성능 테스트
애플리케이션의 건강과 성능 측정
성능 최적화에 관한 더 많은 자료
요약


  • 103쪽 중간 NOTE에서
노트 빈 ---> 빈

  • 193쪽 가운데 7개 메소드 중에서
getURL ---> getURL()

  • 393쪽 예제 8-13에서 위로 세 번째 줄
제출하는데 데 ----> 제출하는 데

  • 418쪽 그림 9-2 제목
테이블 다이어그림 ---> 테이블 다이어그램

  • 528쪽 예제 11-6 밑의 문장에서 다섯 번째 줄
// do work ---> // 작업 수행 

  • 611쪽 예제 12-25 주석 부분
// get the scheduler ---> // 스케줄러 가져오기

  • 611쪽 예제 12-25 주석 부분
// the job has not yet been created ---> // 아직 작업이 만들어지지 않았다.

  • 669~670쪽 예제 14-5 그루비 예제와 예제 14-7쪽 제이루비 예제에서
    • 예제 맨 첫줄을 제외한 나머지 코드가 서로 바뀌었습니다.

  • 766쪽 예제 16-9 제목
The dao-context.xml 설정파일 ---> dao-context.xml 설정파일

  • 801쪽 그림 17-2 4번
4. (빈칸) ---> 4. 사용

  • 828쪽 네 번째 머릿글 기호에서
마법사 스타일(1) ---> 마법사 스타일

  • 845쪽 세 번째 줄 코드에서
Expiration Date ---> Image

도서 소개자료


  Edit page Add Comment Page Info My Prefs Log in
This page (revision-1) last changed on 09:27 09-Jul-2010 by unknown.
 

JSPWiki v2.4.87