본문 바로가기
카테고리 없음

Spring Webflux

by 티코딩 2023. 2. 1.

ㅇ Spring WebFlux

Spring WebFlux는 전통적인 Spring MVC방식의 애플리케이션보다 대량의 클라이언트 요청을 좀더 효율적으로 처리할 수 있는 현대적인 애플리케이션 구현을 위한 기술.

Reactive 스택에서 항상 언급되는 것이 WebFlux다.

Reactor에선 두가지 타입을 지원하는데 Mono, Flux다. WebFlux는 Flux가 Web에서 사용된다라고 말할 수 있다. WebFlux는 리액티브한 웹 애플리케이션을 구현하기 위한 기술 자체를 상징하고 있다. Spring 5부터 지원하는 리액티브 웹 애플리케이션을 위한 웹 프레임워크다.

Spring WebFlux에서 Reactor만 사용할 수 있는것이 아니라, 다른 리액티브 스트림즈를 구현한 구현체라면 대부분 Reactor대신 사용가능함.

 

Spring WebFlux는 Non-blocking통신을 지원하지만 Spring MVC는 Blocking통신방식 사용

Spring WebFlux의 경우, Reactive Adapter를 사용해 Reactor뿐 아니라 Rx Java등 다른 리액티브 라이브러리를 사용할 수 있는 유연함을 제공.

모두 보안을 적용하기 위해 Spring Security사용

웹계층에선 각각 Spring WebFlux, Spring Security를 사용함.

Spring WebFlux의 경우 완전한 Non-Blocking통신을 위해 리액티브 스택을 데이터 액세스 계층까지 확장함.

 

**요약**

Spring Webflux : 적은수의 스레드로 동시성을 처리 / Non-Blocking / Functional Programming

Spring MVC : 스레드를 늘려 동시성을 처리

Webflux가 무조건빠른가? == no.

 

 

ㅇ Blocking vs Non-Blocking

이해를 위해 유튜브로 찾아보다가 정말 설명을 깔쌈하게 해주신 분이 계셔서 보고 정리해봤다.

링크 : https://www.youtube.com/watch?v=oEIoqGd-Sns

제어의 관점

Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것

Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것

 

ㅇ Synchronous vs Asynchronous

Synchronous : 동기 라는 뜻. 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미

Asynchronous : 비동기. 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미.

 

동기와 비동기는 결과에 상관하지 않고 순서에 관심이 있다.

 

ㅇ Blocking / Sync

Blocking의 관점은 제어권에있음. 다른작업이 동작하는동안 동작하지않음

Sync의 관점은 결과의 처리. 결과를 반환하면 해당업무를 바로 처리함.

 

ㅇ Non-Blocking / Sync

중간중간 결과가 나왔는지 물어보고 안나오면 돌아가서 업무를 수행하고 다시 물어보고 끝났으면 결과를 가지고 업무를 처리함. 

 

ㅇ Blocking / Async

자신의 작업에 대한 제어권이 없음. Async이기때문에 결과를 바로 처리하지 않아도됨.

 

ㅇ Non-Blocking / Async

다른작업이 시작되어도 하던작업을 계속함. 다른작업에서 끝난결과를 처리하지 않고 하던작업이 끝나면 처리.