[네트워크] 웹 소켓 연결이 이뤄지는 방식
해당 문서 아카이빙:
https://medium.com/@icehongssii/%EA%B9%9C%EC%B0%8D%ED%95%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EB%93%A4%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%83%81%EC%8B%9D-2-2-http%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9websocket-c49125e1b5a0
웹 소켓 연결이 이뤄지는 방식
웹 소켓은 HTTP 기반의 HTTP의 문제점을 해결하는 것을 목표로 나온 기술이다. 이전의 통신과 달리 이중통신(full-duplex 통신) 즉 수신과 송신을 동시에 처리할 수 있다.
기존의 TCP socket과 다른 점은 웹 소켓은 최초 접속이 일반 http 요청을 이용한 handshaking으로 이루어진다는 점이다. 또 TCP socket에서는 바이트 스트림을 사용하지만 웹 소켓을 통해 전달되는 텍스트들은 UTF-8 포맷을 가진다.
- Stateful: 클라이언트와 한번 연결이 되면 계속 같은 라인을 사용하여 통신하기 때문에 HTTP 사용시 필요 없는 HTTPdhk TCP 연결 트래픽을 사용하지 않아도 된다.(웹 소켓은 HTTP와 달리 최초 첩속을 제외하고 헤더 정보를 보내지 않기에 네트워크 비용측면에서 이득)
- HTTP 요청을 그대로 사용하기에 기존 80(http포트), 443(https포트) 포트로 접속하기 때문에 추가 방화벽을 열지 않아도 되고 http의 규격인 cors 적용이나 인증등의 과정을 기존과 동일하게 가져갈 수 있다.
작동원리
서버와 클라이언트간의 웹 소켓 연결은 HTTP 프로토콜을 통해 이루어진다. HANDSHAKE과정이 성공적으로 끝나면 HTTP를 웹소켓 프로토콜로 바꾸는 protocol switching 과정이 진행된다. 이후 웹소켓을 위한 새로운 소켓이 만들어지고 이 소켓을 이용해 통신한다.
웹소켓 주소는 ws나 wss로 시작하는데 ws는 일반 웹소켓이고 wss는 SSL이적용된 웹소켓이다(Https)
참조:
WebSocket을 이용하여 클라이언트 애플리케이션 작성하기 - 웹 소켓 | MDN
https://developer.mozilla.org/ko/docs/WebSockets/Writing_WebSocket_client_applications
websocket
https://www.joinc.co.kr/w/man/12/websocket#fid_2
시나몬 브레드 | webSocket 으로 개발하기 전에 알고 있어야 할 것들
https://adrenal.tistory.com/20