백엔드 개발 공부 일지
웹 소켓 프로그래밍 본문
● 웹소켓이란?
HTML5 표준 기술로, HTTP 환경에서 클라이언트와 서버 사이에 하나의 TCP연결을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜이다.
TCP 블로그 : https://velog.io/@seaworld0125/WEB-TCP%EB%9E%80
전이중 통신 : 일방적인 송신 또는 수신만이 가능한 단방향 통신고 ㅏ달리 가정에서의 전화와 같이 양방향 송신과 수신이 가능한것을 말함
실시간 알림, 실시간 채팅 등 실시간이라는 키워드가 들어가는 기능들을 위해서는 대부분 웹소켓 기술이 필요하다.
● 웹소켓의 통신 방식
웹 소켓은 전 이중 통신이므로, 연속적인 데이터 전송의 신뢰성을 보장하기 위해 Handshake 과정을 진행한다.
기존의 다른 TCP 기반의 프로토콜은 TCP layer에서의 Handshake를 통해 연결을 수립하는 반면, 웹소켓은 HTTP 요청 기반으로 Handshake 과정을 거쳐 연결을 수립한다.

● 웹소켓의 탄생 배경
초기 웹의 탄생 목적은 문서 전달과 하이퍼링크를 통한 문서 연결이었다. (HTTP 프로토콜은 이러한 목적에 부합)
그러나 웹에게 동적인 표현과 뛰어난 상호작용이 요구되었고 이로 인해 새로운 기술들이 탄생.
웹 소켓의 등장으로 클라이언트와 서버간의 실시간 통신이 가능하게 되었다.

● 웹소켓의 클라이언트 구현
- 서버 연결
HTML5 가 제공하는 WebSocket 객체를 통해 서버 연결을 수행한다.
일반 통신은 ws, 보안 통신은 wssk 프로토콜을 이용한다.
let ws = new WebSocket("웹 소켓 URL 문자열");
웹 소켓 URL 문자열 : ws://서버주소/웹 소켓 서버 프로그램의 매핑 명
- 데이터 송신
WebSocket 객체의 send() 메서드로 데이터를 서버로 송신한다.
ws.send("메세지")
-데이터 수신
서버에서 전송되는 데이터를 받으려면 message 이벤트를 구현한다.
ws.onmessage = function(e){
e.data로 추출하여 수신받은 메세지 처리
}

● 웹소켓의 서버 구현 - Spring Boot WebSocket
Spring Boot 에서 지원하는 웹 소켓 프로그래밍 기술을 이용하여 서버 프로그램을 구현하기 위해서는 WebSocket을 사용하기 위한 @ServerEndPoint 어노테이션이 선언되어 있는 클래스아 웹 소켓에 관환 환경 설정 파일로 구현할 수 있다.