서블릿 API 초창기 시절엔 구현 컨테이너 대부분이 요청당 스레드 하나만 사용
컨테이너가 요청을 받아 처리를 끝내고 클라이언트에 응답을 돌려주기 전까지 스레드는 항상 블로킹blocking
연결된 기기 개수 및 HTTP 요청 횟수가 기하급수적으로 늘면서 과거처럼 웹 애플리케이션이 스레드를 블로킹하는 식으로는 정상적으로 서비스가 불가능
서블릿 3 명세부터 HTTP 요청을 비동기로 처리 가능, 최초 HTTP 요청을 접수했던 스레드를 해제 가능
새 스레드는 백그라운드에서 움직이다가 결과가 준비되는 즉시 클라이언트로 보낼 수 있음
서블릿 3.1 호환 컨테이너에서는 제대로 사용한다면 사실상 모든 작업을 넌블로킹non-blocking 방식으로 작동 가능
사용할 리소스 모두 넌블로킹 형태로 작동
리액티브 프로그래밍reactive programming(반응형 프로그래밍)이 조명받기 시작, 스프링 5부터는 리액티브 웹 애플리케이션 개발 가능
리액티브 스프링 프로젝트는 리액터 프로젝트Project Reactor를 리액티브 스트림Reactive Stream API의 구현체로 사용
리액티브 프로그래밍은 넌블로킹 함수형 프로그래밍을 실천하는 방법