====== Web Reactive ====== ===== 개요 ===== 스프링 WebFlux는 5.0 버전부터 추가된 리액티브 스택 웹 프레임워크로서, 서블릿 API와 서블릿 컨테이너를 개발하기 위한 스프링 프레임워크이다.\\ 스프링 웹 MVC를 포함한 기존의 웹 프레임워크와 달리 완전한 논블로킹으로 동작하며 Reactive Streams back pressure를 지원하고 Netty, Undertow, 서블릿 3.1+ 컨테이너 서버에서 실행된다.\\ 웹 프레임워크 모두 스프링 프레임워크에 포함되어 있으며, 원하는 모듈을 선택하여 개발할 수 있다. ===== 설명 ===== === Spring WebFlux 정의 === 스프링 5.0 버전부터 추가된 비동기 프로그래밍으로 Reactive-Stack을 통한 Async Non-Blocking 지원하며 서비스 간의 호출이 많은 마이크로서비스 아키텍처에 적합한 프레임워크이다. == 주요 개념 == * Reactive : 마우스 이벤트에 반응하는 UI 컨트롤러 혹은 I/O 이벤트에 반응하는 네트워크 구성 요소와 같이 변경에 반응하는 프로그래밍 모델 * Reactive Streams : backpressure가 있는 비동기 컴포넌트간의 상호 작용을 정의하는 소규모 사양 * Reactor : Spring WebFlux에서 사용되는 Reactive Library이면서 Reactive Streams의 구현체 * Non-Blocking I/O : 주로 I/O의 읽기, 쓰기에서 사용되는 용어로 Blocking는 요청한 작업이 마칠 때까지 대기하는 상태이고 Non-Blocking는 요청한 작업이 즉시 마칠 수 없다면 즉시 Return 하는 상태임 * Asynchronous : 작업완료 여부를 호출한 함수가 기다리거나 스스로 확인하는 방식이 동기방식이고 호출되는 함수에게 callback을 전달하고 완료되면 호출되는 함수가 callback을 실행하는 방식 * Netty : 프로토콜 서버 및 클라이언트와 같은 네트워크 응용 프로그램을 빠르고 쉽게 개발할 수 있는 NIO(Non-Blocking Input Ouput) 클라이언트 서버 프레임워크 ===== 참고자료 ===== * [[https://docs.spring.io/spring-framework/docs/5.3.20/reference/html/web-reactive.html#spring-webflux|The Spring Framework - Reference Documentation / Web on Reactive Stack]]