Top

토비의 스프링 3 [스프링 프레임워크 3 기초 원리부터 고급 실전활용까지 완벽 가이드]

  • 지은이이일민
  • ISBN : 9788960771468
  • 50,000원
  • 2010년 08월 09일 펴냄
  • 하드커버 | 1,416쪽 | 188*255mm
  • 시리즈 : acorn classics, 오픈소스 프로그래밍

판매처

개정판

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/toby-spring3)


<책 소개>
대한민국 전자정부 표준 프레임워크 기술로 선정된 스프링의 국내 최고 권위자 토비 이일민이 저술한 스프링 프레임워크 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의 최신 기술 소개
JavaEE 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부에는 스프링 외의 서드파티 프레임워크나 JavaEE 표준 기술을 스프링에 통합해서 사용하는 내용이 일부 포함되어 있다. 이런 내용을 살펴볼 때는 관련 기술에 대한 지식이 추가로 필요할 수 있다.

저자/역자 소개

[ 저자 서문 ]

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

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

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

- 브리즈번에서 토비 이일민


[ 저자 소개 ]

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

목차

목차
  • 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: <bean> 태그
        • XML: 네임스페이스와 전용 태그
        • 자동인식을 이용한 빈 등록: 스테레오타입 애노테이션과 빈 스캐너
        • 자바 코드에 의한 빈 등록: @Configuration 클래스의 @Bean 메소드
        • 자바 코드에 의한 빈 등록: 일반 빈 클래스의 @Bean 메소드
        • 빈 등록 메타정보 구성 전략
      • 10.2.3 빈 의존관계 설정 방법
        • XML: <property>, <consturctor-arg>
        • 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
    • 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 태그 라이브러리를 이용한 폼 작성
        • 단일 폼 모델
    • <spring:bind>과 BindingStatus
    • 13.4.3 form 태그 라이브러리
    • <form:form>
      • <form:input>
      • <form:label>
      • <form:errors>
      • <form:hidden>
      • <form:password>, <form:textarea>
      • <form:checkbox>, <form:checkboxes>
      • <form:radiobutton>, <form:radiobuttons>
      • <form:select>, <form:option>, <form:options>
    • 커스텀 UI 태그 만들기
  • 13.5 메시지 컨버터와 AJAX
    • 13.5.1 메시지 컨버터의 종류
      • JSON을 이용한 AJAX 컨트롤러: GET + JSON
      • JSON을 이용한 AJAX 컨트롤러: POST(JSON) + JSON
  • 13.6 mvc 네임스페이스
    • <mvc:annotaion-driven>
    • <mvc:interceptor>
    • <mvc:view-controller>
  • 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 네임스페이스
        • <task:executor>
        • <task:scheduler>
        • <task :scheduled-tasks>와 <task:scheduled>
      • 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 모듈
  • 관련 블로그 글

    저자 이일민 님의 육성으로 듣는 《토비의 스프링3》
    사용자 삽입 이미지

    2010년 하반기 개발자들의 지갑을 활활 불태운 《토비의 스프링3》의 저자 이일민 님의 짧지만 뜨거운 이야기를 들을 수 있는 시간이 열립니다. 지난 209년 8월 호주로 떠나신 후 2년만에 귀국하신 저자 이일민 님의 이야기를 들어볼 수 있는 흔치 않을 기회입니다.《토비의 스프링3》 원고를 마무리 하시고 작년 9월 책을 펴내신 후 열화와 같은 독자들의 요청을 받았으나 가깝지 않은 거리 때문에 저자의 이야기는 들어볼 기회가 없었습니다.

    급작스럽게 귀국하셔서 약 2주간만 짧게 체류하시는 이유로 큰 자리는 마련하지 못했습니다. 따라서 이번 저자분의 깜짝 세션은 한국스프링사용자모임인 KSUG의 번개 세미나 한 꼭지로 이어지며 7월 2일 토요일 포스코빌딩 서관 5층에서 저자분을 만나실 수 있습니다.
    사용자 삽입 이미지

    장소가 협소한 관계로 공식 인원은 40분밖에 모시지 못합니다. 지금 온오프믹스 게시판에서 참가신청을 받고 있으니 바로 신청해주세요.

    KSUG 번개 세미나
    장소: 포스코빌딩 서관 5층 Win룸
    날짜: 7월 2일 (토) 오후 1시-4시
    발표 세션: 박성철 고속 개발을 위한 자바 데이터 접근 전략 비교
                   정상혁 TDD with Spring batch
                   이일민 ???
                   + 패널 토의
    회비: 5,000원 (샌드위치와 음료 제공)
    여기에서 신청하신 후 계좌번호 우리은행 [1002-529-504921], 예금주 [이재일]로 참가비를 입금해주시면 신청이 완료됩니다.

    KSUG 세미나의 박성철님과 정상혁님의 반짝반짝 빛나는 발표와 함께, 떡본김에 제사 지내고 싶은 분은 저자 이일민 님께 자유로운 질문과 사인 공세를 퍼부으셔도 좋습니다. 토비의 스프링 마우스패드를 아직 못 받으신 분은  저자 이일민님과 자유로운 질문 중에 득템하실 수 있는 기회도 드리겠습니다. 이 자리를 빌려 이일민님의 세션을 마련해주신 KSUG께 감사합니다.
    사용자 삽입 이미지

    다시 한 번 말씀 드리지만 인원이 제한되어 있으므로 어서 서둘러 주세요. 토요일에 뵙겠습니다.
    CC

    크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

    에이콘출판사의 200번째 책 『토비의 스프링 3』
    한 송이의 국화꽃을 피우기 위해
    봄부터 소쩍새는
    그렇게 울었나 보다.

    한 송이의 국화꽃을 피우기 위해
    천둥은 먹구름 속에서
    또 그렇게 울었나 보다.

    미당 서정주 시인의 <국화 옆에서> 중에서
    에이콘의 첫 책은 2000년 9월에 출간된 『Writing Windows WDM Device Drivers』였습니다. 지금은 새로 만든 번역본인『윈도우즈 드라이버 모델 WDM』로 바뀌었지요.

    그리고 100번째 책은 2007년 10월에 출간된 『정보 트래핑: 원하는 정보를 자동으로 수집하는 웹 모니터링 기법』이었습니다. 좀처럼 얼굴을 드러내지 않는 역자 yuna님과 함께 기념파티를 열었던 기억도 저희 블로그에 생생히 그 기록이 남아있네요.

    100번째 책을 내고 난 후로 따지면 근 2년 10개월만, 첫 책을 펴낸 지 근 만 10년만에, 에이콘의 200번째 책이 출간됐습니다.

    사용자 삽입 이미지
    사용자 삽입 이미지
    이 책의 예정된 출간일은 지난 8월 5일이었습니다. 그러던 것이 인쇄제본소 등 제작사의 여름 휴가 일정과 맞물려 한번 살짜쿵 연기가 됐고, 8월 9일로 잡혀진 출고일. 예기치 못한 제작상의 약간의 문제가 생겨 다시 출간일이 오늘 8월 16일로 미뤄져버렸습니다.
    사용자 삽입 이미지
    토비의 스프링 3, 기다리시던 분도 많고 예약판매도 엄청난(!) 숫자로 급증하던 이  책의 출간은 이토록 험난했습니다. 마음을 졸이고 지냈던 지난 몇 주, 특히 지난 일주일은 좌불안석이었지요.

    그동안 저번 블로그에 썼듯이, 평화를 (마나님의) 뱃속에 품고 시작했던 이 책의 저자 토비 이일민님은 8월 초 둘째 하늘이를 낳았습니다.

    기다리는 동안 이일민님은 지루해 할 독자들을 위해 다음과 같은 후속 연재를 시작합니다.

    [토스3] 테스트를 위한 필드 주입 유틸
    [토스3] 스프링 JDBC DAO에 lazy-loading 기능 적용하기
    [토스3] 스프링 JDBC DAO에 lazy-loading 적용하기 (2)
    [토스3] 매핑 가능한 BeanPropertySqlParameterSource

    게다가 남은 뒷이야기를 정리하시고 그간의 모든 인연과 악연을 되돌아보기 위해, 그리고 (정확히 기억나지는 않습니다만) 시인과 촌장 하덕규님이 진행하던 CBS 라디오 방송작가로도 활동하신 특이한 이력을 증명이라도 하듯 토비의 스프링 3이 나오기까지라는 글을 1편부터 4편까지 독자들의 뜨거운 성원(!) 속에 열혈 연재중입니다.

    저는 이 글을 읽고 두 번 놀랐습니다. 일단은 그 화려한 필력에, 그리고 그 촘촘하고 무시무시할 정도의 기억력에... ;;;

    저를 포함해 글에 나오는 주인공들은 약간은 오해가 있을 법한 이야기도 은근히 즐기는 것 같아 보입니다. ㅎㅎ 모두들 약간의 성향이 의심스러울 정도입니다. 오늘로써 4편까지 이어진 토비님의 후기 연재가 끝날지 모르겠지만, 이 글을 읽는 사람들 모두 아마 한 가지는 확실히 기억할 것입니다.

    "책이 한 권 나오기까지, 이렇게 많은 사람들의 도움과, 이토록 깊은 저자의 고민과 성찰이 담겨있구나."

    자, 이제 토비님의 글에 이어 저의 외전을 시작해볼까요?

    처음 만났던 편집장님은 말투는 상냥하지만 좀 차갑게 느껴졌다. 인사를 하고 식당으로 가서 식사를 하면서 처음 받은 질문이 아마 "책을 쓰실 수 있겠어요?"였을 것이다.

    홍상수 감독의 '오!수정'이나 구로자와 아키라의 '라쇼몽'처럼 서로 다른 기억의 단편을 조각조각 맞춰보는 것도 재미있을 것 같네요. 1편에서 이야기한 토비님과의 첫만남이 저도 얼핏 기억납니다. 아마 강남역 5번출구 근처의 패밀리 레스토랑이었던 걸로 기억합니다. 음식을 가져다 먹는 분주한 레스토랑이었지만 평소와 달리 사람이 많지는 않았던 것 같습니다.

    제가 처음 본 이일민님은 모두가 기억하시는 이미지 그대로일 겁니다. 3년이란 긴 세월을 저자로 모셔왔지만, 최근엔 호주에서 주로 체류하셨기에 자주 뵙지는 못했습니다만, 그 몇 번의 만남 속에서도 전 좀체로 찡그린 표정의 이일민님을 기억하지 못합니다. 늘 온화한 표정으로 말씀하시는 분이거든요. 조금 진지한 이야기가 나올라쳐도 표정은 예의 그 웃음띤 얼굴 그대로입니다.

    때문에, 게다가(!) 상냥한 그녀인 제가 아마 차갑게 대했다고 느끼셨던 것은 생전 해보지 못한 저술이라는 작업을 앞두고 암튼 담당 편집자의 기세에 본인도 모르게 눌리셨던 건 아니었나 싶습니다. ㅎㅎㅎ 그 이후로 계약서 초안을 메일로 보내드리고 저자 날인을 2007년 2월 14일에 했네요. 암튼 약간씩의 틈은 있습니다만, 그 오래 전 기억을 이렇게 낱낱이 기억해주는 저자분이 있어서 책을 펴내는 편집자로서 제가 주연이든 조연이든 단역이든 간에 상관없이 그저 유쾌하고 뿌듯하기 그지 없습니다. (그냥 저자를 등치는 악덕 편집자로만 그려지지 않기만을 바랄 뿐.^^)

    그러고 보니 토비님의 후기에서도 등장하는 마소 정희용 사장님의 이야기는 빼놓을 수가 없습니다. 당시에는 사장도, 편집장도 되기 이전 평기자셨던 정희용님은 이 책의 탄생에선 없어서는 안 될 고마운 분입니다.

    그러고 보면 저희 출판사 최대의 베스트셀러 예제로 배우는 Adobe 플렉스 책과 okgosu의 액션스크립트 정석 책을 집필하신 okgosu 옥상훈님도 정희용님이 소개해주셨습니다. 그러니 어느 하나 귀하지 않은 책이 없으나 우리 출판사의 좋은 저자를 소개해준 일등공신인 셈입니다. 옥상훈님을 통해 START! 트위터와 미투데이의 제이미 박정남님과 책을 내게 됐으니 출판계의 피라미드 인맥은 참 재미있네요.

    암튼 저는 여기까지만 정리해도 숨이 턱턱 차오르는데 토비님은 어떻게 그렇게 수많은 이야기를 조목조목 써내려가실 수 있는지. 스프링이 나오기까지의 스토리가 몇 편까지 이어질지는 모르겠습니다만, 책을 사든 독자들이 책에 담긴 지식과 통찰의 깊이가 어떻게 나오게 됐는지 느끼고, 혹여 나중에 책을 쓰고 싶은 개발자분들께도 도움이 되지 않을까 싶습니다.

    일본에서 잠시 들어와 오늘 들르신 우리 역자 양석호님의 말을 빌리자면 "일본에도 스프링 개발자가 많지만 이런 책은 일본에서도 단 한 권도 찾을 수 없다. 아마 우리 IT 역사에 길이 남을 만한 훌륭한 책이 될 거다."라는 말처럼 여러분들의 가려운 곳을 긁어줄 좋은 책이 될 것이라 믿습니다.
    사용자 삽입 이미지

    7월 말에 출시된다던 아이폰4와 토비의 스프링 3 중 어느 것이 먼저 시장에 등장할 것인가를 두고 그간 여러분들이 많이 저울질을 하셨더랬죠. 다음달폰과 다음달책이라고 우스개소리도 많이 돌았구요. 8월 18일 첫 예약판매를 시작한다는 아이폰4 출시소식과 함께, 에이콘출판사의 200번째 책 토비의 스프링3 출간을 모두 함께 축하합니다. 무엇보다도 그간 오랜 시간 동안 기다려주신 여러 독자분들께 감사 말씀 전합니다.

    사용자 삽입 이미지
    CC

    크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

    스프링의 이론과 실전 모두를 위한『토비의 스프링 3』
    사용자 삽입 이미지
    토비의 스프링 3
    스프링 프레임워크 3 기초 원리부터 고급 실전활용까지 완벽 가이드
    이일민 지음 | 오픈소스 프로그래밍 시리즈
    1,416쪽 | 하드커버 양장 | 50,000원 | 2010년 8월 16일 출간예정
    YES24, 교보문고, 강컴, 인터파크, 알라딘


    대한민국 전자정부 표준 프레임워크 기술로 선정된 스프링의 국내 최고 권위자 토비 이일민이 저술한 스프링 프레임워크 3 프로그래밍 완벽 바이블.

    스프링의 핵심 프로그래밍 모델인 IoC/DI, PSA, AOP의 동작원리와 이를 다양한 방식으로 응용한 예제을 통해서 스프링을 빠르게 이해할 수 있고 엔터프라이즈 개발에 효과적으로 적용할 수 있는 접근방법을 소개한다. 또한 스프링 3.0의 최신 기술을 상세하게 소개하고 그 중에서 자신에게 맞는 최적의 기술을 선택하고 조합할 수 있는 기준과 전략을 다룬다.

    스프링을 처음 접하거나 스프링을 경험했지만 스프링이 어렵게 느껴지는 개발자부터 스프링을 활용한 아키텍처를 설계하고 프레임워크를 개발하려고 하는 아키텍트에 이르기까지 모두 참고할 수 있는 스프링 종합 안내서.


    다행스럽게도 지금 스프링을 공부하는 여러분에게는 더 나은 방법을 제시할 수 있다. 로드 존슨이 했던 이야기를 로드 존슨은 할 수 없는 우리말로 읽을 수 있다. 그리고 진정한 고수 개발자로 꾸준히 노력해온 이일민 씨의 노하우를 함께 배울 수 있다.
    - 안영회(http://younghoe.info)
    한국스프링사용자모임공동설립자, (주)아이티와이즈컨설팅 컨설턴트
    이 책은 스프링의 핵심 가치를 전달하는 데 집중하고 있다. 로드 존슨이 쓴 『J2EE Development without EJB』 이후로 지금까지 출간된 스프링 서적 중에서 이 책만큼 스프링의 핵심 가치를 제대로 전달한 책은 보지 못했다. 이 책은 스프링을 사용하지 않더라도 자바를 기반으로 애플리케이션을 개발하는 모든 개발자가 읽어야 하는 책이다.
    - 박재성 / XLGames 웹 서비스 개발자
    이일민 씨는 뛰어난 개발자이고 완벽주의자인 동시에 타고난 이야기꾼입니다. 전 이 책을 눈으로 읽으면서도 어떻게 이렇게 다양하고 방대한 내용이 한 책으로 엮일 수 있는지 이해할 수가 없습니다. 스프링을 닮은 책입니다.
    - 박성철 / 한국 스프링 사용자 모임 큰일꾼
     
    이  책은 스프링이 추구했던 이러한 내면의 원칙을 현실과 잘 맞추어 풀어낸 한 편의 흥미진진한 소설과도 같다. 이 시대의 아키텍트나 개발자라면 반드시 한 번은 꼭 읽어봐야 할 책이다.
    - 김창제 / 삼성 SDS 수석, Anyframe Java 기획•개발 총괄
    이 책은 스프링을 배우는 데 필요한 DAO, AOP 같은 중요 개념의 이해를 시작으로 실전 프로젝트에 적용하는 방법까지 체계적으로 다루고 있다. 그리고 스프링의 학습법까지 친절히 다루는 등 곳곳에 저자 이일민 씨의 숨은 노력과 배려가 깃든 책으로 자바 개발자라면 꼭 읽어보길 권한다.
    - 옥상훈 / 제4대 한국자바개발자 협의회 회장, 현 한국SW아키텍트 연합 공동회장
    토비님의 블로그 또한 자바와 비자바를 떠나 많은 개발자에게 감명을 줬습니다. 그리고 그 이면에 담긴 JavaEE의 한계와 문제점은 실은 저를 부끄럽게 만들기 충분했지요. 무엇보다도 그 깊이, 토비님이 보여주신 그 깊이가 저는 한없이 부러웠고 존경스러웠습니다.
    이 책이 독자에게 영감과 격려를 주리라 믿습니다.
    - 이창신 / ias(iNDIE aPPLICATION sOFTWARE) 대표
    스프링의 각 개념이 예제 중심으로 잘 설명되어 있어 스프링을 처음 접하는 분들도 쉽게 다가갈 수 있으리라 생각되며, 이전 버전 경험자 분들에게는 스프링이 확장 포인트를 어떻게 응용하면서 업그레이드됐는지 배울 수 있는 좋은 기회가 되리라 생각합니다.
    - 이봉옥 책임 / 전자정부 표준프레임워크 커미터 삼성SDS
    독자들이 이 책을 마칠 즈음엔 스프링을 배우러 왔다가 객체지향이라는 월척을 낚았다고 웃으며 책장을 덮게 될 것이라고 확신한다. 아울러 지금까지 써왔던 방식과 달리 스프링에서 주고자 했던 핵심 가치를 느끼며 코딩하고 있는 자신을 발견하리라고 조심스럽게 상상해본다.
    - 양수열 / 인피언컨설팅 연구소장, JCO 3대회장•현 고문
    두 개의 부로 구성된 이 책의 1부는 그의 그런 장점을 잘 녹여내어 처음 시작하는 자바 개발자도 쉽게 내용을 이해할 수 있습니다. 2부는 실제 프로젝트에 적용하는 데 필요한 내용을 담고 있습니다. 또한 고심에 고심을 거듭하여 만든 예제들은 프로젝트를 진행하는 데 적잖은 도움을 드릴 것입니다.
    - 정희용 / 월간 마이크로소프트웨어 발행인
    이 책의 가치는 여러 번 반복해 읽었을 때 더욱 빛을 발한다. 저자의 의도는 단순히 스프링을 설명하는 데 그치지 않는다. 이 책에서는 객체지향적인 코드, 프레임워크의 개념 정립, 테스트가 주는 장점 등을 고스란히 엿볼 수 있다.
    - 백기선 / 봄싹 커뮤니티(http://springsprout.org) 대표, 스프링프레임워크 강사

    저희 에이콘에서 자랑하고 싶은, 자랑할 만한 대작이 한 권 나왔습니다. 정말 나쁜 책은 그다지 많지 않습니다. 개발서로 말하자면, 전체 그림을 그릴 수 있게 하는 통찰을 주든, 현장에서 바로바로 사용할 수 있는 실전 팁을 주든 독자에게는 모두 좋은 참고서와 가이드가 되기 마련입니다.

    그러나 두 마리 토끼를 잡으려 한다면? 대부분 실패하기 마련이지요. 저자가 모든 인사이트와 이론을 주입하고자 한다면 실제 현장에서 일하는 개발자들로서는 적용 가능한 팁은 없는 이론만 난무하는 책이라는 느낌을 받게 되고, 실전프로젝트 팁에 주력하고자 한다면 독자는 책을 다 읽고 나서 "그래서 내가 한게 도대체 뭐였지?"하는 멍한 느낌을 받게 되겠지요.

    기나긴 세월을 거쳐 Toby's Epril이라는 블로그(http://toby.epril.com)를 운영하시는 토비 이일민님은 이 두 가지를 충족시키는 책을 결국 집필해냈습니다. 자바에 기반한 웹 프레임워크 스프링은 특히 애스펙트 지향 프로그래밍(AOP, Aspect Oriented Programming), 관심사의 분리(SoC, Separation of Concerns), 의존관계 주입(DI, Dependency Injection), 제어의 역전(IoC, Inversion of Control), @MVC 등 용어 정립조차 생소한 개념과 이론들로 인해 진입하려는 개발자에게는 관문 넘기조차 어렵게 느껴지는 프레임워크입니다.

    따라서 외국의 수많은 원서와 국내서들이 끊임 없이 출간되어 독자들을 향해 손길을 뻗고 있지만 독자들이 흔쾌히 만족할 만한 책이 없었던 데도 그만한 이유가 있었습니다. 이제 토비님이 3년이라는 인고의 시간 동안 스스로 먹이를 만들어 먹고 소화하고 되새김질하면서 터득한 그 모든 것들을 그러모아 한 권의 책을 만들어냈습니다.

    [ 이 책에서 다루는 내용 ]

    ★ 스프링의 3대 핵심 기술인 IoC/DI, PSA, AOP를 빠르고 효과적으로 배울 수 있는 실전 예제 중심의 설명
    ★ 자바 언어와 JDBC만 알면 누구라도 따라할 수 있는 52단계의 상세한 스프링 애플리케이션 핵심 코드 개발과정
    ★ DIJ/JavaConfig, OXM, @MVC, SpEL, Task, REST 등의 스프링 3.0의 최신 기술 소개
    ★ 스프링 기술 선택을 위한 상세한 기술 비교, 선택 기준 제시 
    ★ 스프링 애플리케이션 아키텍처 설계와 스프링 기반 프레임워크 제작을 위한 완벽 가이드

    이 책 『토비의 스프링 3』에서는 스프링의 3대 기반기술이며 가장 이해하기 힘든 난해한 용어와 개념을 가진 악명높은 기술인 AOP, IoC/DI, 서비스 추상화 등에 대해서 마치 소설을 읽듯 이해하기 쉽도록 차근차근 설명해 드립니다. 그러나 스프링이 무엇인지 어려운 문제부터 풀어나가기를 독자에게 종용하지 않습니다. 스프링이란 "어떻게 오브젝트가 설계되고, 만들어지고, 어떻게 관계를 맺고 사용되는지에 관심을 갖는 프레임워크"이다. 스프링의 관심은 오브젝트와 그 관계에 있으며 그러나 결국 모두를 결정하는 일은 스프링이 아니라 개발자의 역할이며 책임이라고 일갈하며 1장에선 기존 책과 다른 길을 선택해 오브젝트와 의존관계서부터 설명해들어갑니다. 그리고 2장에선 스프링이 개발자에게 제공하는 가장 중요한 가치는, 객체지향과 테스트라며 테스트 코드의 중요성과 개발 방법을 설명하며 어찌 보면 가볍게 시작합니다.

    이 책의 미덕을 꼽자면 수도 없이 많겠습니다. 1부에서 펼쳐놓는 스프링의 기본 원리와 핵심 기술을 소개 내용에 따라 차근차근 공부를 해도 좋습니다. 당장 스프링 개발을 시작해야 한다면 레퍼런스 식으로 정리되어 있어서 개별적인 기술 사용방법을 기술한 2부부터 펼쳐서 활용할 수도 있습니다.

    또한 부록CD에는 책에 담지 않은 내용이지만 바로 가져다 쓸 수 있는 것으로서, @MVC를 활용한 회원관리 웹 애플리케이션에 관한 완성된 예제 프로젝트가 들어있어 급히 코드를 일단 가져다 쓰려는 분들이 매우 유용하게 활용할 수 있습니다.
    또한 이 책에서는 2.5 버전의 SpringMVC에서 시작되어 완성되었으며 3.0의 가장 큰 변화라고 할 수 있는 @MVC 개념에 대한 모든 것을 12장. 스프링 웹 기술과 스프링 MVC와 13장. 스프링 @MVC 장에서 모두 익힐 수 있습니다. 외국에서 출간된 SpirngMVC라는 책을 빼놓고는 MVC에 관해 이만큼 상세히 다룬 책은 아마도 없을 것입니다.

    이처럼 많은 내용을 다룬 책이기에 어느 독자라도 만족할 만한 내용을 얻으실 수 있을 것입니다. 많은 미덕 중 단 한가지 흠을 꼽자면 1,416쪽에 달하는 방대한 양이기에 간단한 가이드를 원하시는 분들에게는 버거우실 수도 있겠으나 많은 개발자분들이 말씀하셨듯이 씹으면 씹을수록 고소한 맛이 우러나는 음식처럼 한 번, 두 번, 세 번 되풀이해 읽을수록 점점 체득할 지식이 가득한 책이라고 할 수 있습니다.

    <+추가한 이야기>
    토비님은 그러고 보면 참 인복이 많으신 분 같습니다. 책의 앞머리에 나오는 감사의 글도 원서 못지 않은 수많은 사람들이 등장합니다. 마음에서 우러나와 도움을 주고 응원해주는 분들이 정말 많으세요.

    그 중에서도 추천글도 써주시고 봄싹스터디 대표이신 의형제 같은 백기선님은 저자를 대신해 이번에 IBM 디벨로퍼 웍스에 스프링 책 1장에 나오는 "오브젝트와 의존관계" 내용을 요약해서 직접 코딩하여 스크린캐스트를 만들어 글을 올려주셨습니다.  
    감사하게도 이런 작업을 해주신 데 대해 백기선님은 "좋은 내용 써주신 토비님께 고마울 따름"이라고 하시네요. 참 세상은 아름다워요. ^^

    2개의 영상으로 나뉘어 있으니, 잘 살펴보시고 이 책의 내용을 맛보기해보셔도 좋겠습니다. 예제코드는 여기에서 내려받으실 수 있으니 참고해보세요.



    그리고 혹시 좀더 고화질의 원본 영상을 보고 싶으신 분은 아래 링크를 눌러 확인하시기 바랍니다. (이 영상을 보기위해서는 퀵타임 플레이어가 필요합니다)

    1장. 오브젝트와 의존관계 스크린캐스트 원본 영상 #1 / #2

    다시 이야기로 돌아와,
    그 많은 이야기를 책에 쏟아내시고도 책에 미처 못담은 예제 설명에 대해서 블로그에 [토스3]이라는 말머리를 달고 글을 써주시고 계시네요. 아직 한 가지가 더 남았다 하니 기대해주세요.

    [토스3] 테스트를 위한 필드 주입 유틸
    [토스3] 스프링 JDBC DAO에 lazy-loading 기능 적용하기
    [토스3] 스프링 JDBC DAO에 lazy-loading 적용하기 (2)

    책 출간에 이어 토비님께 경사가 하나 더 생겼습니다. 바로 어제 큰 아들 평화에 이어 예쁜 딸 하늘이가 태어났다고 하더라구요. 책 출간과 함께 토비님 가족에 기쁘고 행복한 일만 가득가득하시길 기원하겠습니다. 진심으로 축하합니다! :)

    사용자 삽입 이미지사용자 삽입 이미지

    2007년 1월 계약서에 날인하고 2010년 8월 출간되기까지, 스프링 2.0에서 출발해 3.0에서 종착역에 다다르는 동안, 서울에서 시작해 호주에서 마무리되었고, 그 사이 평화와 하늘이라는 두 아이를 얻었던 결코 짧지 않은 기간 동안 완성된 책라는 점을 생각하면, 한 권의 책을 만들어낸다는 것은 정말 지난한 작업이며 자신을 이겨내는 길고 외로운 싸움이고 산고의 고통에 못지 않은 힘든 길이라는 생각이 듭니다. 그 긴 시간동안 포기하지 않으시고 좋은 책을 만들겠다는 일념 하나로 집필에 몰두하고 경제적 손실도 감수하게 될지도 모르는 상황에서 고생하신 토비 이일민님께 무어라 감사와 응원의 말씀을 전해야 할지 모르겠습니다.

    다행히 스프링3에 이르러 우리나라 전자정부 프레임워크에 채택됐다는 기쁜 소식에 이어, 모 대기업들에서도 기업내 프레임워크로 스프링3을 적극 고려하고 있으며, 외국의 주요 기반기술들 중에서도 서버나 연동 기술 등에 있어서 스프링 채택이 부각되고 있다는 소식들이 속속 들려오고 있습니다.

    모쪼록 토비 이일민님이 혼신을 다해 집필한 이 책이 스프링 프레임워크 기술에 목말라했던 여러 개발자분들께 큰 도움과 지식과 성찰을 전해드릴 수 있게 되길, 저자분과 함께 진심으로 바랍니다.

    저자 이일민님과 함께 책에 추천글을 흔쾌히 써주신 여러분과, 책이 나오기까지 도와주신 모든 개발자분들께 진심으로 감사말씀 전합니다.

    자, 이젠 책을 직접 손에 들고 읽어내려갈 개발자 독자 여러분의 몫만 남았습니다. 성원해주셔서 감사합니다. 이 책은 지금 YES24, 교보문고, 강컴, 인터파크, 알라딘에서 예약판매 중이며 마지막 작업을 마무리 짓고 다음 주 8월 9일 월요일에 여러분을 찾아갑니다.

    +
    예기치 못하게 발생한 제작 상의 문제로 인해 출간이 지연된 점 독자여러분께 양해를 구합니다. 8월 11일 현재, '토비의 스프링 3' 출간일은 8월 16일로 늦춰졌습니다. 예약주문을 해놓으시고 책을 기다리시는 독자분들과, 책이 나오기만을 고대하고 계실 여러 독자분들께, 오래 기다리시게 하여 진심으로 죄송하다는 말씀을 전합니다.

    현재 예정대로 8월 16일 책이 출간되면, 8월 17일부터, 늦어도 18일부터는 전국 대형서점과 인터넷서점에서 책을 받아보실 수 있을 것입니다. 조금만 기다려 주시면 좋은 책으로 보답하겠습니다.

    감사합니다.
    CC

    크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

    도서 오류 신고

    도서 오류 신고

    에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

    오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

    (예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

    정오표

    정오표

     1쇄 오류/오탈자 

    [ p75 리스트 1-7 4행 ]
    getConnection() → makeNewConnection()

    [ p98 2번째 문단 4행 ]
    uerDao() 메소드는 → userDao() 메소드는

    [ p116 2번째 문단 5행 ]
    의존관례 → 의존관계

    [ p356 3번째 문단 3행 ]
    위치 위치를 → 위치를

    [ p377 8행 ]
    JTATransactionManager → JtaTransactionManager

    [ p1274 절 제목, 마지막 행 ]
    mvc:interceptor → mvc:interceptors

    [ p1275 3행, 5행, 리스트 13-121 제목, 리스트 13-121의 1행, 3행 ]
    mvc:interceptor → mvc:interceptors

     2쇄 오류/오탈자 

    [ p57 표 1-1 제목 ]
    USER → USERS

    [ p57 표 1-1 필드명 열 ]
    UserId → Id

    [ p65 리스트 1-4 아래에서 2행 ]
    Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book"); ↓ Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book"); return c;

    [ p70 그림 1-2 ]


    Connection

    prepareStatement()

    close()

    [ p71 두 번째 박스 3행 ]
    만들도 한다. → 만들도 한다.

    [ p175 2행 ]
    expected는 테스트 테스트 메소드 → expected는 테스트 메소드

    [ p178 표 2-1 '조건'행, '내용'절 ]
    정보가 존재하 않는 → 정보가 존재하 않는

    [ p181 2행 ]
    시간이랑 → 시간

    [ p181 3행 ]
    시간이랑 → 시간

    [ p206 리스트 2-27 아래에서 4행 ]
    either(is(nullValue())).or(is(this.contextObject))); → either(is(nullValue())).or(is(this.context)));

    [ p212 아래에서 10행 ]
    Preparedstatement → PreparedStatement

    [ p244 아래에서 5행 ]
    클라이언 메소드 내의 → 클라이언 메소드 내의

    [ p245 그림 3-8 아래로 4행 ]
    클라이언트로 → 클라이언트로부터

    [ p253 리스트 3-33 4행 ]
    Integer doSomethingWithReader(BufferedReader br); → Integer doSomethingWithReader(BufferedReader br) throws IOException;

    [ p268 '기능 정의와 테스트 작성' 절 2행 ]
    getAll()은 모든 테이블의 → getAll()은 테이블의

    [ p1105 네 번째 문단 마지막 행 ]
    /hello?forma=pdf → /hello?format=pdf

    [ p1136 13.2절 4행 ]
    페이스 → 인페이스

    [ p1208 아래에서 3행 ]
    ConverionService → ConversionService

    [ p1211 9행, 12행 ]
    FormattingConversionServiceFactorybean → FormattingConversionServiceFactoryBean

    [ p1293 1행, 리스트 14-6 2행 ]
    SimpleMornitoringAspect → SimpleMonitoringAspect

    [ p1309 4번째 문단 3행 ]
    Uesr → User

    [ p1367 리스트 16-16 마지막 행 끝부분 ]
    ;MON-FRI → );

    [ p1376 표 A-1 Instrument.Tomcat 행, Maven 모듈 이름 열 ]
    spring-instrument-tomca → spring-instrument-tomcat

    [ p1380 'Context.Support 모듈' 절 3행 ]
    FreeMaker → FreeMarker

    [ p1392 3행 ]
    FreeMaker → FreeMarker

     3쇄 오류/오탈자 

    [ p75 마지막 행 누락 ]
    처럼 UserDao 코드의 수정 없이 DB 커넥션 생성 기능을 변경할 방법이 없다. 다른 방식

     4쇄 오류/오탈자 

    [ p382 5.4절 4행 ]
    그리고 업그레드 작업을 담은 → 그리고 업그레드 작업을 담은

     5쇄 오류/오탈자 

    [ p265 본문 세 번째 문단 1행 ]
    그림 3-47 → 그림 3-49

    [ p265 아래에서 2행 ]
    그림 3-50 → 그림 3-49

    [ p265 마지막 행 ]
    그림 3-48 → 그림 3-50

    [ p511 '애스펙트' 절 3행 ]
    클래와 같은 → 클래와 같은

     6쇄 오류/오탈자 

    [ p1159 리스트 13-35 6행 ]
    String name = request.getParameter("hello"); → String name = request.getParameter("name");

    [ p450 2행 ]
    모든 메소드에 트랜잭션을 적용하느 게 아니라 → 적용하는게 아니라