▣ 01장: 스프링 프레임워크
1.1. 스프링 프레임워크 개요
1.2. 스프링 프레임워크의 역사
1.3. 스프링 관련 프로젝트에 관해
___1.3.1. 스프링 MVC
___1.3.2. 스프링 시큐리티
___1.3.3. 스프링 데이터
___1.3.4. 스프링 배치
___1.3.5. 스프링 인티그레이션
___1.3.6. 스프링 클라우드
___1.3.7. 스프링 툴 스위트
___1.3.8. 스프링 IO 플랫폼
___1.3.9. 스프링 부트
1.4. Java EE와의 관계
▣ 02장: 스프링 코어(DI, AOP)
2.1. DI
___2.1.1. DI 개요
___2.1.2. ApplicationContext와 빈 정의
___2.1.3. 빈 설정
___2.1.4. 의존성 주입
___2.1.5. 오토와이어링
___2.1.6. 컴포넌트 스캔
___2.1.7. 빈 스코프
___2.1.8. 빈의 생명 주기
___2.1.9. 빈 설정 분할
___2.1.10. 프로파일별 설정 구성
___2.1.11. JSR 330
2.2. AOP
___2.2.1. AOP의 개요
___2.2.2. 스프링 AOP
___2.2.3. 자바 기반 설정 방식에서의 어드바이스 정의
___2.2.4. XML 기반 설정 방식에서의 어드바이스 정의
___2.2.5. 포인트컷 표현식
___2.2.6. 스프링 프로젝트에서 활용되는 AOP 기능
2.3. 데이터 바인딩과 형 변환
___2.3.1. String 값에 대한 데이터 바인딩
___2.3.2. 스프링의 형 변환
___2.3.3. PropertyEditor 활용
___2.3.4. ConversionService 활용
___2.3.5. 포매팅용 애너테이션 활용
___2.3.6. 형 변환 방식의 커스터마이징
___2.3.7. 필드 포매팅 방식 커스터마이즈
2.4. 프로퍼티 관리
___2.4.1. 빈 정의 시 프로퍼티 활용
___2.4.2. 빈 구현 과정에서 프로퍼티 활용
2.5. 스프링 표현 언어
___2.5.1. SpEL 설정
___2.5.2. SpEL API 개요
___2.5.3. 빈 정의 시 SpEL 활용
___2.5.4. SpEL에서 쓸 수 있는 표현식 유형
2.6. 리소스 추상화
___2.6.1. Resource 인터페이스와 구현 클래스
___2.6.2. ResourceLoader 인터페이스
___2.6.3. Resource 인터페이스를 활용한 리소스 접근
___2.6.4. XML 파일에서 리소스 지정
2.7. 메시지 관리
___2.7.1. MessageSource 인터페이스와 구현 클래스
___2.7.2. MessageSource 사용
___2.7.3. 프로퍼티 파일을 UTF-8로 인코딩
___2.7.4. 다국어 지원하기
▣ 03장: 데이터 접근(JDBC, Tx)
3.1. 스프링 프레임워크와 데이터 소스
___3.1.1. 데이터 소스 개요
___3.1.2. 데이터 소스 설정
3.2. 스프링 JDBC
___3.2.1. 스프링 JDBC 개요
___3.2.2. JdbcTemplate 클래스를 활용한 CRUD
___3.2.3. SQL 질의 결과를 POJO로 변환
___3.2.4. 데이터 일괄 처리
3.3. 트랜잭션 관리
___3.3.1. 트랜잭션 관리자
___3.3.2. 선언적 트랜잭션
___3.3.3. 명시적 트랜잭션
___3.3.4. 트랜잭션 격리 수준과 전파 방식
3.4. 데이터 접근 시의 예외 처리
___3.4.1. 스프링 프레임워크에서 제공하는 데이터 접근 관련 예외
___3.4.2. 데이터 접근 관련 예외 처리
___3.4.3. 데이터 접근 관련 예외의 변환 규칙 커스터마이징
▣ 04장: 스프링 MVC 기초
4.1. 스프링 MVC
___4.1.1. 웹 애플리케이션 개발의 특징
___4.1.2. MVC 프레임워크로서의 특징
4.2. 첫 번째 스프링 MVC 애플리케이션
___4.2.1. 프로젝트 생성
___4.2.2. 스프링 MVC 적용
___4.2.3. 최상위 페이지의 표시 처리 구현
___4.2.4. 입력 화면의 표시 처리 구현
___4.2.5. 입력값 전송과 결괏값 출력 구현
___4.2.6. 입력값 검사 구현
___4.2.7. XML 파일을 이용한 빈 정의
4.3. 스프링 MVC 아키텍처
___4.3.1. 프레임워크 아키텍처
___4.3.2. 프런트 컨트롤러 아키텍처
___4.3.3. DI 컨테이너와의 연계
▣ 05장: 웹 애플리케이션 개발
5.1. 웹 애플리케이션의 종류
___5.1.1. 화면으로 응답하는 웹 애플리케이션
___5.1.2. 데이터만을 응답하는 웹 애플리케이션
5.2. 애플리케이션 설정
___5.2.1. 서블릿 컨테이너 설정
___5.2.2. 애플리케이션 컨텍스트 설정
___5.2.3. 프런트 컨트롤러 설정
5.3. @Controller 구현
___5.3.1. 컨트롤러에서 구현하는 처리 내용
___5.3.2. 컨트롤러 클래스 작성
___5.3.3. 핸들러 메서드 작성
___5.3.4. 핸들러 메서드의 매개변수
___5.3.5. 핸들러 메서드의 반환값
___5.3.6. 뷰 컨트롤러 이용
5.4. 요청 매핑
___5.4.1. 요청 경로 사용
___5.4.2. 경로 패턴 사용
___5.4.3. HTTP 메서드 사용
___5.4.4. 요청 파라미터 사용
___5.4.5. 요청 헤더 사용
___5.4.6. Content-Type 헤더 사용
___5.4.7. Accept 헤더 사용
5.5. 요청 데이터 취득
___5.5.1. 경로 변수 값 취득(@PathVariable)
___5.5.2. 요청 파라미터 값 취득(@RequestParam)
___5.5.3. @RequestParam, @RequestHeader, @CookieValue 속성값
___5.5.4. 컴파일 옵션과 주의할 점
___5.5.5. 이용 가능한 타입
___5.5.6. 바인딩 처리 커스터마이징(WebDataBinder)
___5.5.7. 애너테이션을 사용한 포맷 지정
5.6. 폼 클래스 구현
___5.6.1. 폼 객체의 스코프
___5.6.2. 폼 클래스 작성
___5.6.3. HTML 포맷과 바인딩
___5.6.4. 간단한 타입과의 바인딩
___5.6.5. 간단한 타입의 컬렉션과의 바인딩
___5.6.6. 중첩된 자바빈즈와의 바인딩
___5.6.7. 자바빈즈의 컬렉션과의 바인딩
___5.6.7. 프로퍼티 값의 설정 해제
5.7. 입력값 검사
___5.7.1. 입력값 검사 기능의 활성화
___5.7.2. 입력값 검사 결과의 판정
___5.7.3. 미입력 처리
___5.7.4. 입력값 검사 규칙 지정
___5.7.5. 중첩된 자바빈즈의 입력값 검사
___5.7.6. 입력값 검사 규칙 추가
___5.7.7. 입력값 검사 규칙을 교체하는 방법
___5.7.8. 오류 정보 표시
___5.7.9. 오류 메시지의 재정의
___5.7.10. Bean Validation 커스터마이징
___5.7.11. Spring Validator 이용
5.8. 화면 이동
___5.8.1. 이동 대상을 지정하는 방법
___5.8.2. 요청 경로로 리다이렉트
___5.8.3. 요청 경로로 포워드
___5.8.4. 뷰와의 데이터 연계
___5.8.5. 리다이렉트 대상과의 데이터 연계
5.9. 뷰 선택
___5.9.1. 템플릿 기반 뷰
___5.9.2. InternalResourceViewResolver의 빈 정의
5.10. JSP 구현
___5.10.1. 지시자
___5.10.2. 스크립트릿
___5.10.3. 커스텀 태그 라이브러리
___5.10.4. 태그 파일
___5.10.5. EL
___5.10.6. EL 함수
___5.10.7. JSP 공통 설정
___5.10.8. JSTL
5.11. 스프링 HTML 폼 전용 태그 라이브러리의 활용
___5.11.1. 태그 라이브러리의 설정
___5.11.2. 폼 출력
___5.11.3. 폼 항목의 공통적인 속성
___5.11.4. 텍스트 필드 출력
___5.11.5. 패스워드 필드 출력
___5.11.6. 텍스트 영역 출력
___5.11.7. 여러 개의 체크박스 출력
___5.11.8. 체크박스 출력
___5.11.9. 여러 개의 라디오 버튼 출력
___5.11.10. 라디오 버튼 출력
___5.11.11. 셀렉트 박스 출력
___5.11.12. 숨겨진 필드 출력
___5.11.13. 라벨 출력
___5.11.14. 버튼 출력
___5.11.15. 입력값 검사 오류 출력
5.12. 스프링 범용 태그 라이브러리의 활용
___5.12.1. 태그 라이브러리의 설정
___5.12.2. 로캘별 메시지의 출력
___5.12.3. 테마별 메시지의 출력
___5.12.4. 입력값 검사 오류의 판단
___5.12.5. 바인딩 정보(BindStatus)의 취득
___5.12.6. BindStatus과 연계한 문자열 변환
___5.12.7. URL 생성
___5.12.8. 이스케이프 여부의 기본값 덮어쓰기
___5.12.9. 출력값 이스케이프
___5.12.10. SpEL 실행 결과의 취득
___5.12.11. 요청 매핑 정보와 연계한 URL 생성
5.13. 예외 처리
___5.13.1. 예외의 종류
___5.13.2. 예외의 발생 장소와 그에 따른 처리 방법
___5.13.3. 서블릿 컨테이너의 오류 페이지 기능 활용
___5.13.4. 스프링 MVC의 예외 핸들러 활용
___5.13.5. @ExceptionHandler 메서드 활용
___5.13.6. @ResponseStatus를 지정한 예외 클래스의 활용
▣ 06장: RESTful 웹 서비스 개발
6.1. REST API 아키텍처
___6.1.1. Resource Oriented Architecture(ROA)
___6.1.2. 프레임워크의 아키텍처
6.2. 애플리케이션 설정
___6.2.1. 라이브러리 설정
___6.2.2. 서블릿 컨테이너 설정
___6.2.3. 프런트 컨트롤러 설정
6.3. @RestController 구현
___6.3.1. 컨트롤러에서 구현할 처리의 전체 구조
___6.3.2. 컨트롤러 클래스 작성
___6.3.3. REST API(핸들러 메서드) 작성
___6.3.4. CORS 지원
___6.3.5. URI 조립
6.4. 리소스 클래스 구현
___6.4.1. 리소스 클래스 작성
___6.4.2. Jackson을 이용한 포맷 제어
6.5. 예외 처리
___6.5.1. REST API 오류 응답
___6.5.2. 스프링 MVC의 예외 핸들러 구현
___6.5.3. 처리할 예외 클래스의 추가
___6.5.4. 입력값 검사 예외의 처리
___6.5.5. 서블릿 컨테이너에 전달된 오류의 응답
6.6. REST 클라이언트 구현
___6.6.1. RestTemplate이란?
___6.6.2. RestTemplate 설정
___6.6.3. REST API 호출
___6.6.4. 오류 응답 처리
___6.6.5. 타임아웃 지정
▣ 07장: 스프링 MVC 응용
7.1. HTTP 세션 이용
___7.1.1. 세션 속성(@SessionAttributes)
___7.1.2. 세션 스코프 빈
7.2. 파일 업로드
___7.2.1. 파일 업로드 구조
___7.2.2. 파일 업로드 기능 설정
___7.2.3. 업로드 데이터의 취득
7.3. 비동기 요청의 구현
___7.3.1. 비동기 요청의 동작 방식
___7.3.2. 비동기 기능을 활성화하기 위한 설정
___7.3.3. 비동기 처리의 구현
___7.3.4. 비동기 처리에서의 예외 처리
___7.3.5. 비동기 실행에 대한 공통 처리 구현
7.4. 공통 처리의 구현
___7.4.1. 서블릿 필터 이용
___7.4.2. HandlerInterceptor 이용
___7.4.3. @ControllerAdvice 이용
___7.4.4. HandlerMethodArgumentResolver 이용
7.5. 정적 리소스
___7.5.1. 기본 서블릿과 DispatcherServlet의 공존
___7.5.2. 스프링 MVC 독자적인 정적 리소스의 취급 방법
7.6. 국제화
___7.6.1. 로캘 결정
___7.6.2. 로캘 활용
___7.6.3. UI를 이용한 로캘 전환
▣ 08장: 스프링 테스트란?
8.1. 스프링 테스트란?
8.2. DI 컨테이너와 빈 테스트
___8.2.1. 빈에 대한 단위 테스트
___8.2.2. DI 컨테이너에서 관리되는 빈에 대한 통합 테스트
___8.2.3. 스프링 TestContext 프레임워크
___8.2.4. DI 컨테이너의 설정
___8.2.5. DI 컨테이너의 라이프사이클 제어
___8.2.6. 프로파일 지정
___8.2.7. 테스트용 프로퍼티 값 지정
8.3. 데이터베이스 테스트
___8.3.1. 테스트 데이터 소스 설정
___8.3.2. 테스트 데이터 적재
___8.3.3. 테스트 케이스를 위한 트랜잭션 제어
___8.3.4. 데이터 검증
8.4. 스프링 MVC 테스트
___8.4.1. MockMvc란?
___8.4.2. MockMvc 설정
___8.4.3. 테스트 실행
___8.4.4. 요청 데이터 설정
___8.4.5. 실행 결과의 검증
___8.4.6. 실행 결과 출력
▣ 09장: 스프링 시큐리티
9.1. 스프링 시큐리티란?
___9.1.1. 스프링 시큐리티의 특징
___9.1.2. 기본적인 보안 기능
___9.1.3. 강화된 보안 기능
9.2. 스프링 시큐리티의 설정
___9.2.1. 라이브러리의 설정
___9.2.2. 스프링 시큐리티의 빈 정의
___9.2.3. 서블릿 필터 설정
9.3. 스프링 시큐리티의 아키텍처
___9.3.1. 스프링 시큐리티의 모듈 구성
___9.3.2. 프레임워크 아키텍처
9.4. 인증 처리
___9.4.1. 인증 처리 메커니즘
___9.4.2. 폼 인증
___9.4.3. 인증이 성공했을 때의 응답
___9.4.4. 인증이 실패했을 때의 응답
___9.4.5. 데이터베이스 인증
___9.4.6. 패스워드 해시화
___9.4.7. 인증 이벤트 처리
___9.4.8. 로그아웃
___9.4.9. 로그아웃이 성공했을 때의 응답
___9.4.10. 인증 정보에 대한 접근
___9.4.11. 인증 처리와 스프링 MVC의 연계
___9.4.12. 오류 메시지
9.5. 인가 처리
___9.5.1. 인가 처리 구조
___9.5.2. 접근 정책을 기술하는 방법
___9.5.3. 웹 리소스에 대한 인가(자바 기반 설정 방식)
___9.5.4. 웹 리소스에 대한 인가(XML 기반 설정 방식)
___9.5.5. 메서드에 대한 인가
___9.5.6. JSP 화면 항목에 대한 인가
___9.5.7. 인가 오류가 발생할 때의 응답
9.6. CSRF 방지
___9.6.1. 스프링 시큐리티의 CSRF 대책
___9.6.2. CSRF 방지 기능의 적용
___9.6.3. 토큰 검사 오류가 발생할 때의 응답
___9.6.4. CSRF 방지 기능과 스프링 MVC와의 연계
9.7. 세션 관리
___9.7.1. 세션 관리 기능의 적용
___9.7.2. URL 재작성의 억제 기능
___9.7.3. 세션 고정 공격의 방지 기능
___9.7.4. 다중 로그인 제어
___9.7.5. 유효하지 않은 세션을 사용한 요청의 감지
9.8. 브라우저 보안 기능과의 연계
___9.8.1. 보안 헤더 출력 기능의 적용
___9.8.2. 기본적으로 지원하는 보안 헤더
___9.8.3. 보안 헤더 선택
9.9. 스프링 시큐리티 테스트
___9.9.1. 스프링 시큐리티 테스트 설정
___9.9.2. 인증 처리의 테스트
___9.9.3. 인가 처리의 테스트
___9.9.4. CSRF 토큰 검사 대상에 대한 요청 테스트
▣ 10장: 스프링 데이터 JPA
10.1. JPA란?
___10.1.1. ORM과 JPA의 개념
___10.1.2. Entity
___10.1.3. EntityManager
___10.1.4. Entity 상태
___10.1.5. 연관관계
___10.1.6. JPQL(Java Persistence Query Language)
10.2. JPA를 이용한 데이터베이스 접근 기초
___10.2.1. JPA에 의한 CRUD 작업
___10.2.2. JPA의 JPQL을 활용한 데이터 접근
___10.2.3. 배타 제어
10.3. 스프링 데이터 JPA
___10.3.1. 스프링 데이터란?
___10.3.2. 스프링 데이터 JPA란?
10.4 스프링 데이터 JPA 아키텍처
___10.4.1. 내부 처리 흐름
___10.4.2. JpaRepository
___10.4.3. 예외 변환
10.5. 스프링 데이터 JPA 설정
___10.5.1. 의존 라이브러리 정의
___10.5.2. 데이터 소스 정의
___10.5.3. EntityManagerFactory 정의
___10.5.4. JpaTransactionManager 정의
___10.5.5. 스프링 데이터 JPA 활성화
___10.5.6. Open EntityManager in View 패턴 설정
10.6. Repository 생성과 활용
___10.6.1. 스프링 데이터 JPA 표준의 CRUD 작업
___10.6.2. JPQL을 활용한 데이터 접근
___10.6.3. 배타 제어
___10.6.4. 페이지 처리
___10.6.5. Repository에 커스터마이징한 메서드 추가
___10.6.6. 감사 정보의 부여
▣ 11장: 스프링 + 마이바티스
11.1. 마이바티스란?
___11.1.1. 마이바티스와 스프링 연동
___11.1.2. 마이바티스와 MyBatis-Spring의 주요 컴포넌트
___11.1.3. MyBatis-Spring 예외 처리
11.2. 스프링 + 마이바티스 설정
___11.2.1. 라이브러리 설정
___11.2.2. 스프링과 마이바티스를 연계하기 위한 설정
___11.2.3. 마이바티스 설정
11.3. 기본적인 CRUD 조작
___11.3.1. Mapper 인터페이스 작성
___11.3.2. 매핑 파일 작성
___11.3.3. SQL에 값을 삽입하는 방법
___11.3.4. 삽입값의 연계 방법
___11.3.5. SELECT(Read) 조작 구현
___11.3.6. INSERT(Create) 조작 구현
___11.3.7. UPDATE 조작 구현
___11.3.8. DELETE 조작 구현
___11.3.9. Mapper 객체 활용
11.4. 마이바티스를 이용한 CRUD 조작
___11.4.1. 매핑 파일로부터 동적 SQL 조립
___11.4.2. SQL 빌더 클래스를 이용한 SQL 문 조립
___11.4.3. 일대일과 일대다 매핑
___11.4.4. RowBounds를 이용한 범위 검색
___11.4.5. ResultHandler를 이용한 검색 결과 처리
▣ 12장: 스프링 + 타임리프
12.1. 타임리프란?
___12.1.1. 타임리프 템블릿
___12.1.2. 타임리프와 스프링 연계
12.2. 스프링 + 타임리프 설정
___12.2.1. 라이브러리 설정
___12.2.2. 스프링과 타임리프를 연계하기 위한 설정
12.3. 타임리프를 이용한 뷰 구현
___12.3.1. 첫 번째 타임리프
___12.3.2. 텍스트 입력
___12.3.3. 표현식
___12.3.4. th 속성에 의한 속성 값 설정
___12.3.5. HTML 요소의 출력 제어
___12.3.6. 인라인 표기법
___12.3.7. 주석
___12.3.8. 스프링과의 연계
___12.3.9. 공통 템플릿 재사용
___12.3.10. 스프링 시큐리티와의 연계
___12.3.11. JSR 310: Date and Time API 이용
▣ 13장: 스프링 부트
13.1. 스프링 부트란?
___13.1.1. 스프링 부트를 이용한 Hello World 애플리케이션 제작
___13.1.2. AutoConfigure를 이용한 설정 자동화
___13.1.3. Starter를 이용한 의존 라이브러리 관리
___13.1.4. 실행 가능한 jar 만들기
13.2. 스프링 부트와 스프링 MVC
___13.2.1. RESTful 웹 서비스 만들기
___13.2.2. 화면 이동형 웹 애플리케이션 만들기
13.3. 스프링 부트와 데이터 접근
___13.3.1. 스프링 JDBC
___13.2.2. 스프링 데이터 JPA
___13.3.3. 마이바티스
___13.3.4. 커넥션 풀 라이브러리 변경
13.4. 스프링 부트와 스프링 시큐리티
___13.4.1. 기본 인증
___13.4.2. 인증, 인가 커스터마이징
13.5. 스프링 부트로 프로퍼티의 타입 안정성 확보
___13.5.1. @ConfigurationProperties를 이용한 프로퍼티 설정
___13.5.2. Bean Validation을 이용한 프로퍼티 값 검증
___13.5.3. IDE에서의 프로퍼티 지원 기능
13.6. 스프링 부트 액추에이터를 이용한 운영 기능 강화
___13.6.1. HTTP 엔드포인트 추가
___13.6.2. 헬스 체크
___13.6.3. 메트릭
___13.6.4. 보안 기능 활성화
▣ 14장: 실습
14.1. 애플리케이션의 개요
___14.1.1. ER 다이어그램
___14.1.2. 회의실 목록 표시 기능의 화면 사양
___14.1.3. 예약 기능의 화면 사양
___14.1.4. 로그인 기능의 화면 사양
14.2. 애플리케이션 개발
___14.2.1. 프로젝트의 기본 골격 구성
___14.2.2. 프로젝트 소스의 패키지 구조 구성
___14.2.3. PostgreSQL 설정
___14.2.4. 프로퍼티 파일 설정
___14.2.5. 라이브러리 추가
___14.2.6. JPA 엔터티 생성
___14.2.7. 회의실 목록 표시 기능 구현
___14.2.8. 회의실 예약 기능 구현
___14.2.9. 로그인 기능 구현
___14.2.10. 실행 가능한 JAR 생성
14.3. 마무리
▣ 15장: 스프링 배치
15.1. 스프링 배치란?
___15.1.1. 배치 처리란?
___15.1.2. 배치 처리가 충족시켜야 할 요건
___15.1.3. 스프링 배치란?
___15.1.4. 스프링 배치의 기본 구조
15.2. 간단한 배치 애플리케이션 개발
___15.2.1. 작성할 배치 애플리케이션의 요구사항
___15.2.2. 설계
___15.2.3. pom.xml 설정
___15.2.4. 잡 구현
___15.2.5. truncateStep 구현
___15.2.6. importFileStep 구현
___15.2.7. 테스트
___15.2.8. 배치 실행(정상 종료)
___15.2.9. 배치 실행(비정상 종료)
15.3. 스프링 배치의 아키텍처
___15.3.1. 구성 요소
___15.3.2. 잡 기동
___15.3.3. 비즈니스 로직 정의
___15.3.4. 트랜잭션 관리
___15.3.5. 배치 처리 결과 출력
___15.3.6. 여러 개의 스텝에서 흐름 제어하기
___15.3.7. 병렬 처리
▣ A장: 부록
A.1 로컬 개발 환경을 위한 프로젝트 구성
___A.1.1. IDE 설치 및 설정
___A.1.2. 프로젝트 생성
___A.1.3. 애플리케이션의 동작 확인