[Web] 클라이언트 폴링(Polling), SSE, WebSocket 비교
1. 클라이언트 폴링(Polling)
- 클라이언트가 일정 주기로 서버에 HTTP 요청을 반복적으로 전송하여 데이터를 요청함
- 서버는 요청을 받을 때마다 응답을 반환
- 서버는 클라이언트가 요청하지 않으면 데이터를 전송하지 않음
- 단방향 통신
- 매번 HTTP 요청/응답을 전송하기 때문에 네트워크 오버헤드가 큼
- 데이터가 자주 변경되지 않아도 요청이 계속 발생
- 구현이 간단하며, 모든 브라우저와 서버 환경에서 동작
- 클라이언트 요청마다 새 HTTP 연결이 발생하여, 요청이 많아질수록 서버 부하 증가
- 간단한 구현이 필요할 때, 데이터가 자주 업데이트 되지 않거나 실시간성이 비교적 중요하지 않을 때 적합
2. SSE(Server-Sent-Event)
- 클라이언트가 한 번의 HTTP 요청으로 서버와 지속적으로 연결(HTTP/1.1 Keep-Alive)을 유지
- 서버에서 데이터가 준비되었을 때만 클라이언트로 데이터를 푸시
- 클라이언트는 EventSource API를 사용하여 데이터를 수신
- 단방향 통신
- 서버는 필요한 경우에만 데이터를 전송하여 네트워크 부하 감소
- HTML5 표준이며, 모든 최신 브라우저에서 지원
- 연결이 끊어지면 브라우저가 자동으로 재연결
- 데이터가 준비될 때 즉시 클라이언트로 전송 가능
- 클라이언트 수가 많아지면 서버 리소스 소모가 커질 수 있음
- 데이터가 주기적으로 변경되거나 실시간 업데이트가 필요한 경우 (서버에서 클라이언트로 데이터 푸시만 필요할 때) 적합
3. WebSocket
- TCP 기반 양방향 통신 제공
- 초기에는 HTTP 요청으로 연결(핸드셰이크)한 뒤, 클라이언트와 서버 간 지속적인 연결 유지
- 연결 후에는 HTTP 헤더 없이 데이터만 주고받기 때문에 효율적
- 실시간 데이터 교환이 필요할 때 적합
- 다양한 사용 사례 (채팅, 게임, 실시간 주식 데이터, 알림 등 복잡한 애플리케이션에 적합)
- SSE나 Polling보다 초기 구현이 어려움
- 모든 최신 브라우저에서 지원하지만, 일부 환경에서는 방화벽 문제가 발생할 수 있음
- 연결을 계속 유지하므로 서버에서 메모리, CPU 사용량 증가
- 클라이언트/서버 간 실시간으로 양방향 통신이 필요한 경우 적합