티스토리 뷰

서버

스프링웹플럭스_2

Hilu 2021. 11. 11. 21:34

스프링웹플럭스?

 

스프링웹플럭스란 Project  Reactor의 웹의 스트리밍 처리를 한다. SpringBoot2(Spring5) 부터 사용가능 하며 Reactive Stack, Servlet Stack 둘중 하나를 선택해서 사용해야 한다.

Spring Reactive Stack vs Servlet Stack (출처 : https://spring.io/reactive)

 

Spring MVC vs WebFlux

 

 

MVC 에서 WebFlux 로 전환하고자 하면 다음을 고려해 보자

 

1. 이미 잘 동작하고 있는 MVC 프로젝트는 무리 해서 바꿀 필요는 없다. 작성, 소스이해, 디버깅이 비동기 방식보다 이해하기 쉽고, 관련 library 도 많다.

 

2. 하지만, 논블록킹 웹 스택을 알아보고 있다면, Spring WebFlux 다른 웹스택을 실행환경을 제공하면서도, 다양한 서버, 리액티브 라이브러리를 제공한다.

 

3. Java8, kotlin 로 개발할 수 있는 경량의 함수형 웹 프레임 워크를 찾고 있다면, Spring WebFlux 을 함수형 엔드포인트를 활용 하면 된다. 소규모 프로젝트나, 마이크로서비스에 효과 적으로 적용 가능 하다.

 

4. MSA 에서는 MVC로 만든 웹어플리케이션, WebFlux 컨트롤로나 함수형 엔드포인트를 사용한 엔드포인트에 복합적으로 조합이 가능하다. 두 프레임워크 모두 어노테이션 기반 프로그래밍이 가능하기 떄문에 선택 적으로 사용 가능 하다.

 

5. 웹어플리케이션이 블로킹 방식을 API(JPA, JDBC)를 사용하고 있다면 MVC 를 활용하는 것이 효과 적이다. 리액터나 RxJava 로도 쓰레드 블록킹 API를 호출 할 수 있지만 이렇게 되면은 논블록킹 웹 스택은 거의 활용 못한다.

 

6. 스프링 MVC 어플리케이션에서 외부 서비스를 많이 호출하고 있다면, 리액티브 webclient 를 활용해서 성능 차이가 있나 살펴 보자. 호출 부가 많으면 더 효과 적으로 작동할 것이다.

 

7.  기존에 MVC 어플리케이션을 운영하던 조직은 WebFlux 로 전환시 러닝커브가 높기 때문에, 한번에 전환하지 말고 WebClient 적용해서 변화가 있는지 확인해 보는 것이 좋을 것같다.

 

WebClient ?

Spring WebClient는 웹으로 API를 호출하기 위해 사용되는 Http Client 모듈 중 하나이며,  Spring WebClient가 필요한 이유는

요청자와 제공자 사이의 통신을 좀 더 효율적인 Non-Blocking방식으로 하기 위해서이다.

 

WebClient 동작을 이해하기 위해서 RestTamplate 동작 원리를 먼저 이해 해야 한다.

 

RestTemplate은 Multi-Thread와 Blocking방식을 사용한다.

위와 같이 동작하게 되면은 하나의 요청에 하나의 Thread 가 할당 되게 되며, 요청이 많아져서 Thread가 꽉차게 되면은 요청은 Queue 에서 대기 하게 된다. 네트워킹이나 DB와의 통신에서 여러스레드가 생성되면 서비스 퍼포먼스가 현저하게 떨어진다.

 

반면에 

 

Spring WebClient는 Single Thread와 Non-Blocking방식을 사용한다.

https://luminousmen.com/post/asynchronous-programming-blocking-and-non-blocking

Spring WebClient의 경우 Event Loop 가 Client 에 Request에 대해서 결과를 전송하지 않고 계속 job 을 처리하다. CallBack 이 오며는 결과를 Client 에게 응답을 준다. 이런 동작 특성 때문에 Clients 입장에서는 서비스가 block 되지 않게 된다. 이런 동작 때문에 반응성, 탄력성, 가용성, 비동기성을 보장한다.

 

성능 비교를 하면 더큰 차이를 볼 수 있다.

https://alwayspr.tistory.com/44

접속 유저가 많아 질수록 엄청난 성능 차이를 보이며, Spring커뮤니티에서는 RestTemplate을 Depreciated 시키고 WebClient를 사용할것을 강력히 권고하고 있다고 한다.

 

다음 장에서는 WebClinent 를 실습해 보도록 하겠다.

 

참고 

https://hyunsoori.tistory.com/3

 

Spring Webflux, 이해하고 사용하자

Webflux 란? Webflux를 먼저 이해하려면, reactive streams 를 먼저 이해해야 한다. reactive streams 란? reactive-streams.org 에서는 다음과 같이 정의하고 있다. Reactive Streams is an initiative to provi..

hyunsoori.tistory.com

https://godekdls.github.io/Reactive%20Spring/springwebflux/

 

Spring WebFlux (1)

스프링5 웹 리액티브 스택 웹플럭스 한글 번역 1편 (리액티브, 웹플럭스 소개, DispatcherHandler, 컨트롤러)

godekdls.github.io

https://happycloud-lee.tistory.com/220

 

Spring WebClient 쉽게 이해하기

1. Spring WebClient 이해 1) WHY ? 우리가 개발하는 어플리케이션들을 크게 2개로 나눠보면 요청자와 제공자라고 할 수 있습니다. 요청자를 consumer 또는 subscriber라고 하고, 제공자를 producer 또는 provider..

happycloud-lee.tistory.com

 

'서버' 카테고리의 다른 글

스프링웹플럭스_4  (0) 2021.12.17
스프링웹플럭스_3  (0) 2021.11.24
스프링웹플럭스_1  (0) 2021.11.10
Spring - Constructor Injection  (0) 2019.05.07
vert.x  (0) 2019.03.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함