본문 바로가기

Spring

Web on Reactive Stack

이 문서는 네티 언더토우 그리고 서블릿 3.1 컨테이너와 같이 논블로킹 서버에서 실행하기 위해 Reactive Streams API에 구축된 반응형 스택 웹 애플리케이션에 대한 지원을 다룬다.

 

각각의 챕터는 스프링 웹 플럭스 프레임워크, Reactive webclient, 테스트 지원 및 반응형 라이브러리에 대해 설명한다. 서블릿 스택 웹 응용 프로그램의 경우 서블릿 스택의 웹을 참조 해라.

 

1. Spring WebFlux

오리지날 웹 프레임워크인 스프링 프레임워크는 스프링 웹 MVC를 포함하였다. 서블릿 API 및 서블릿 컨테이너를 위해 특수 제작 되었다.

반응성 스택 웹 프레임워크인 Spring Webflux는 5.0이후에 추가 되었다. Spring Webflux는 완전한 논블로킹을 지원하고 리액티브 스프림 역압력을 지원하며 네티, 언더토우 서블릿 3.1 이상 컨테이너에서 실행 된다.

 

두 웹 프레임워크는 소스모듈(sprihng-webmvc, spring-webflux) 이름을 미러링 하고 스프링 프레임워크에 공존 함.

어플리케이션은 하나 또는 다른 모듈을 사용하거나 경우에 따라 반응형 webclient가 있는 Spring MVC 컨트롤러와 같은 모듈을 사용할 수 있다.

 

1.1. Overview

스프링 웹 플럭스는 웨 만들었을까?

 

일부 대답은 적은 수의 스레드로 동시성을 처리하고 더 적은 하드웨어 리소스로 확장하기 위해 논블로킹 웹스택이 필요 했다.

서블릿 3.1은 논블로킹 IO 를  API를 제공 하였지만  동기적 또는 블로킹을 사용하여 서블릿 API의 레스트로 부터 멀어졋다.

새로운 공통 API가 모든 논블로킹 런타임에서 기초가 되는 동기였다. 이것은 비동기 서버로 잘 안정된(ex Netty) 서버나 논블로킹 공간에서는 매우 중요하다. 또다른 대답은 함수형 프로그래밍 때문이다.  자바 5에  어노테이션이 생기면서 많은 기회가 생겼다 (레스트 컨트롤러나 유닛 테스트) 람다 표현식이 자바8에 생기면서  함수형 API에 대해 많은 기회가 생겼다.  비동기식 로직을 선언적으로 구성 할 수있는 비동기  애플리케이션 및 연속적인 스타일 API (CompletableFuture 및 ReactiveX에서 널리 사용되는)에 도움이 된다.

프로그래밍 모델 수준에서 자바8을 통해 스프링 WebFlux 주석이 달린 컨트롤러와 함께 기능적은 웹 엔드포인트를 제공 할 수 도 있다.

 

1.1.1. Define “Reactive” 리액티브 정의
우리는 논블로킹과 함수적에대해 언급 했다. 그러나 리액티브란 무엇인가?
reactive"라는 용어는 네트워크 구성요소가 I/O 이벤트에 반응하고, UI 컨트롤러가 마우스 이벤트에 반응하는 등 변화에 반응하여 구축된 프로그래밍 모델을 말한다.

그런 의미에서 비차단화는 반응적이다. 왜냐하면 차단되는 대신, 우리는 이제 작업이 완료되거나 데이터가 사용 가능해짐에 따라 알림에 반응하는 모드가 있기 때문이다.


또한 스프링팀에서 우리가 "reactive"와 연관짓는 또 다른 중요한 메커니즘이 있는데 그것은 비동기 역압이다. 동기적이고 명령적인 코드에서, 블로킹 호출은  호출한곳에서  대기하도록 강요하는 자연적인 배압의 역할을 한다.
비동기적 코드에서 빠른 프로듀서가 목적지를 압도하지 않도록 이벤트 속도를 제어하는것이 중요하다.
Reactive Streams는 (Java 9에서도 채택됨) 역 압력과 비동기 구성요소 간의 상호작용을 정의하는 작은 사양이다.
예를들어 
예를 들어 데이터 저장소 (생산자 역할)는 HTTP 서버 (구독자 역할)가 응답에 쓸 수있는 데이터를 생성 할 수 있다.
Reactive Streams의 주요 목적은 구독자가 생산자 데이터를 얼마나 빨리 또는 느리게 생성하는지 제어 할 수 있도록하는 것입니다.
리 액티브 스트림의 목적은 메커니즘과 경계를 설정하는 것입니다. 생산자가 속도를 늦출 수없는 경우 버퍼링, 삭제 또는 실패 여부를 결정해야합니다.



refer ..을..에게 알아보도록 하다. 지시하다 나타내다 주목시키다
In that sense 그러한 점에서, 이러한 의미에서
instead of ~ 대신에
associate 연관된
imperative 반드시 해야하는 , 긴요한, 위엄있는
overwhelm 휩싸다, 제압하다.
adopted 입양하다, 채택하다.

interaction 상호 작용

 

lead 지시
leads away 멀어지다
contracts 계약

However 하지만, 그러나 아무리...해도
motivation 자극, 유도 동기부여 학습유발
serve 동사 제공하다 차려주다, 돌아가다 명사 서브
foundation 토대 , 재단
well-established 확고부동한, 안정된, 정착된
much 많음 매우 정말 많이
boon 요긴한것
continuation-style 연속적인 스탕일

such as : ~와 같이
purpose-built : 특수 제작된

fully : 충분히
both: 양쪽 모두
co-exist: 공존, 양립하다, 동시에 존재하다

 

참고 : https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux

'Spring' 카테고리의 다른 글

1.1.2. Reactive API  (0) 2020.06.30
RequestParam이 있을때와 없을때 차이  (1) 2019.06.25