이미 소장하고 있다면 판매해 보세요.
|
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.8XML을 이용한 설정 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 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 태그 라이브러리를 이용한 폼 작성 단일 폼 모델 「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 모듈 Test 모듈 |
이일민의 다른 상품
|
나는 스프링에게 고마움을 느낀다. 스프링을 통해서 이전보다 조금 더 나은 개발자가 되었다고 생각하기 때문이다. 스프링은 그저 폼 나는 최신 기술을 사용해서 고객이 원하는 기능만 적당히 빠르게 만들어내면 충분하다고 생각해온 나에게 기본으로 돌아가서 원칙에 충실하려고 노력하는 것이 얼마나 중요한지, 그것이 개발자인 나 자신과 고객에게 얼마나 유익을 줄 수 있는지 깨닫게 해줬다. 전문 개발자로서의 17년을 포함해 지금까지 27년간 다양한 언어와 기술을 사용해서 프로그래밍을 해왔지만 스프링만큼 다른 사람들에게 알려주고 싶고, 가르쳐주고 싶은 기술은 없었던 것 같다. 그 동안 블로그와 세미나, 컨퍼런스, 개발팀 교육, 공개 강의 등을 통해서 틈나는 대로 스프링에 대한 지식을 나누려고 노력해왔지만 항상 제한된 시간과 공유 방법의 한계 때문에 아쉬움을 느낄 수밖에 없었다. 이 책은 그 동안 나누고 싶었지만 기회를 얻지 못했던 생각과 이야기들을 꺼내서 얼기설기 늘어놓은 것이다.
막상 책으로 엮고나니 후련한 마음과 함께 부끄러운 마음이 든다. 책을 쓰는 동안 정확하고 완벽한 내용을 작성해야 한다는 부담 때문에 적지 않은 날을 썼던 내용을 지우고 다시 써가며 고민 속에서 지내기도 했다. 나는 책을 쓸 만한 실력이 없다는 좌절감에 포기하려고도 마음을 먹은 적도 있다. 하지만 그럴 때마다 이 책은 내 실력을 사람들에게 증명하고 뽐내려고 쓰는 것이 아니라 부족한 지식과 경험이라도 이를 나누면 누군가에게 도움이 될 수 있을 것이라는 작은 희망이 있기 때문에 쓰는 것이라는 생각으로 마음을 잡으면서 여기까지 올 수 있었다. 다른 것은 몰라도 이 책을 쓴 덕분에 내가 조금은 겸손해지지 않았을까 싶다. 처음 계획하고 약속했던 시간을 훌쩍 넘어서 책이 나오게 된 것에 많은 분들께 죄송하다. 동시에 이 책이 나오기까지 힘써주시고 격려해주신 분들에게 고맙다. 무엇보다도 오랜 시간을 기대하며 기다려주셨던 독자 여러분께 감사드리고 싶다. - 브리즈번에서 토비 이일민 ---저자 서문 중에서 |
|
대한민국 전자정부 표준 프레임워크 기술로 선정된 스프링의 국내 최고 권위자 토비 이일민이 저술한 스프링 프레임워크 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부에서 소개하는 기술을 효과적으로 적용하기 어려울 수 있다. 이 책은 스프링을 이용해서 엔터프라이즈 자바 애플리케이션을 개발하려는 모든 개발자들을 대상으로 한다. 이 책을 공부하기 위해서는 자바 언어와 JDBC를 이용한 DB 프로그래밍, 그리고 기초적인 웹 개발 지식이 필요하다. 2부에는 스프링 외의 서드-파티 프레임워크나 Java EE 표준 기술을 스프링에 통합해서 사용하는 내용이 일부 포함되어있다. 이런 내용을 살펴볼 때는 관련 기술에 대한 지식이 추가로 필요할 수 있다. |