빙응의 공부 블로그
[Spring API]Spring WebFlux와 WebClient 본문
📝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
'Spring > 개인공부_이론' 카테고리의 다른 글
[Spring]단위 테스트 정리하기 Mockito (2/3) (1) | 2024.10.18 |
---|---|
[Spring]단위 테스트 정리하기 JUnit(1/3) (1) | 2024.10.18 |
[Spring]예외 처리 전략 (0) | 2024.03.29 |
JWT 개요 (0) | 2024.03.24 |
[Spring]스프링 시큐리티 - 구조 이해하기 (0) | 2024.03.22 |