webSocket(stomp)이란?

bicco2·2022년 11월 20일
0

웹소켓(WebSocket)이란 ?

원래 클라이언트와 서버의 관계는 stateless이다.

즉, request ⇒ response 관계를 뜻한다.

웹소켓은?

  • statefull protocol이다.
  • 즉, 요청 ⇒ 반응 이 아니라 양방향 통신(connection)을 계속 유지하는 것을 말한다. (여기서 있는 connection은 나중에 꼭 닫아줘야한다.)
  • 최초 접속이 http request를 통해 handshakeing 과정을 통해 이뤄진다.
  • client : 랜덤 키 값 전송 , server : 받은 키 값으로 토큰 생성을 통해 양방향 통신

보통 db 구조를 보면

채팅방 : roomid
유저 : userid
채팅메세지 : userid, roomid
이런 식으로 어떤 유저가 어떤 채팅에 메세지를 보내고 있는지 알 수 있다.

웹소켓 프로토콜

socket.io :

  • 실시간 웹 애플리케이션을위한 JavaScript 라이브러리
  • 즉, javascript에서 WebSocket을 더 쉽게 사용할 수 있게 개발된 라이브러리
  • 구버전 사용자들이 websocket으로 작성된 페이지를 볼 수 없어 http를 통해 흉내내는 식으로 사용자에게 제공한다.

이거는 node.js에서 주로 사용한다.

socket.js :

  • 우선 WebSocket을 시도하고, upgrade 헤더요청에 실패할 경우 HTTP Streaming, Long-Polling 같은 HTTP 기반의 다른 기술로 전환하는 fallback 기술로, Websocket interaction을 에뮬레이트하고 같은 api를 노출하는 방식
  • 서버 개발시 일반 websoket으로 통신할지 SoketJS 호환으로 통신할지 결정 가능
  • 브라우저가 websocket을 지원하지 않을 경우 http형식으로 돌리기 위해 사용하는 듯 하다.

stomp(Streaming Text Oriented Message Protocol) :

  • 토픽 구독방식
  • pub/sub (Subscriber와 Publisher)구조로 되어있으며 브로커가 메시지를 받아 구독자에게 전송함
  • frame 기반 프로토콜
  • 가벼움
  • v5부터 바이너리 파일도 가능하다 .

connection 설정

→ 메세지 전송 전 SubscriberPublisher지정

Subscribe를 하면 해당 URL로 나에게 메세지를 보낼 수 있는 경로가 생긴다(수신)

Publisher를 하면 Publishe한 URL로 메세지가 이동한다(전송)

즉, 브로커로 client를 생성하고 sub/pub를 이용해 받고 전송하고를 진행한다.

spring에서 주로 사용한다.

– app: WebSocket으로의 앱으로 접속을 위한 포인트가 되며 메시지를 실제로 보낼 때 사용된다

– topic: 일 대 다수의 커넥션에서 메시지를 전송한다

– queue: 일 대 일의 커넥션에서 메시지를 전송한다

– user: 메시지를 보내기 위한 사용자를 특정한다

참고 자료

https://velog.io/@cksal5911/WebSoket-stompJSReact-채팅-1

profile
FE 개발자다?

0개의 댓글