
Spring MVC
- Servlet 기반으로 만들어졌다.
- sync + blocking 방식으로 동작
- 하나를 처리할 때 Response를 기다리며 thread를 지연
- Multi Thread를 사용하면 block되지 않고 사용할 수 있지만, Thread 간의 Context Switch 발생 시 비용이 생겨 비효율적

WebFlux
- Spring5에서 새롭게 추가된 모듈
- 클라이언트와 서버에서 Reactive한 개발을 할 수 있게 도와줌
- 요청이나 응답을 처리하는 I/O를 async + non blocking으로 방식으로 수행
- 성능을 최대로 내기 위해서는 모든 I/O 작업이 non blocking 기반으로 동작해야 한다.
- I/O 작업이 block 되는 곳이 있다면 event loop meltdown 현상으로 다른 작업까지 영향을 받아 느려질 수 있다.
- callback을 통하여 작업이 진행되기 때문에 Blocking이나 Polling 방식을 사용하지 않는다.
- 자원을 더 효율적으로 사용
- WebFlux 활용 시에는 DB Client도 Reactive Client를 사용하는 것이 더 좋은 효율
- Event-Driven으로 동작
- 다수 요청을 하나의 Thread로도 처리
- Queue에 요청이 쌓이는 문제점을 해결할 수 있다.

[이렇게 개발했습니다] Simple & Easy Notification Service #3 : MongoDB Client 비교 (with WebFlux)
medium.com
반응형