Socket.js 와 Stomp란?

송예인·2021년 6월 16일
1

Springboot+JPA

목록 보기
4/4

Spring Boot + SockJS + Stomp

websocket은 클라이언트 서버간 양방향 통신이 가능하지만,
1. websocket미지원 웹 브라우저가 있다는 점
2. 웹 브라우저 이외의 클라이언트 지원(서버 입장에서는 클라이언트는 웹 브라우저뿐만이 아님)
이와 같은 이슈가 있다.

js기반으로 웹개발을 하였을때는 Socket.io를 사용하였다. 이번 프로젝트에서는 springframwork에서 WebSocket을 지원하는 SockJS를 사용하려 한다.

Socket

양방향 통신/소통을 할 때 음성/텍스트/이미지 등의 데이터가 전송되는 도착지점.
즉, 데이터(메시지)가 도착하는 지점(point) 들이라고 해석할 수 있다.

SocketJs

WebSocket과 유사한 객체를 제공하는 브라우저 JavaScript라이브러리

  • socketJS를 이용하면 websocket을 지원하지 않는 브라우저 까지 커버가능
  • 서버개발시 스프링 설정에서 일반 webSocket으로 통신할지 SockJS호환으로 통신할지 결정 가능

Stomp

STOMP는 HTTP에서 모델링 되는 Frame 기반 프로토콜

  • 메세징 전송을 효율적으로 하기 위해 탄생한 프로토콜(websocket위에서 동작)
  • 클라이언트와 서버가 전송할 메시지의 유형, 형식, 내용들을 정의하는 메커니즘
  • 텍스트 기반 프로토콜으로 subscriber, sender, broker를 따로 두어 처리를 한다.
  • stomp를 이용하면 채팅방을 여러개로 개설이 가능하다.
  1. 채팅방 생성: pub/sub 구현을 위한 Topic 생성
  2. 채팅방 입장: Topic 구독
  3. 채팅방에서 메세지를 송수신: 해당 Topic으로 메세지를 송신(pub), 메세지를 수신(sub)

[동작과정]
스프링은 메세지 전달 -> 외부 Broker 메세지 전달-> WebSocket으로 연결된 클라이언트

다음은 @EnableWebSocketMessageBroker 어노테이션으로 websocket설정(config)을 완료했을때, message flow이다.

  • /app으로 보냈을 때 Controller의 @Messagemapping으로 받아서 처리해 줄 수 있다.
  • /topic 으로 보냈을 때 동일한 prefix로 subscribe한 유저에게 다이렉트로 메시지 전달 가능.

참고중..ing
https://dev-gorany.tistory.com/235

0개의 댓글