https://github.com/f-lab-clone/ticketing-backend/issues/72

image.png

대기열이 필요한 이유

비동기+논블록킹을 지원하는 Spring webflux Framework를 사용하지않는한

서블릿 컨테이너는 thread-per-request 모델을 따른다

즉 한 쓰레드당 한개의 요청 밖에 처리하지못한다. 그렇게 되면 I/O 작업이 일어날때

쓰레드는 실질적으로 하고있는것이 없지만 다른요청을 처리하지못한다. 이것이 블로킹이다.

그렇게 되면 소스가 부족한 서버(thread를 많이 만들 수 없는)에서

처리할 수 있는 동시 처리량은 매우 제한적일 것이다.

쓰레드를 많이 만든다하더라도 컨텍스트 스위칭 문제가 생겨서 성능에 많은 부담을 주게된다.

이를 해결하기 위해 비동기 + 논블로킹을 지원하는 spring webflux framework를 이용해여

리엑티브 프로그래밍기법으로 해결할수있다

이는 적은리소스 만으로도 많은 트래픽을 해결할수있는 장점이있다.

서치를 해보니까

“모든 애플리케이션에 적합한 것은 아니며, 특정한 사용 사례에 적합하다”고 하는데

우리처럼 대용량 트래픽처리해야하는 상황이 특정한 사용사례에 포함 될거같다.