클라이언트가 일정한 주기를 가지고 계속해서 서버에 "새로운 데이터 있나요?"라고 물어보는 것입니다.
setInterval
과 같은 함수를 사용하여, 클라이언트가 1초, 2초 등 정해진 간격으로 서버에 HTTP 요청을 보냅니다.EventSource
객체를 통해 서버에 연결을 요청합니다.
서버는 이 연결을 끊지 않고 계속 유지하면서, 새로운 데이터가 생길 때마다 클라이언트로 데이터를 스트리밍합니다.
일반적인 HTTP 프로토콜을 기반으로 동작하므로 구현이 비교적 간단합니다.ws://
또는 wss://
)로 업그레이드하여 완전히 새로운 연결을 만듭니다.
이 연결은 한쪽에서 명시적으로 끊기 전까지 계속 유지됩니다.폴링 방식은 클라이언트가 주기적으로 요청을 보내므로, 실제 데이터 변경이 없을 때도불필요한 트래픽을 유발하고 서버에 부담을 줍니다. 또한, 완전한 실시간 통신이 어렵다는 단점이 있습니다. 이러한 문제를 해결하기 위해 서버가 클라이언트에게 데이터를 밀어주는서버 푸시(Server-Push)기술들이 등장했습니다. 대표적으로SSE(Server-Sent Events)는 서버에서 클라이언트로의 단방향 스트리밍에 적합하고,웹소켓(WebSocket)은 양방향 실시간 통신이 필요할 때 사용됩니다.
가장 큰 차이는통신 방향입니다. 웹소켓은 양방향 통신이 가능하지만, SSE는 서버에서 클라이언트로의 단방향 통신만 가능합니다. 만약 프로젝트가실시간 주식 시세 업데이트나 SNS 피드 알림처럼, 클라이언트가 서버로 데이터를 보낼 필요 없이 오직 받기만 하면 되는 경우라면 SSE를 선택하는 것이 더 유리합니다. SSE는 일반적인 HTTP 프로토콜 위에서 동작하여 구현이 더 간단하고 가벼우며, 웹소켓에 비해 서버의 부담이 적기 때문입니다.