본문 바로가기

TIL

슬기의 TIL - 2023.06.01 (Websocket 웹소켓)

채팅 기능을 시작하기 전, 웹소켓에 대해 공부하기로 했다.

웹소켓이 무엇인지 먼저 알아보고, 샘플 코드를 가지고 동작 방식을 알아봐야겠다.

 


 

웹소켓?

HTTP5 표준 기술로 HTTP 환경에서 클라이언트와 서버 사이에 하나의  TCP 연결을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜이다. 

일반적인 HTTP 통신은 Client가 요청을 보내는 경우에만 Server가 응답을 하는 단방향 통신이다.

웹소켓을 사용하면 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다.

 

+ 웹소켓 이전의 비슷한 기술 (추가 예정)

  • Polling
  • Long Polling
  • Streaming

 

동작방식

연속적인 데이터 전송의 신뢰성을 보장하기 위해 Handshake 과정을 진행한다.

연결을 수립하기 위해 HTTP 요청을 보낸다. upgrade header, connection header를 포함한다.

연결이 된다면 웹소켓 서버는 101 코드를 반환한다.

 

Handshake 과정을 통해 연결이 된다면, 응용프로그램 계층 프로토콜이 HTTP에서 웹소켓으로 업그레이드 된다.

업그레이드 되면 HTTP는 사용되지 않고, 웹소켓 연결이 닫힐 때까지 두 끝점에서 웹소켓 프로토콜을 사용하여 데이터를 주고 받게 된다.

 

웹소켓 연결은 새로고침, 창 닫기 등의 이벤트 발생 시 닫힌다.

 

웹소켓 프로토콜 특징

최초 접속시만 HTTP 웨에서 Handshake하기 때문에 Http header를 사용한다.

웹소켓을 위한 별도의 포트는 없고, 기존 포트를 사용한다.

프레임으로 구성된 메시지라는 논리적 단위로 송수신 한다.

메시지에 포함될 수 있는 교환 가능한 메시지는 텍스트, 바이너리 뿐이다.

 

 

참고

https://developer.mozilla.org/ko/docs/Web/API/WebSockets_API/Writing_WebSocket_servers

https://datatracker.ietf.org/doc/rfc6455/?include_text=1

https://tecoble.techcourse.co.kr/post/2021-08-14-web-socket/

https://velog.io/@codingbotpark/Web-Socket-%EC%9D%B4%EB%9E%80