WebFlux란?
비동기 non-blocking 방식으로 메세지 처리가 가능하며, 실시간 서비스에 유용하다.
SSE 프로토콜을 사용하여 HTTP와 다르게 연결성이기 때문에 처음 연결 요청을 보낸 이후부터는 따로 요청을 보내지 않아도 서버로부터 데이터를 계속해서 받을 수 있다.
SSE 프로토콜
Server Sent Event의 약자로 서버에서 이벤트를 보낸다는 뜻이다. 즉, 서버에서 클라이언트로 보내는 단방향 프로토콜이며, 클라이언트의 요청이 없어도 서버에서는 계속 보낼 수 있어야하기 때문에 연결지향이다.
따라서 처음 서버에 SSE 프로토콜을 요청할 때는 HTTP로 클라이언트에서 서버로 요청해서 연결한다.
Netty와 Tomcat의 차이
Webflux를 사용하면 Tomcat이 아닌 Netty를 WAS로 사용하게 되는데, 비동기 이벤트 기반으로 다수의 비동기 요청을 빠르게 처리하는데 용이하다.
반면, Tomcat은 동기 방식으로 안정적이고, 표준화되어 일반적인 경우에 많이 사용된다.
비동기 처리도 가능하지만 하나의 스레드는 하나의 요청만 처리하고, 각 요청 별 스레드를 늘려 동시에 처리하는 것이기 때문에 동시 요청이 많아지면 스레드가 그 만큼 늘어나서 부하도 커지게 된다는 문제가 있다.
즉, Tomcat은 블로킹 방식이고, Netty는 논블로킹 방식이다.
각 WAS의 사용 예시로 파일을 전송하는 경우 Tomcat, 채팅의 경우 Netty가 용이하다.
블로킹과 논-블로킹의 차이
동기 방식은 하나의 작업이 완료될 때까지 다음 작업을 실행하지 않는다.
비동기 블로킹 방식은 작업을 동시에 실행하지만 모든 작업이 완료되기 전까지 작업을 마친 스레드도 다른 작업을 진행할 수 없다.
논블로킹 방식은 작업이 진행되는 동안 스레드나 프로세스가 블로킹되지 않고 다른 작업을 계속할 수 있다.
'개발 > 이론' 카테고리의 다른 글
[Web] Cookie와 Session (0) | 2023.04.18 |
---|
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!