본문 바로가기
강좌/10분 테코톡

웹소켓 & 스프링

by lms0806 2021. 12. 26.
728x90
반응형

https://youtu.be/rvss-_t6gzg

우아한 Tech의 "아론의 웹소켓&스프링"을 들으면서 정리한 내용입니다.

 

#웹소켓이란

전이중 통신을 보장해서 실시간성을 보장함

 

#HTTP

HTTP에서도 실시간성을 보장하는 기법이 존재함

웹소켓이 사용가능한 환경이면 HTTP보다 웹소켓을 이용하는 것을 추천함

 

#HTTP VS 웹소켓

HTTP : 비연결성, 매번 연결 맺고 끊는 과정의 비용이 발생, (요청 - 응답) 구조

ex) 탁구

웹소켓 : 연결 지향, 한번 연결 맺은 뒤 유지함, 양방향 통신

ex) 채팅

 

#웹소켓 지원 환경

IE, 사파리, 파이어폭스의 구버전에서는 사용 불가

웹 소켓을 지원하지 않는 환경에서는 SockJs, Socket.io를 통해 웹소켓을 사용하는거 같은 기능을 제공함

웹소켓을 지원하지 않는 버전이면 Streaming, Streaming도 안되면 Polling을 사용하여 지원함

 

#Spring-WebSocket

WebSocketConfig 클래스에 @EnableWebSocket 어노테이션과 WebSocketConfigurer을 implements하고, 함수를 만들어 주면 된다.

ex)

SocketTextHandler() : 직접 구현한 웹소켓 핸들러

/user : 웹소켓 연결 주소

 

WebSocketHandler

ex)

필요에 따라 extWebSocketHandler or BinaryWebSocketHandler를 사용하여 extends를 해줄 수 있음.

WebSocketSession은 http세션과는 다름, 웹소켓이 연결될때 생기는 연결정보를 담고 있는 객체

연결이 될 때 웹소켓 세션을 추가하고 연결이 끊어질 때 제거

 

cors에서 .withSockJS()를 추가하여 사용할 수 있음

 

#STOMP

Simple Text Oriented Messaging Protocol

메시지 브로커를 활용하여 쉽게 메시지를 주고 받을 수 있는 프로토콜

웹소켓 위에 얹어 함께 사용할 수 있는 하위 프로토콜

프레임 단위의 프로토콜 : 커맨드, 헤더, 바디

 

발신자가 수신자에게 바로 보내고자 하는 내용을 보내는게 가능하지만, 특정 가공을 거쳐 브로커를 통해 내용을 보내는것도 가능하다.

 

#Spring - WebSocketMessageBorker

기존 WebSocket의 소스에 특정 부분만 추가해주면됨

enableSimpleBroker() : 내장 브로커 사용, prefix(queue(1 :1), topic(1 : M))가 붙은 메시지를 발행 시 브로커가 처리

setApplicationDestinationPrefixes() : 메시지 핸들러로 라우팅 되는 Prefix

 

컨트롤러에 어노테이션을 추가하는것만으로 사용이 가능하다.

MessageMapping을 할 경우 /app의 핸들러를 거치게 됨

SendTo : 핸들러에서 처리를 마친 후 반환 값을 해당 주소의 경로로 메시지를 보냄

또한 웹소켓과는 다르게 Handler를 설정해줄 필요가 없음

addEndpoint() : 웹소켓 연결 주소, 이전처럼 Handler 하나하나 추가할 필요 없음

 

#STOMP를 Spring에서 사용하는 장점

하위 프로토콜 혹은 컨벤션을 정의할 필요가 없다.

연결 주소마다 새로 핸들러를 구현하고 설정해줄 필요가 없다

외부 Messaging Queue를 사용할 수 있다

Spring Security를 사용할 수 있다.

728x90
반응형

'강좌 > 10분 테코톡' 카테고리의 다른 글

Spring VS Spring boot  (0) 2022.01.01
RestFul 이란?  (0) 2021.12.27

댓글