프로젝트를 진행하면서 비동기적인? 통신을 구현하고 있는데, 기존에 mvc 패턴만 쓰다가 새롭게 webflux를 공부해서 적용해봤다.
이번 시간엔 둘의 차이점에 대해서 설명하고자 한다👴
먼저, 동기/비동기, 블로킹/논블로킹 방식에 대해서 정리하고 진행하겠다.
먼저 그림으로 간단하게 표현하면 다음과 같다!

동기는 말그대로 동시에 일어날 수 있다는 뜻인데,
호출과 응답이 동시에 이루어지는 것을 의미한다.
그래서 함수를 호출한 곳에서 바로 응답을 받는다.
비동기는 동기와 다르게
호출과 응답이 동시에 이루어지지 않는 것을 의미한다.
호출시점과 처리결과에 대한 응답시점이 같지 않아서,
함수를 호출했을 때 그에 대한 처리 결과를 추후에 처리가 완료된 불특정 시점에 전달받는다.
블로킹은 함수를
call했을 때 응답을 받기 위해 멈춰있는 상태를 의미한다.
그래서함수가 종료되어야 다음 줄을 실행한다.
논블로킹은 함수를
call했을 때 결과를 받기 위해 멈춰있지 않고 바로 다음 줄을 실행하는 상태를 의미한다.
일단, 우리가 아는 Spring MVC(SpringBoot)는 동기적으로 동작하고, Spring Webflux는 비동기적으로 동작한다. 라고만 알고 넘어가보자.
요청마다 쓰레드를 계속 생성한다. -> 쓰레드풀에 할당한다.
쓰레드풀에 인해 요청이 들어오면, 그 요청을 큐에 쌓아두고, 쓰레드풀에 미리 만들어둔 쓰레드를 하나씩 가져와서 사용하는 방식이다.
하지만, 엄청나게 많은 사용자가 동시에 요청을 보낼 경우 풀사이즈를 초과해서 큐에 요청이 계속 쌓이게 되는 현상이 발생한다.
