WebSocket
WebSocket은 인터넷에서 사용되는 통신 프로토콜 중 하나입니다. 웹 서버와 클라이언트 간의 양방향 통신을 지원합니다. 이 프로토콜은 국제 인터넷 표준화 기구(IETF)에서 "RFC 6455"로 정의하고 있습니다.
웹은 처음에는 하이퍼텍스트를 지원하도록 설계되었지만, 이후 더욱 동적인 웹 애플리케이션을 구현하는 방향으로 발전해 왔습니다. 이를 위해 널리 사용되는 기술이 AJAX(Asynchronous JavaScript and XML)입니다. AJAX는 XMLHttpRequest를 사용하여 페이지 전체를 업데이트하는 대신 웹 서버와 세분화된 데이터를 주고받을 수 있게 합니다. 이를 통해 사용자에게 더욱 빠르고 원활한 경험을 제공할 수 있습니다. 하지만 AJAX에서는 모든 데이터 교환이 클라이언트 측에서 시작되어야 하므로, 웹 서버가 클라이언트에 선제적으로 데이터를 푸시하기 어렵습니다.
이러한 한계를 해결하기 위해 AJAX의 확장 기술로 Comet이 개발되었습니다. Comet은 "의도적으로 응답이 지연되는 요청을 생성"하여 웹 서버와의 HTTP 연결을 계속 유지함으로써, 서버가 정보를 푸시하고자 할 때 언제든지 응답을 보낼 수 있도록 합니다. 하지만 Comet은 리소스 사용량이 많다는 문제가 있습니다.
WebSocket은 Comet을 개선한 기술로 개발되었으며 HTML5에서 사용할 수 있습니다. 서버와 클라이언트 간의 연결을 열린 상태로 유지하여 이 연결을 통해 지속적인 양방향 통신을 지원합니다. 현재 주요 브라우저는 WebSocket을 지원합니다.
WebSocket 연결은 HTTP의 "Upgrade" 헤더 필드를 사용하여 기존 연결을 WebSocket으로 업그레이드하는 방식으로 설정됩니다. 웹사이트에서 WebSocket을 지원하지 않는 HTTP 프록시를 사용하는 경우 연결 또는 통신이 실패할 수 있으므로 적절한 설정이 필요합니다.

