webflux vs mvc 관련 의문점 정리
| topics | 300-백엔드개발 301 Spring |
| types | 학습 이론 |
| tags |
이미 많이 있지만 webflux와 spring mvc를 나의 언어로 정리하고 궁금한 것을 찾아보고자 한다
기본 개념
- MVC
- Thread-per-Request : 1요청에 1스레드
- Tomcat
- Blocking
- WebFlux
- Event Loop
- Netty
- NonBlocking
요청 들어올 때 처리 과정
-tx-
| MVC | WebFlux |
------------ | :-----------: | -----------: |
1 | HTTP Request ||
2 | Tread Pool(Tomcat) | Event Loop(Netty) |
3 | controller > service> repository ||
4 | Database(Blocking I/O) | Non-Blocking I/O |
5 | HTTP Response ||
궁금한점
틀렷으면 이야기 부탁드립니다...
1. Spring MVC도 비동기 인터페이스 있는데 이거 다 블로킹됨?
CompletableFuture같은 것들 말이지
다 블로킹되면 왜 비동기 쓰지?
Answer
SpringMVC도 모두 blocking은 아니다! 서버 레벨 I/O만 블로킹된다는것이다.
예를 들어 spring filter, servlet, client요청을 읽는 과정에서 블로킹이 발생한다
기존 서블릿 기반 애플리케이션의 한계
But!! WebFlux는 처음부터 끝까지 Non-blocking방식으로 할 수 있음!
즉 java코드레벨 비즈니스 로직은 Java표준에서 제공하는 방식으로 비동기,non-blocking처리될 수 있다.
CompletableFuture은 Java표준에서 제공하는 방식중 하나로 jvm에서 멀티 스레드 방식으로 구현된다
2. Event Loop방식이 뭐임? 기존이랑 뭐가 다름?
웹v8엔진에서 이벤트루프 방식으로 작동하는 방식이랑 비슷한가
Answer
한 스레드에서 여러 I/O를 처리 가능함 How? with EventLoop.
출처 : https://oneny.tistory.com/125
그렇다 비슷하다 이벤트 루프가 이벤트가 있는지 확인하고 꺼내서 이벤트를 수행하는 방식이다.
3. 리액터와 이벤트 루프는 비슷한 말인가
Answer
Reactor는 일종의 패턴이다 이벤트루프는 이러한 패턴을 구현하기 위한 방식이다.
4. 옵저버패턴과 이벤트루프는 언제 쓰이는가
옵저버 패턴도 많이 쓰인다고 들었는데 두개 언제 쓰이지?
내 생각에는 하드웨어를받아서 처리하는 I/O에서는 이벤트루프 , 소프트웨어 단으로 넘어가선 옵저버 쓸 것 같은데
Answer
이벤트루프는 하드웨어,Lowlevel과 연관된 I/O작업에 쓰이고 이게 소프트웨어 단으로 넘어가서 객체간에 무언가 이벤트를 트래킹하기 위해서는 옵저버 패턴을 씀
리액티브시스템에도 두개 섞어서 많이 쓴다고 함