<aside> <img src="/icons/star-outline_red.svg" alt="/icons/star-outline_red.svg" width="40px" /> GOAL - 여러분들이 이것만 읽고도 바로 프로젝트에서 소켓 활용할 수 있도록 하는게 목표입니다. - 마지막에 우리 프로젝트 구조에서 어떻게 적용되어있는지 설명합니다.(중요)
</aside>
<aside> <img src="/icons/bullseye_purple.svg" alt="/icons/bullseye_purple.svg" width="40px" /> 3줄 요약 (이것만 읽고 바로 코드 뽀개기 가도 댐) - 웹소켓은 처음에 http 프로토콜로 연결하고 그 뒤로는 알아서 양방향 정보전달이 된다.
</aside>
<aside> <img src="/icons/list-indent_green.svg" alt="/icons/list-indent_green.svg" width="40px" /> INDEX
</aside>
HTTP 기반 통신에서 클라이언트가 요청을 보내고 웹서버가 응답을 하는 형태. 응답을 보낸 후 웹 브라우저와의 연결을 끊는다. 양쪽이 동시에 데이터를 보내는 것이 이나기 떄문에 반이중 통신이다.
지금 프로젝트에선 클라이언트가 요청하지 않아도 게임이나 채팅 정보를 보내줄 필요가 있다.
이러한 상황을 타개하기 위해서 웹 소켓은 클라이언트가 접속 요청을 하고 웹 서버가 응답한 후 연결을 끊지 않고 connection을 유지하고 클라이언트의 요청없이 데이터를 전송할 수 있다.
WebSocket이 기존의 TCP Socket과 다른 점은 최초 접속이 일반 HTTP Request를 통해 HandShaking 과정을 통해 이뤄진다는 점이다.
HTTP Request를 그대로 사용하기 때문에 기존의 80, 443 포트로 접속을 하므로 추가 방화벽을 열지 않고도 양방향 통신이 가능하고, HTTP 규격인 CORS 적용이나 인증 등 과정을 기존과 동일하게 가져갈 수 있는 것이 장점이다.
웹 소켓 접속과정은 tcp/ip 접속과 웹소켓을 열기위한 handshake 과정으로 나눠진다. 웹소켓도 tcp/ip 위에서 동작하므로 서버와 클라이언트는 소켓을 사용하기 전에 서로 접속해있어야 하며 접속완료 후 웹소켓 handshake를 시작한다.