책 이미지
책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 언어 > 자바
· ISBN : 9788960771468
· 쪽수 : 1400쪽
책 소개
목차
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 태그 라이브러리를 이용한 폼 작성
_________단일 폼 모델
___
___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 모듈