[스프링 인 액션] 11장 WebFlux : Reactive API 개발하기

    11장 WebFlux로 Reactive API 개발하기

    🎯 이 장에서 배우는 내용

    • 스프링 WebFlux 사용하기
    • 리액티브 컨트롤러와 클라이언트 작성하고 테스트하기
    • REST API 소비하기
    • 리액티브 웹 애플리케이션의 보안

    11.1 스프링 WebFlux 사용하기

    매 연결마다 하나의 스레드를 사용하는 스프링 MVC 같은 전형적인 서블릿 기반의 웹 프레임워크는 thread blocking과 다중 스레드로 수행된다. 즉 요청이 처리될 때 스레드 풀에서 작업 스레드를 가져와서 해당 요청을 처리하며, 작업 스레드가 종료될 때까지 요청 스레드는 블로킹된다.

    이에 반해 비동기 웹 프레임워크는 더 적은 수의 스레드로 더 높은 확장성을 성취한다. 이벤트 루핑 Event looping 이라는 기법을 적용한 이런 프레임워크는 한 스레드 당 많은 요청을 처리할 수 있다.

    비동기

    비동기 웹 프레임워크는 이벤트 루핑을 적용하여 더 적은 수의 스레드로 많은 요청을 처리한다.

    11.1.1 스프링 WebFlux 개요

    WebFlux

    스프링 5는 WebFlux라는 새로운 웹 프레임워크로 리액티브 웹 애플리케이션을 지원한다. Web-Flux는 스프링 Flux는 스프링 MVC의 많은 핵심 컴포넌트를 공유한다.

    스프링 MVC
    스프링 MVC는 실행 시에 톰캣과 같은 서블릿 컨테이너가 필요한 자바 서블릿 API 상위 계층에 있다.

    스프링 WebFlux
    이에 반에 스프링 WebFlux는 리액티브 HTTP API 상위 계층에 위치한다. (리액티브 HTTP API는 서블릿 API와 동일한 기능이다.) 따라서 서블릿 웹 컨테이너가 필요 없다. 대신 블로킹이 없는 어떤 웹 컨테이너에서도 실행될 수 있다. (Netty, Undertow, 톰캣, Jetty)

    기본적인 내장 서버가 톰캣 대신 Netty가 된다. Netty 는 비동기 이벤트 중심의 서버 중 하나며 WebFlux와 같은 리액티브 웹 프레임워크와 잘 맞는다.

    스프링 WebFlux 컨트롤러 메서드는 대게 도메인이나 컬렉션 대신 Mono, Flux 같은 리액티브 타입을 인자로 받거나 반환한다. 또한 Observable, Single, Completable 같은 RxJava 타입도 처리 가능하다.

    pom.xml 에 스프링 부트 WebFlux 스타터 의존성 추가

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>

    리액티브 스프링 MVC?
    스프링 WebFlux 나 스프링 MVC 모두 Mono, flux 같은 리액티브 타입을 반환 할 수 있다.

    차이점은 사용하는 방법에 있다.

    • 스프링 WebFlux : 요청이 이벤트 루프로 처리되는 진정한 리액티브 웹 프레임워크
    • 스프링 MVC: 다중 스레드에 의존하여 다수의 요청을 처리하는 서블릿 기반 웹 프레임워크

    📌 요약

    • 스프링 WebFlux 는 리액티브 웹 프레임워크를 제공한다. 이 프레임워크의 프로그래밍 모델은 스프링 MVC가 많이 반영되었다. 심지어는 어노테이션보다 많은 것을 공유한다.
    • 스프링 5는 또한 스프링 WebFlux의 대안으로 함수형 프로그래밍 모델을 제공한다.
    • 리액티브 컨트롤러는 WebTestClient를 사용해서 테스트할 수 있다.
    • 클라이언트 측에는 스프링5가 스프링 RestTemplate의 리액티브 버전인 WebClient를 제공한다.
    • 스프링 5가 스프링 RestTemplate의 리액티브 버전인 WebClient를 제공한다.
    • 스프링 시큐리티 5는 리액티브 보안을 지원하며, 이것의 프로그래밍 모델은 리액티브가 가인 스프링 MVC 애플리케이션과 다르지 않다.

    참고

    반응형

    댓글

    Designed by JB FACTORY