웹 소켓
- 두 프로그램 간의 메시지를 교환하기 위한 통신 방법 중 하나
- W3C와 IETF에 의해 자리잡은 표준 프로토콜 중 하나
- 현재 인터넷 환경(HTML5)에서 많이 사용된다.
- 웹 소켓을 지원하는 브라우저의 경우 웹 소켓 프로토콜을 지원
특징
1. 양방향 통신(Full-Duplex)
- 데이터 송수신을 동시에 처리할 수 있는 통신 방법
- 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다.
- 통상적인 Http 통신은 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신
2. 실시간 네트워킹(Real-Time Networking)
- 웹 환경에서 연속된 데이터를 빠르게 노출
- ex. 채팅, 주식, 비디오 데이터
- 여러 단말기에 빠르게 데이터를 교환
웹 소켓 이전의 비슷한 기술
- Polling : 서버로 일정 주기 요청 송신. 불필요한 Request와 connection 생성. Real-time 통신이라고 부르기 애매할 정도의 실시간성
- Long polling : 서버에 요청을 보내고 이벤트가 생겨 응답을 받을 때까지 연결을 종료하지 않음. 응답을 받으면 끊고 다시 재요청. 많은 양의 메시지가 쏟아질 경우 polling과 같다.
- Streaming : 서버에 요청을 보내고 끊기지 않은 연결 상태에서 끊임없이 데이터 수신. 클라이언트에서 서버로의 데이터 송신이 어려움
===> 모든 방법이 HTTP를 통해 통신하기 때문에 Request, Response 둘 다 Header가 불필요하게 크다.
웹 소켓 동작 방법
- 핸드 쉐이킹이 완료되면 프로토콜이 http, https에서 ws, wss(데이터 보안을 위해서 SSL을 적용한 프로토콜)로 변경
- Message : 여러 frame(communication에서 가장 작은 단위의 데이터. 작은 헤더 + payload로 구성)이 모여서 구성하는 하나의 논리적 메시지 단위
- 웹 소켓 통신에 사용되는 데이터는 UTF-8 인코딩
- 데이터 양방향 전송이 완료되면 Close frame을 주고 받으며 연결 종료
웹 소켓 프로토콜 특징
- 최초 접속에서만 http 프로토콜 위에서 핸드쉐이킹을 하기 때문에 http header를 사용한다.
- 웹 소켓을 위한 별도의 포트는 없으며, 기존 포트(http-80, https-443)을 사용
- 프레임으로 구성된 메시지라는 논리적 단위로 송수신
- 메시지에 포함될 수 있는 교환 가능한 메시지는 텍스트와 바이너리
웹 소켓의 한계
1. Socket.io, SockJS
- HTML5 이전의 기술로 구현된 서비스에서 웹 소켓"처럼" 사용할 수 있도록 도와주는 기술
- 자바스크립트를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현
- WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling을 하나의 API로 추상화
===> 즉, 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택하여 사용하는 방식
2. STOMP
- 웹 소켓은 문자열들을 주고 받을 수 있게 해줄 뿐 그 이상의 일은 하지 않는다.
- 주고 받은 문자열의 해독은 온전히 어플리케이션에 맡긴다.
- HTTP는 형식을 정해두었기 때문에 모두가 약속을 따르기만 하면 해석할 수 있다. 그러나 웹 소켓은 형식이 정해져 있지 않기 때문에 어플리케이션에서 쉽게 해석하기 힘들다. 때문에 웹 소켓 방식은 sub-protocols를 사용해서 주고 받는 메시지의 형태를 약속하는 경우가 많다.
- STOMP(Simple Text Oriented Message Protocol) : 채팅 통신을 하기 위한 형식을 정의. HTTP와 유사하게 간단히 정의되어 해석하기 편한 프로토콜. 일반적으로 웹 소켓 위에서 사용
'공부 기록 > 영상 후기' 카테고리의 다른 글
[10분 테코톡] 하루의 실행 컨텍스트 (0) | 2023.04.09 |
---|---|
[10분 테코톡] 쿨라임의 HTTP/1.1, HTTP/2, 그리고 QUIC (1) | 2023.04.09 |
[10분 테코톡] 디디의 Redis (0) | 2023.04.09 |
[우아콘2020] 수십억건에서 QUERYDSL 사용하기 (0) | 2023.04.05 |
MAC주소, IP주소, Port번호가 식별하는 것 (0) | 2023.04.05 |