ㅇ 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
다른작업이 시작되어도 하던작업을 계속함. 다른작업에서 끝난결과를 처리하지 않고 하던작업이 끝나면 처리.