리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는 리액티브 시스템을 구축하기 위한 핵심 구성 요소입니다. 이 책은 스프링 리액티브 웹 애플리케이션 구현에 있어 중요한 역할을 하는 Reactor의 핵심 개념들을 쉽게 이해할 수 있도록 충분한 설명과 다양한 예제 코드, 마블 다이어그램 등을 제공합니다. 또한 Reactor에 대한 학습을 토대로 Spring WebFlux 기반의 Non-Blocking I/O 방식의 샘플 애플리케이션을 구현해 보면서 리액티브 프로그래밍 입문이라는 길로 자연스럽게 안내합니다
Contents
지은이 소개
지은이의 말
기술 감수자 소개
기술 감수자의 말
추천사
일러두기
이 책의 대상 독자
이 책의 구성
예제 코드 구성
소프트웨어 버전
주의 사항
Part 01 리액티브 프로그래밍(Reactive Programming)
Chapter 01 리액티브 시스템과 리액티브 프로그래밍
1.1 리액티브 시스템(Reactive System)이란?
1.2 리액티브 선언문으로 리액티브 시스템 이해하기
1.3 리액티브 프로그래밍(Reactive Programming)이란
1.4 리액티브 프로그래밍의 특징
1.4.1 declarative programming
1.4.2 data streams와 the propagation of change
1.5 코드로 보는 명령형 프로그래밍 vs 선언형 프로그래밍
1.5.1 명령형 프로그래밍
1.5.2 선언형 프로그래밍
1.6 리액티브 프로그래밍 코드 구성
Chapter 03 Blocking I/O와 Non-Blocking I/O
3.1 Blocking I/O
3.2 Non-Blocking I/O
3.3 Spring Framework에서의 Blocking I/O와 Non-Blocking I/O
3.4 Non-Blocking I/O 방식의 통신이 적합한 시스템
3.4.1 대량의 요청 트래픽이 발생하는 시스템
3.4.2 마이크로 서비스 기반 시스템
3.4.3 스트리밍 또는 실시간 시스템
Chapter 04 리액티브 프로그래밍을 위한 사전 지식
4.1 함수형 인터페이스(Functional Interface)
4.2 람다 표현식(Lambda Expression)
4.3 메서드 레퍼런스(Method Reference)
4.4 함수 디스크립터(Function Descriptor)
Chapter 07 Cold Sequence와 Hot Sequence
7.1 Cold와 Hot의 의미
7.2 Cold Sequence
7.3 Hot Sequence
7.4 HTTP 요청과 응답에서 Cold Sequence와 Hot Sequence의 동작 흐름
Chapter 08 Backpressure
8.1 Backpressure란?
8.2 Reactor에서의 Backpressure 처리 방식
8.2.1 데이터 개수 제어
8.2.2 Backpressure 전략 사용
Chapter 09 Sinks
9.1 Sinks란?
9.2 Sinks 종류 및 특징
Chapter 10 Scheduler
10.1 스레드(Thread)의 개념 이해
10.2 Scheduler란
10.3 Scheduler를 위한 전용 Operator
10.4 publishOn( )과 subscribeOn( )의 동작 이해
10.5 Scheduler의 종류
Chapter 11 Context
11.1 Context란?
11.2 자주 사용되는 Context 관련 API
11.3 Context의 특징
Chapter 12 Debugging
12.1 Reactor에서의 디버깅 방법
12.1.1 Debug Mode를 사용한 디버깅
12.1.2 checkpoint( ) Operator를 사용한 디버깅
12.1.3 log( ) Operator를 사용한 디버깅
Chapter 13 Testing
13.1 StepVerifier를 사용한 테스팅
13.2 TestPublisher를 사용한 테스팅
13.3 PublisherProbe를 사용한 테스팅
Chapter 14 Operators
14.1 Operator란
14.2 Sequence 생성을 위한 Operator
14.3 Sequence 필터링 Operator
14.4 Sequence 변환 Operator
14.5 Sequence의 내부 동작 확인을 위한 Operator
14.6 에러 처리를 위한 Operator
14.7 Sequence의 동작 시간 측정을 위한 Operator
14.8 Flux Sequence 분할을 위한 Operator
14.9 다수의 Subscriber에게 Flux를 멀티캐스팅(Multicasting) 하기 위한 Operator
Part 03 Spring WebFlux
Chapter 15 Spring WebFlux 개요
15.1 Spring WebFlux의 탄생 배경
15.2 Spring WebFlux의 기술 스택
15.3 Spring WebFlux의 요청 처리 흐름
15.4 Spring WebFlux의 핵심 컴포넌트
15.5 Spring WebFlux의 Non-Blocking 프로세스 구조
15.6 Spring WebFlux의 스레드 모델
Chapter 16 애너테이션 기반 컨트롤러
(Annotated Controller)
16.1 Spring MVC 기반 Controller
16.2 Spring WebFlux 기반 Controller
Chapter 17 함수형 엔드포인트(Functional Endpoint)
17.1 HandlerFunction을 사용한 request 처리
17.2 request 라우팅을 위한 RouterFunction
17.3 함수형 엔드포인트에서의 request body 유효성 검증
Chapter 18 Spring Data R2DBC
18.1 R2DBC란
18.2 Spring Data R2DBC란?
18.3 Spring Data R2DBC 설정
18.4 Spring Data R2DBC에서의 도메인 엔티티 클래스 매핑
18.5 R2DBC Repositories를 이용한 데이터 액세스
18.6 R2dbcEntityTemplate을 이용한 데이터 액세스
18.7 Spring Data R2DBC에서의 페이지네이션(Pagination) 처리
Chapter 19 예외 처리
19.1 onErrorResume( ) Operator를 이용한 예외 처리
19.2 ErrorWebExceptionHandler를 이용한 글로벌 예외 처리
Chapter 20 WebClient
20.1 WebClient란?
20.2 WebClient로 도서 정보 요청하기
20.3 WebClient Connection Timeout 설정
20.4 exchangeToMono( )를 사용한 응답 디코딩
Chapter 21 Reactive Streaming 데이터 처리
찾아보기
Author
황정식
2010년부터 모바일 기반의 대학 통합 시스템, 블록체인 기반의 데이터 마켓 서비스 등 다양한 웹 애플리케이션 프로젝트를 수행해 온 시니어 백엔드 개발자입니다. 현재는 (주)코드스테이츠에서 미래의 백엔드 개발자를 꿈꾸는 학생들과 함께 교육 엔지니어로 즐거운 일상을 보내고 있습니다.
소프트웨어 개발에 대한 지식을 공유하기를 좋아합니다. 특히 수년 전 애플리케이션 개발에 사용한 리액티브 프로그래밍의 매력에 심취해 프로젝트 이후, RxJava를 깊이 공부하면서 알게 된 지식들을 공유하고, 리액티브 프로그래밍에 입문하고 싶어하는 분들에게 약간의 도움을 주고자 관련 지식들을 온라인 강의로 제작해 인프런에 오픈했습니다.
미래에 제 모습이 어떤 모습으로 변해 있을지 아직은 알 수없지만, 소프트웨어 개발이라는 영역 안에서 더 나은 삶을 살아가기 위해 현재 꾸준히 노력하며 살고 있습니다. 백발이 되어서도 소프트웨어를 개발할 수 있는 소프트웨어 엔지니어가 되기 위해 오늘도 열심히 노력하겠습니다
2010년부터 모바일 기반의 대학 통합 시스템, 블록체인 기반의 데이터 마켓 서비스 등 다양한 웹 애플리케이션 프로젝트를 수행해 온 시니어 백엔드 개발자입니다. 현재는 (주)코드스테이츠에서 미래의 백엔드 개발자를 꿈꾸는 학생들과 함께 교육 엔지니어로 즐거운 일상을 보내고 있습니다.
소프트웨어 개발에 대한 지식을 공유하기를 좋아합니다. 특히 수년 전 애플리케이션 개발에 사용한 리액티브 프로그래밍의 매력에 심취해 프로젝트 이후, RxJava를 깊이 공부하면서 알게 된 지식들을 공유하고, 리액티브 프로그래밍에 입문하고 싶어하는 분들에게 약간의 도움을 주고자 관련 지식들을 온라인 강의로 제작해 인프런에 오픈했습니다.
미래에 제 모습이 어떤 모습으로 변해 있을지 아직은 알 수없지만, 소프트웨어 개발이라는 영역 안에서 더 나은 삶을 살아가기 위해 현재 꾸준히 노력하며 살고 있습니다. 백발이 되어서도 소프트웨어를 개발할 수 있는 소프트웨어 엔지니어가 되기 위해 오늘도 열심히 노력하겠습니다