Webflux에 대해
프로젝트에서 OAuth2를 사용해 로그인을 구현하다보니 알지 못했던 RestTemplate과 WebClient에 접했다.
이에 대해 공부하다보니 스프링 부트에서 지원하는 Webflux에 대해 알게 되었고 공부한 것을 정리한 글이다.
Webflux
- Spring Framework 5부터 지원하는
반응형 웹 애플리케이션을 구축하기 위한 프레임워크
Webflux는
Reactor
라이브러리를 기반으로 하는반응형 프로그래밍 프레임워크
로,비동기(Asynchronous) 처리 및 Non-Blocking 처리를 지원
한다.- 비동기 및 이벤트 기반 프로그래밍을 통해
높은 확장성과 성능을 제공
한다.
반응형 프로그래밍(Reactive Programming)
이벤트 중심으로, Thread 대신 데이터 스트림에 초점을 맞춤
으로써,대량의 동시 요청을 처리해야하는 애플리케이션의 확장성과 응답성을 향상
시키는데 효과적이며,적은 리소스로 많은 동시 연결을 처리
할 수 있다.- 데이터를 비동기적으로 처리하기 위한 반응형 유형인
Mono와 Flux
를 제공 Publisher-Subscriber 패턴
을 중심으로 동작
분류 | 명령형 프로그래밍 | 반응형 프로그래밍 |
---|---|---|
처리 방식 | 명령어를 순서대로 실행 | 데이터 스트림을 처리하며, 데이터 변화에 반응 |
동기/비동기 | 대부분 동기적 | 대부분 비동기적 |
코드 구성 | 명령형 코드 | 선언형 코드 |
사용 예시 | 계산기, 루프 등 | 이벤트 처리, UI 업데이트 등 |
프로그래밍 종류 | Spring MVC | Webflux |
Publisher-Subscriber 패턴 : 반응형 스트림
- 비동기 및 이벤트 기반 응용 프로그램을 위한
스트림 처리 기술
을 의미. Publisher가 Subscriber에게 데이터를 제공하는 것 - 스트림을 이용해
Publisher는 데이터를 생성
하고Subscriber는 해당 데이터를 처리
객체 | 설명 |
---|---|
Publisher : 발행자 | 데이터를 생성하고, Subscriber에게 전송합니다. |
Subscriber : 구독자 | Publisher로부터 데이터를 받아들이고, 소비합니다. |
Subscription : 구독 | Subscriber가 처리할 데이터의 양을 정의합니다. |
Mono
- Publisher 중 하나로
0개 또는 하나의 데이터 항목 생성
하고 결과가 생성되면 스트림을 종료
Flux
- Publisher 중 하나로
여러 개의 데이터 항목을 생성
Mono와 Flux에 대해서는 기회가 되면 더 자세히 알아보자.
비동기 및 Non-blocking
- 스레드를 효율적으로 사용 가능
- Synchronous 및 Blocking을 사용하는 기존의 WebMVC보다 높은 처리량 제공
함수형 프로그래밍
- 람다와 스트림을 제공함
장점
- 높은 성능과 효율성
- 효율적인 자원 사용 가능
단점
- 학습 곡선이 높을 수 있음
- 오류 처리 및 디버깅이 복잡
vs Spring MVC
적용 사례
- 채팅 또는 메시징 플랫폼과 같은 실시간 애플리케이션
- 마이크로서비스 아키텍처
등
정리
Webflux는 non-blocking 방식을 지원하며 기존의 MVC보다 높은 확장성과 성능을 제공한다.
OAuth2.0을 구현하다보니 HTTP 클라이언트 중 RestTemplate이나 WebClient로 많이들 구현한 것을 보았다.
하지만 스프링 프레임워크에서 WebClient를 사용해 구현하는 것을 권장하고 있으니 WebClient를 사용하자.
분류 | RestTemplate | WebClient |
---|---|---|
I/O 모델 | 블로킹 | 논블로킹 |
동시성 | 낮음 | 높음 |
성능 | 동기식 | 비동기식 |
응답 타입 | ResponseEntity | Mono, Flux |
클라이언트 측 부하 분산 | 지원 안 함 | 지원 |
스트리밍 | 지원 안 함 | 지원 |
출처)
[Java] Spring Boot - WebF.. : 네이버블로그 (naver.com)
[Java] Spring Boot Webflux 이해하기 -1 : 흐름 및 주요 특징 이해 — Contributor9 (tistory.com)
This post is licensed under CC BY 4.0 by the author.