Spring WebFlux란?
Spring Framework에 포함된 original web framework로 5.0 버전 이후에 추가되었으며 reactive-stack web framework를 말한다.
Netty, Undertow, Servlet container와 같은 서버에서 동작한다.
fully Non-blocking 방식을 지원한다.
Non-blocking이란?
I/O 작업을 수행할 때 프로그램의 실행을 멈추지 않고 계속 진행할 수 있게 하는 방식
- 즉시 반환: I/O 작업을 호출하면 즉시 결과를 반환하며, 작업이 완료될 때까지 기다리지 않는다.
- 병렬 처리: 다른 작업을 동시에 수행할 수 있어 프로그램의 효율성이 향상된다.
- 제어권 유지: I/O 작업이 진행되는 동안에도 애플리케이션이 제어권을 유지하며 계속 실행된다.
- 폴링 가능: 필요한 경우 작업의 상태를 주기적으로 확인할 수 있다.
보통 blocking 방식에서는 syncronous하게 작업을 처리하고,
non-blocking 방식에서는 asyncronous하게 작업을 처리한다.
조합
- Blocking-Sync: 가장 전통적인 방식으로, 함수 호출 후 작업이 완료될 때까지 대기하고 즉시 결과를 처리한다.
- Non-blocking-Sync: 함수를 호출한 후 제어권을 받아 다른 일을 하면서, 주기적으로 작업 완료를 확인한다.
- Non-blocking-Async: 가장 효율적인 방식으로, 함수 호출 후 즉시 제어권을 받아 다른 일을 하고, 작업 완료 시 콜백 등으로 결과를 처리한다.
- Blocking-Async: 실제로는 거의 사용되지 않는 조합으로, 개발자의 실수로 인해 발생할 수 있다.