WebSocket
IETF(국제 인터넷 표준화 기구)
- HTTP 프로토콜의 최신화 및 업데이트 작업은 IETF(Internet Engineering Task Force)**가 주도하고 있다.
- IETF 산하 HTTP Working Group은 HTTP의 개선과 표준화를 담당하며, 이를 통해 새로운 버전과 관련 기술들이 정의되고 배포되며, 웹 브라우저는 이러한 HTTP 표준을 기반으로 동작하며, 새로운 표준에 맞춰 업데이트가 되게 된다.
이러한, IETF에서 실시간 통신의 필요성을 느껴 WebSocket 프로토콜을 만들었고, HTTP 프로토콜 기반으로 연결을 설정 하고, 이후에 WebSocket 프로토콜로 전환되어 실시간 양방향 통신을 가능하게 해준다.
HTTP -> WebSocket 전환 과정
1. HTTP 요청 헤더에 Upgrade: websocket과 Connection: Upgrade을 포함해서 WebSocket 연결 요청
GET /chat HTTP/1.1
Host: example.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Origin: http://example.com
2. 서버가 요청을 받아 WebSocket 업그레이드 요청 수락 및 HTTP 101 상태 코드로 응답
- 이때, Upgrade: websocket과 Connection: Upgrade 헤더가 포함되어 응답이 가게 됨.
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: dGhlIHNhbXBsZSBub25jZQ==
3. 이렇게 HandShack가 끝난 뒤 WebSocket 프로토콜로 양방향 데이터 통신을 하게 됨.
연결이 완료되면 더 이상 HTTP는 사용되지 않으며, WebSocket 프로토콜로 통신을 하게 된다.
쉽게 말해, 원래 HTTP 메시지 형태로 보내던 데이터를 WebSocket 메시지 형태로 보내게 되는 것이다.
- 해당 WebSocket 메시지 형태는 WebSocket 프레임이라고 불린다.
서버는 소켓 세션을 생성하여 클라이언트의 정보를 가지고 있게 된다( 즉, 유지하게 됨 (Stateful) )
WebSocket을 사용하는 이유
HTTP로 실시간을 구현하기에는 3 way handshake로 비용이 너무 많이 들기 때문에 양방향을 사용해 실시간을 구현하게 되면 요청과 응답에 대한 비용이 들지 않는 장점이 있다. 단점으로는 연결을 유지해야 하므로, 서버 자원을 많이 소비하게 될 수 있게 된다. 필요한 경우에 적절한 프로토콜로 사용하는 것이 가장 중요하다.
WebSocket 이용없이 AJAX를 통해 HTTP에서도 실시간처럼 구현이 가능하다. 하지만, HTTP는 단방향 통신 프로토콜이며, HTTP 방식으로 요청과 응답을 보내기 위해서는 프로토콜의 규약인 3 way handshake 과정을 진행해야한다. 해당 방식은 매번 요청마다 진행을 하게 된다. 그렇다는건, 실시간 채팅을 구현한다 가정하면 매 채팅요청 마다 3 way handshake를 해야한다는 의미가 되고, 그렇다면 3 way handshake에 대한 추가적인 비용이 지속적으로 든다는 의미가 된다.
이러한 부분 때문에 실시간 채팅을 위해 HTTP에서 업그레이드 된 WebSocket이 나왔으며, WebSocket을 통해 양방향 통신을 하게 되므로 한 번의 3 way handshake를 통해 연결 지속을 보장하게 된다. 추가적인 비용이 들지 않는다는 장점이 있다.
WebSocket 가이드
1. websocket.org / 웹 소켓 배경 지식
https://websocket.org/guides/road-to-websockets/
2. MDN web docs
https://developer.mozilla.org/ko/docs/Web/API/WebSocket
'HTTP' 카테고리의 다른 글
[HTTP] 웹 탄생 배경 (0) | 2024.12.18 |
---|---|
[HTTP] HTTP란? (1) | 2024.12.18 |