Polling(폴링), Long Polling(롱 폴링), SSE(Server Sent Events)
폴링, 롱 폴링, SSE 방식이 필요한 이유
폴링, 롱 폴링, SSE 등의 방식이 필요한 이유는 HTTP 프로토콜의 주요 특징인 비연결성 때문이다.
실시간 알림 기능은 서버가 클라이언트에게 데이터를 보내면 클라이언트가 이를 인지하여
알림을 띄워야하는 구조인데 HTTP 프로토콜인 웹에서도 실시간 기능이 필요했다.
이러한 실시간 처리가 필요할때 사용하는게 폴링, 롱 폴링, SSE 등의 방식이다.
Polling 이란?
클라이언트가 주기적으로 서버로 요청을 보내는 방식이다.
일정시간마다 클라이언트가 서버로 요청을 보내 데이터 갱신이 있는지 확인하고, 갱신 시 응답을 받는 방식이다.
폴링 방식의 구현은 간단하지만 클라이언트가 계속해서 서버로 요청을 하기 때문에 리소스 낭비가 심하다.
보낼 데이터가 없지만 계속해서 서버로 요청을 하기 때문에 서버에 부담이 된다.
간단한 어플리케이션에서 요청하는데 부담이 크지 않고 요청 주기가 길어 실시간성이 중요하지 않다면
해당 방법이 적절하다.
Long Polling 이란?
폴링 방식과 차이점은 이름 그대로 긴 폴링처럼 요청시간의 유지시간이 조금 더 길게 갖는다는 점이다.
요청을 보내고 요청이 유지되는 시간동안 서버에서 변경이 일어날때 까지 대기하는 방법이다.
긴 유지시간을 갖는 요청을 보내고 이 유지시간동안 이벤트가 발생하면 해당 요청에 이벤트를 보낸다.
이렇게 된다면 요청 유지시간동안 실시간으로 감지할 수 있게 된다.
하지만 유지시간이 짦으면 폴링 방식과 차이점이 크지 않으며, 지속적으로 연결되어 있기 때문에
여러 클라이언트에게 동시에 이벤트가 발생하면 순간적 부담이 크다.
롱 폴링 방식은 실시간 전달이 중요하고 이벤트가 빈번하게 일어나지 않을때 적합하다.
SSE (Server Sent Events) 란?
SSE 방식은 웹소켓과 달리 클라이언트가 서버로부터 데이터만 받을 수 있는 방식이다.
SSE 는 별도의 프로토콜을 사용하지 않고 HTTP 프로토콜만으로 사용할 수 있기 때문에 구현이 용이하다.
접속에 문제가 있을 시 자동으로 재연결을 시도하지만, 클라이언트가 Close 했을 때 서버에서 감지하기
어렵다.