1부 기초
1장 현실 세계의 스프링
1.1 마이크로서비스 아키텍처로 진화
1.2 스프링 생태계
__1.2.1 스프링 코어의 이해: 스프링 기초
__1.2.2 스프링 데이터 액세스 기능을 사용한 앱 영속성 구현
__1.2.3 웹 앱 개발을 위한 스프링 MVC 기능
__1.2.4 스프링 테스트 기능
__1.2.5 스프링 생태계의 프로젝트
1.3 실제 시나리오에서 스프링
__1.3.1 백엔드 앱 개발에서 스프링 사용
__1.3.2 자동화 테스트 앱에서 스프링 사용
__1.3.3 데스크톱 앱 개발에서 스프링 사용
__1.3.4 모바일 앱에서 스프링 사용
1.4 프레임워크를 사용하지 말아야 할 때
__1.4.1 작게 만들어야 한다
__1.4.2 보안에는 맞춤형 코드가 필요하다
__1.4.3 기존의 과도한 맞춤화로 프레임워크가 실용적이지 못하다
__1.4.4 프레임워크로 바꾸어도 이점이 없다
1.5 이 책에서 배울 것
1.6 요약
2장 스프링 컨텍스트: 빈 정의
2.1 메이븐 프로젝트 생성
2.2 스프링 컨텍스트에 새로운 빈 추가
__2.2.1 @Bean 애너테이션을 사용하여 스프링 컨텍스트에 빈 추가
__2.2.2 스테레오타입 애너테이션으로 스프링 컨텍스트에 빈 추가
__2.2.3 프로그래밍 방식으로 스프링 컨텍스트에 빈 추가
2.3 요약
3장 스프링 컨텍스트: 빈 작성
3.1 구성 파일에서 정의된 빈 간 관계 구현
__3.1.1 두 @Bean 메서드 간 직접 메서드를 호출하는 빈 작성
__3.1.2 @Bean 메서드의 매개변수로 빈 와이어링하기
3.2 @Autowired 애너테이션을 사용한 빈 주입
__3.2.1 @Autowired로 클래스 필드를 이용한 값 주입
__3.2.2 @Autowired를 사용하여 생성자로 값 주입
__3.2.3 setter를 이용한 의존성 주입 사용
3.3 순환 의존성 다루기
3.4 스프링 컨텍스트에서 여러 빈 중 선택하기
3.5 요약
4장 스프링 컨텍스트: 추상화
4.1 계약 정의를 위한 인터페이스 사용
__4.1.1 구현 분리를 위해 인터페이스 사용
__4.1.2 시나리오 요구 사항
__4.1.3 프레임워크 없이 요구 사항 구현
4.2 추상화와 함께 의존성 주입
__4.2.1 스프링 컨텍스트에 포함될 객체 정하기
__4.2.2 추상화에 대한 여러 구현체 중에서 오토와이어링할 것을 선택
4.3 스테레오타입 애너테이션으로 객체의 책임에 집중
4.4 요약
5장 스프링 컨텍스트: 빈의 스코프 및 수명 주기
5.1 싱글톤 빈 스코프 사용
__5.1.1 싱글톤 빈의 작동 방식
__5.1.2 실제 시나리오의 싱글톤 빈
__5.1.3 즉시 및 지연 인스턴스 생성 방식
5.2 프로토타입 빈 스코프 사용
__5.2.1 프로토타입 빈의 동작 방식
__5.2.2 실제 시나리오에서 프로토타입 빈 관리
5.3 요약
6장 스프링 AOP로 애스펙트 사용
6.1 스프링에서 애스펙트 작동 방식
6.2 스프링 AOP를 사용한 애스펙트 구현
__6.2.1 간단한 애스펙트 구현
__6.2.2 가로챈 메서드의 매개변수 및 반환 값 변경
__6.2.3 애너테이션된 메서드 가로채기
__6.2.4 사용 가능한 다른 어드바이스 애너테이션
6.3 애스펙트 실행 체인
6.4 요약
2부 구현
7장 스프링 부트와 스프링 MVC 이해
7.1 웹 앱이란
__7.1.1 웹 앱에 대한 일반적인 개요
__7.1.2 스프링으로 웹 앱을 구현하는 다양한 방식
__7.1.3 웹 앱 개발에서 서블릿 컨테이너 사용
7.2 스프링 부트의 마법
__7.2.1 프로젝트 초기화 서비스를 이용한 스프링 부트 프로젝트 생성
__7.2.2 의존성 스타터를 사용한 의존성 관리 간소화
__7.2.3 의존성에 기반을 둔 관례에 따라 autoconfiguration 사용
7.3 스프링 MVC로 웹 앱 구현
7.4 요약
8장 스프링 부트와 스프링 MVC를 이용한 웹 앱 구현
8.1 동적 뷰를 사용한 웹 앱 구현
__8.1.1 HTTP 요청에서 데이터 얻기
__8.1.2 클라이언트에서 서버로 데이터를 전송하려고 요청 매개변수 사용
__8.1.3 경로 변수로 클라이언트에서 서버로 데이터 전송
8.2 HTTP GET과 POST 메서드 사용
8.3 요약
9장 스프링 웹 스코프
9.1 스프링 웹 앱에서 요청 스코프 사용
9.2 스프링 웹 앱에서 세션 스코프 사용
9.3 스프링 웹 앱에서 애플리케이션 스코프 사용
9.4 요약
10장 REST 서비스 구현
10.1 REST 서비스를 이용한 앱 간 데이터 교환
10.2 REST 엔드포인트 구현
10.3 HTTP 응답 관리
__10.3.1 객체를 응답 본문에 전송
__10.3.2 응답 상태 및 헤더 설정
__10.3.3 엔드포인트 수준에서 예외 관리
10.4 요청 본문을 사용하여 클라이언트의 데이터 가져오기
10.5 요약
11장 REST 엔드포인트 사용
11.1 스프링 클라우드 OpenFeign으로 REST 엔드포인트 호출
11.2 RestTemplate으로 REST 엔드포인트 호출
11.3 WebClient로 REST 엔드포인트 호출
11.4 요약
12장 스프링 앱에서 데이터 소스 사용
12.1 데이터 소스
12.2 JdbcTemplate으로 영속성 데이터 작업
12.3 데이터 소스 구성을 사용자 정의
__12.3.1 애플리케이션 프로퍼티 파일에서 데이터 소스 정의
__12.3.2 사용자 정의 DataSource 빈 사용
12.4 요약
13장 스프링 앱에서 트랜잭션 사용
13.1 트랜잭션
13.2 스프링에서 트랜잭션의 작동 방식
13.3 스프링 앱에서 트랜잭션 사용
13.4 요약
14장 스프링 데이터로 데이터 영속성 구현
14.1 스프링 데이터란
14.2 스프링 데이터의 작동 방식
14.3 스프링 데이터 JDBC 사용
14.4 요약
15장 스프링 앱 테스트
15.1 올바른 테스트 작성
15.2 스프링 앱에서 테스트 구현
__15.2.1 단위 테스트 구현
__15.2.2 통합 테스트 구현
15.3 요약
부록 A
A.1 아키텍처 방식
A.2 컨텍스트 구성에 XML 사용
A.3 HTTP 기초 이해
A.4 JSON 형식 사용
A.5 MySQL 설치와 데이터베이스 생성
A.6 권장 도구
A.7 심화 학습용 추천 자료
A.8 IntelliJ에서 예제 프로젝트 오픈 및 실행