Spring MVC

동기 + Blocking 방식으로 처리된다.

Thread Per Request

Spring MVC로 구성된 서버에 여러 요청이 들어오면 **사용 가능한 스레드 수만큼만 요청을 처리**할 수 있다.

Blocking I/O처리를 할 때 해당 스레드는 아무것도 하지 않고 대기 상태가 된다.

Thread의 대기 시간이 길면 많은 요청을 빠르게 처리할 수 없고 병목 현상이 발생할 수 있다.

Thread Pool을 늘린다면

**Core수 대비 너무 많은 Thread Pool**을 만들게 되면 **Context Switching에 대한 오버헤드**가 발생한다.

결론

Thread의 대기 시간을 줄이기 위해 Reactive Programming이 개발됐다.


Spring Webflux

비동기 + Non-Blocking 방식으로 처리된다.

Event Loop

Node.js처럼 이벤트 루프가 돌기 때문에 Reactive Programming이 가능하다.

특징

**모든 코드가 Non-Blocking 방식**으로 동작해야 의미가 있다.

하나라도 Blocking 방식으로 동작하면 오히려 효율이 더 떨어짐