Framework/Spring Boot

WebFlux

잔망루피 2023. 3. 13. 20:03

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에 요청이 쌓이는 문제점을 해결할 수 있다.

 
 
참고👇
https://medium.com/naver-cloud-platform/%EC%9D%B4%EB%A0%87%EA%B2%8C-%EA%B0%9C%EB%B0%9C%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4-simple-easy-notification-service-3-mongodb-client-%EB%B9%84%EA%B5%90-with-webflux-8258b1c119d0

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

medium.com

 

반응형