Socket.IO 사용 시 폴링(Polling) 방식의 오버헤드 주의

Source

  • Evernote/Technote scraps/Socket.IO 사용시 집고 넘어야 할 한 가지 - Firejune.md

Summary

Socket.IO는 웹소켓과 폴링 방식을 모두 지원하지만, 애플리케이션의 통신 빈도에 따라 전송 방식을 신중히 선택해야 한다. 고빈도 실시간 통신(예: 초당 20 프레임)에서 폴링 방식을 사용하면 HTTP 요청으로 인한 막대한 네트워크 오버헤드가 발생하며, 이는 서버에 DDoS 공격과 유사한 부하를 줄 수 있다. 따라서 실시간성이 요구되는 서비스는 웹소켓 전용으로 구성하는 것이 권장되며, 폴링 방식은 저빈도 통신에 한정하여 사용해야 한다.

Key Points

  • Socket.IO는 웹소켓과 폴링을 혼용할 수 있으나, 무분별한 사용 시 클라이언트/서버 양측에 큰 오버헤드를 발생시킴
  • 고빈도 실시간 웹앱에서 폴링 사용은 네트워크 처리량 급증으로 이어지며, 로드 밸런싱으로 해결하기 어려운 수준임
  • 애플리케이션의 통신 빈도(Throughput)에 따라 ‘폴링 포함’ 또는 ‘웹소켓 전용’ 아키텍처로 구분 설계 필요
  • Kaazing 자료 인용: 클라이언트 수 증가 시 폴링 방식의 네트워크 처리량이 선형적으로 증가하여 대역폭 소모가 큼