Post

[Network] Polling, Long Polling, WebSocket, SSE 한 번에 비교하기

[Network] Polling, Long Polling, WebSocket, SSE 한 번에 비교하기

서론

웹 서비스를 사용하다 보면, 아무 동작 없이 시간이 지나서 “세션이 만료되었습니다.” 같은 안내를 본 경험이 한 번쯤 있다. 이런 기능을 구현하려다 보면 서버의 상태 변화를 클라이언트에 어떻게 전달할지 고민하게 된다. 이번 글에서는 Polling, Long Polling, WebSocket, SSE의 차이를 간단히 정리해본다.

Polling 방식

  • 클라이언트가 일정 주기마다 서버에 요청을 보내 상태를 확인하는 방식이다.
  • 구현이 가장 단순한 대신, 요청 주기가 짧아질수록 서버 부하와 네트워크 비용이 커진다.
  • 매번 HTTP 연결을 맺고 끊기 때문에 실시간성이 아주 중요한 서비스에는 비효율적일 수 있다.
  • 대신 주기적으로 갱신되는 데이터를 단순하게 조회해야 할 때는 충분히 유용하다.

(클라이언트) 뭐해? (클라이언트) 뭐해? (클라이언트) 뭐해? (서버) 공부해! (연결 종료)

Long Polling 방식

  • 기본 개념은 Polling과 비슷하지만, 서버가 즉시 응답하지 않고 이벤트가 생길 때까지 요청을 잠시 붙잡아둔다.
  • 일반 Polling보다 불필요한 요청 수를 줄일 수 있다.
  • 다만 다수의 클라이언트에 동시에 이벤트가 발생하면, 다시 많은 연결이 몰리면서 서버 부담이 커질 수 있다.
  • 이 방식은 종종 hanging GET이라고도 불린다.

(클라이언트) 뭐해? … (서버) 아무것도 안 해! (클라이언트) 뭐해? … (서버) 공부해!

웹소켓

  • 웹소켓은 하나의 연결을 유지한 채 양방향 실시간 통신을 가능하게 한다.
  • 최초 연결은 HTTP 요청으로 시작한 뒤 Upgrade 과정을 거쳐 WebSocket 프로토콜로 전환된다.
  • 한 번 연결되면 서버와 클라이언트가 서로 자유롭게 메시지를 주고받을 수 있다.
  • 채팅, 실시간 알림, 협업 도구처럼 즉각적인 상호작용이 필요한 서비스에 잘 맞는다.
  • 다만 WebSocket 연결을 지속적으로 관리할 서버 구성이 추가로 필요하다.

SSE (Server-Sent Events)

  • SSE는 Server-Sent Events의 약자로, 서버에서 클라이언트로 단방향 이벤트를 지속적으로 전송하는 방식이다.
  • server -> client 단방향 통신이므로 알림, 실시간 로그, 상태 업데이트처럼 서버가 밀어주는 시나리오에 잘 맞는다.
  • 재접속 처리 같은 저수준 기능을 브라우저가 어느 정도 자동으로 지원한다.
  • IE는 기본 지원하지 않지만, polyfill을 사용하면 대응할 수 있다.

출처

This post is licensed under CC BY 4.0 by the author.