WebSocket

목적: WebSocket의 이해.

번역(翻訳): 방석구

뱀 앞다리:
Wikipedia의 Comet, WebSocket, 메세지 지향 미들웨어(Message-oriented middleware), 푸시 기법(Push technology) 그리고 이하 관련 문서 몇 개의 오역으로 WebSocket 개념을 개괄한 후 상세화 시키기.

 WebSocket은 컴퓨터 네트워크용 통신 규약의 하나이다. 인터넷의 표준화 단체인 W3C(World Wide Web Consortium)와 IETF가 웹서버(Web server)와 웹브라우저(Web browser) 간의 통신을 위한 규정을 정의한 쌍방향통신(Duplex)용 기술 규약으로써, API는 W3C가 WebSocket 프로토콜(Protocol)은 IETF가 책정을 맡고 있다.

개요
 이른바 Ajax 어플리케이션에서는 서버와 클라이언트간의 데이터 송수신이 빈번하게 발생하나, 종래의 XMLHttpRequest는 어디까지나 브라우저 측에서 서버로 데이터의 송신 요청을 위한 수단으로 사용되었던 것에 반해, 서버 측에서 클라이언트로 데이터를 push 하는 것은 어려웠다. 한편 Comet는 서버 측에서 push가 가능하지만, 많은 장치에서 유사적 형태의 쌍방향통신을 하기 때문에 통신이 발생하는 것만으로도 TCP 핸드 셰이크(Handshake) 절차를 반복할 필요가 있으며, HTTP 커넥션을 장시간 점유하기 때문에 그사이 동일 서버에서 접속한 타 어플리케이션의 동작에 영향을 받을 가능성이 있는 등, 별도의 문제가 발생한다(XMLHttpRequest# Long polling를 참조).

 이것에 대해 WebSocket은 서버와 클라이언트가 한번 커넥션을 맺은 후에는 필요한 통신을 전부 그 커넥션상의 전용 프로토콜를 사용하여 이루어진다. 종래 방법과 비교하면 경량 프로토콜을 사용하기 때문에 통신 손실을 감소시키며, 하나의 커넥션으로 모든 데이터의 송수신을 하기 때문에 동일한 서버에서 접속하는 타 어플리케이션에 대한 영향이 적어지는 이점이 있다.

 본래는 HTML5 스펙의 일부로 책정이 진행되었으나, 후에 HTML5로부터 분리되어, 현재는 독립된 프로토콜로써 규약 책정 작업이 진행되고 있다.

프로토콜(Protocol)
WebSocket의 접속을 확립하기 위하여 클라이언트 측이 먼저 핸드 셰이크(Handshake) 요구를 보내면, 서버 측은 핸드 셰이크 응답을 회신한다. 다음이 그 예이다. 웹브라우저가 다음과 같은 요구를 서버 측에 전송한다.

GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
Origin: http: //example.com

^n:ds[4U

서버 측은 다음과 같은 응답을 회신한다.

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http: //example.com
Sec-WebSocket-Location: ws: //example.com/demo
Sec-WebSocket-Protocol: sample

8jKS'y:G*Co,Wxa-

 핸드 셰이크(Handshake)는 HTTP의 상에 존재하지만 실제로는 그렇지 않다. 서버 측은 최초 HTTP의 요청으로 해석한 다음 WebSocket으로 전환한다.

URL Schema
 WebSocket 프로토콜의 사양서는 ws:와 wss:라는 2개의 새로운 URI 스키마를 정의하고 있다.

– 핸드 셰이크(Handshake)
핸드 셰이크(Handshake)는 정보기술(Information technology)이나 전기통신(Telecommunication) 분야에서 두 지점간의 통신로를 확립한 후, 본격적인 통신을 하기 전에 파라미터를 확인하는 것을 일컫는다. 즉, 사전 교환을 자동적으로 수행한 후, 통상의 정보를 전송한다.

컴퓨터가 외부의 기기와 통신할 경우에는 통신의 규칙을 확립하는 수단으로써 보통 핸드 셰이크(Handshake)를 행한다. 예컨대, 모뎀이나 프린터의 경우, 컴퓨터는 그들 기기와 핸드 셰이크에 의한 커넥션을 확립할 필요가 있다.
– Wikipedia 발췌

참고 자료
ハンドシェイク

원문 출처
WebSocket

Leave a Reply