빙응의 공부 블로그

[Spring API]Spring WebFlux와 WebClient 본문

Spring/개인공부_이론

[Spring API]Spring WebFlux와 WebClient

빙응이 2024. 5. 24. 17:32

 

📝WebFlux

웹플럭스란 적은 쓰레드로 동시 처리를 제어하고 적은 하드웨어 리소스로 확장하기 위해 만들어진
반응형 웹 프레임워크이다.

🚩 탄생계기

그렇다면 스프링 웹플럭스는 왜 만들어졌을까?

 

사실 제일 큰 이유는 시대의 흐름에 따라 Spring MVC의 한계가 있었기 때문이다. 

  • 트래픽이 많아지면 스레드도 많이 사용
  • 스레드 풀에 따라 엄청난 성능 편차
  • 스레드 스위칭 비용도 발생

그래서 Spring WebFlux는 한계를 극복했다. 또한 업그레이드까지 

  • 적은 쓰레드로 동시 처리를 제어
  • 적은 하드웨어 리소스로 확장
  • 논블로킹 웹 스택 방식
  • 반응형 프로그래밍 패러다임

 

적은 쓰레드로 동시 처리를 제어하기 위해
  • 전통적인 서블릿 기반의 동기식 처리 모델에서는 각 요청이 처리되는 동안 쓰레드가 블로킹된다.
  • 반면, WebFlux는 논 블로킹 방식으로 동작하여 적은 수의 쓰레드로도 높은 동시성이 가능하다.
적은 하드웨어 리소스로 확장하기 위해
  • 리소스의 효율성에 관한 이야기이다.
  • 마찬가지로 WebFlux의 논블로킹 방식은 자원을 효율적으로 활용할 수 있다. 
논블로킹 웹 스택이 필요했기 때문
  • 현대적인 웹 애플리케이션에서 필요한 요구사항이 무엇일까?
    • 실시간 데이터 스트리밍
    • 대규모 사용자 동시 접속
    • 높은 응답 속도
  • 이러한 요구사항을 충족시키기 위해 논블로킹 방식은 필수적이다. 
반응형 프로그래밍 패러다임의 주목
  • WebFlux는 반응형 프로그래밍 모델을 사용하여 데이터 흐름을 제어하고 복잡한 비동기 논리를 간결하고 직관적으로 표현이 가능하다.

📝WebFlux의 리액티브와 논블로킹

🚩Non-blocking

논블로킹이란 쉽게 말하면 특정 작업이 완료될 때까지
기다리며 멈추지 않고 다른 작업을 계속 진행할 수 있는 방식이다. 

Spring MVC와 비교해보자

해당 사진에서 보면 웹 플럭스의 장점을 한 눈에 알 수 있을 것이다.

 

🚩리액티브 

리액티브란 쉽게 말해 반응형 중심 프로그래밍 모델이다.
리액트의 State처럼 데이터 변화에 따라 반응하는 방식을 중심으로 한다.
웹플럭스는  이러한 리액티브를 기반으로 데이터 변화 중심인 리액티브 프로그래밍을 한다.

 

🚩 그럼 왜 MVC씀? 무조건 WebFlux가 좋은거 아님?

결론부터 말하면 이분법적으로 생각하지 말고 둘 모두 선택의 폭을 넗혀주는 좋은 방식이다.

함께 사용할 수도 있으며 각자의 피드백이 서로에게 도움이 되기도 한다. 

또한 다음을 생각해보자

  • 이미 잘 동작하고 있는 스프링 MVC를 굳이 바꿀 필요가 없다. 이해도 쉽고 디버깅도 가장 쉽기 때문이다.
  • 또한 사용할 수 있는 라이브러리가 가장 풍부하다. 
  • 물론 함수형 웹 프레임워크를 찾는다면 웹플럭스가 정답이다. 로직을 투명하게 제어할 수 있기 때문에 소규모 애플리케이션이나 마이크로 서비스에서 좋은 선택이 될 것이다. 
  • 스프링 MVC 어플리케이션에서 외부 서비스를 호출한다면 한번 리액티브 WebClient를 사용해보자

Spring WebFlux (1) | 토리맘의 한글라이즈 프로젝트 (godekdls.github.io)

 

Spring WebFlux (1)

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

godekdls.github.io

📝 WebClient

Spring WebFlux는 리액티브, Non-Blocking HTTP 요청을 위한 WebClient를 제공한다.

 

WebClient의 주요 특징은 다음과 같다.

  • 비동기적인 요청처리
    • 비동기 방식으로 HTTP 요청을 보내고 응답을 받아 처리할 수 있다.
  • 함수형 스타일 API
    • WebClient는 리액트 스트림 API를 사용하여 데이터 스트림을 다루는데, 이를 함수형 스타일로 사용할 수 있다.
  • 다양한 HTTP 클라이언트 기능
    • 다양한 HTTP 메서드를 지원하며, 요청 헤더나 쿠키 설정, 파일 업로드 등의 다양한 기능도 제공한다.
  • 역압 기능
    • 역압(Backpressure) 기능을 제공하여 서버와의 통신에서 발생할 수 잇는 과부하를 관리할 수 있다.
  • [Spring]WebClient (tistory.com)
 

[Spring]WebClient

[Spring API]Spring WebFlux와 WebClient (tistory.com) [Spring API]Spring WebFlux와 WebClient📝WebFlux웹플럭스란 적은 쓰레드로 동시 처리를 제어하고 적은 하드웨어 리소스로 확장하기 위해 만들어진반응형 웹 프레

quddnd.tistory.com