순서
1. 웹 소켓이란?
2. 웹 소켓의 특징
3. 웹 소켓 이전의 실시간 통신
4. 웹 소켓 동작 방법
5. 웹 소켓 프로토콜의 특징
6. 웹 소켓 특이점
유튜브 [10분 테코톡] 🧲코일의 Web Socket 의 내용
웹 소켓이란 두 프로그램 간의 메시지 교환을 위한 통신 방법 중 하나이다
웹 소켓이 나온 이유는 특징과 연관이 된다
제목의 비슷한 기술의 역할은 위의 특징 처럼 실시간 네트워킹 하면서 양방향 통신하는 것을 말한다
real-time 통신이라 부르기 애매할 정도의 실시간성
많은 양의 메시지가 쏟아지면 polling과 같아진다
클라이언트에서 서버로의 데이터 송신이 어렵다
결과적으로 이 모든 방법들이 HTTP를 통해 통신하기 때문에 Request, Response 둘다 Header가 불필요하게 큼
웹 소켓도 핸드 쉐이킹이 필요하고, Socket프로토콜이 아닌 HTTP 또는 HTTPS 프로토콜을 통해 이루어 진다
웹 소켓 요청
- HTTP 버전은 1.1이상
- 반드시 GET메서드를 사용해야 한다
- Upgrade정보는 서버, 전송, 프로토콜 연결에서 다른 프로토콜로 업그레이드 또는 변경하기 위한 규칙이다
- Sec-Websocket-Key는 클라이언트가 요청하는 여러 서브 프로토콜을 의미한다
웹 소켓 응답
101 Switching Protocols가 Response로 오면 웹소켓이 연결 된 것이다
- Sec-Websocket-Accept는 요청에서의 Key값을 계산한 값으로 신원 인증에 필요한 헤더이다
이렇게 위와같이 핸드 쉐이크가 완료되면 프로토콜이 ws로 변경된다
또는 wss와 같이 데이터 보안을 위해 SSL을 적용한 프로토콜로 변경된다
Message : 여러 frame이 모여서 구성하는 하나의 논리적 메시지 단위
Frame : communication에서 가장 작은 단위의 데이터, 작은 헤더 + payload로 구성
웹소켓 통신에 사용되는 데이터 : UTF8 인코딩
0x00 - 보내고 싶은 데이터 - 0xff 의 구성으로 데이터가 오간다
FIN : 이 프레임이 전체 메시지의 끝인지 나타내는 플래그
Opcode : 이 프레임이 전체 메시지에서 어떻게 사용될지를 나타냄
Length : 이 프레임에 포함된 데이터의 총 길이를 나타내는 단위
RSV1,2,3 : 프로토콜별로 사용할 수도, 안 할 수도 있다(설명생략)
전체적으로 아래와 같은 모습이 나온다
웹소켓은 HTML5이후에 나왔다고 했다, 그러면 HTML5이전의 기술로 구현된 서비스에서는 Socket.io, SockJS 와 같이 HTML5 이전의 기술로 구현된 서비스 에서 웹 소켓처럼 사용할 수 있도록 도와주는 기술이다
그래서 javascript를 이용해 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있고 WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling을 하나의 API로 추상화
즉, 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택하여 사용하는 방식이다
주고 받은 문자열의 해독은 온전히 어플리케이션에 맡긴다
HTTP는 형식을 정해두어서 모두가 약속을 따르기만 하면 해석 할 수 있지만, WebSocket은 형식이 정해져 있지 않아 어플리케이션에서 쉽게 해석하기 힘들다
그래서 WebSocket방식은 sub-protocols를 사용해 주고 받는 메시지의 형태를 약속하는 경우가 많다
STOMP, Simple Text Oriented Message Protocol은 채팅 통신을 하기 위한 형식을 정의한다, HTTP와 유사하게 정의