웹 소켓
implementation 'org.springframework.boot:spring-boot-starter-websocket'
HTTP 통신은 클라이언트에서 서버로 요청을 보내고, 서버가 요청에 응답하는 방식으로 클라이언트의 요청이 있을 때만 서버가 응답하는 '단방향' 통신
Socket 통신은 두 프로그램이 서로 데이터를 주고 받을 수 있는 양쪽 프로그램 모두에 생성되는 통신 단자를 사용하는 '양방향' 통신, 전이중 방식
채팅이나 주식, 게임처럼 실시간으로 데이터를 주고 받는 경우 Connection을 자주 맺고 끊는 HTTP 통신보다 Socket 통신이 더 적합합니다. 결국 Connection의 유지 여부가 웹소켓(WebSocket) 사용을 결정하는 가장 중요한 요인이 됩니다.
단점으로는 Connection이 유지되는 동안 항상 통신을 하는 것은 아니기 때문에 Connection의 낭비가 발생
최초 접속이 일반 http 요청을 이용한 hanshaking으로 이뤄지고 헤더 정보를 보내게 된다.
⇒ http의 경우 매번 헤더 정보를 보내기 때문에 웹 소켓은 네트워크 비용을 중리 수 있다.
CORS 사용이 가능하다.
handshake 과정이 성공적으로 이루어지면 HTTP → 웹 소켓 프로토콜로 변경하는 프로토콜 스위칭이 이뤄진다. 소켓에는 ws, wss 가 있다.
STOMP ?
TextWebSocketHandler
- 소켓 통신은 기본적으로 서버와 클라이언트간에 1:N 관계
- 한 서버에 여러 클라이언트가 접속할 수 있으므로 서버는 여러 클라이언트가 발송한 메시지를 받아서 처리해줄 Handler가 필요
- 이 Handler를 TextWebSocketHandler로 만든다.
WebSocketConfigurer
- Handler를 이용하여 WebSocket을 활성화 하기위한 Config 파일
@EnableWebSocket
을 선언하여 WebSocket을 활성화- WebSocket에 접속하기 위한 endpoint는 “/ws/chat” 으로 설정하고 도메인이 다른 서버에서도 접속 가능하도록 CORS : setAllowedORigins(”*”) 를 설정에 추가해준다.
WebSocketMessageBrokerConfigurer
- STOMP 를 사용하기 위한 ~
- @Configuration이 선언된 클래스에 추가하면 broker기반의 high-level(STOMP인듯?) WebSocket Messaging을 구현할 수 있다.