[프로젝트 회고] WEBSOCKET과 STOMP

Lee·2022년 4월 23일
0

항해99

목록 보기
48/50

WebSocket

HTTP와는 다른 TCP 프로토콜이나 HTTP에서 동작가능하게 디자인 되었고 80, 443포트를 사용한다.

웹소켓 사용이유

프로젝트에서 챌린지에 참가한 사람들끼리 실시간으로 소통할 수 있는 공간을 만들어주기 위해 websocket을 활용한 실시간 채팅 기능 구현을 위해 사용했다.

동작순서

  1. HTTP 요청에 Upgrade 헤더를 포함한 request를 서버에 전송
  2. 위 요청을 받은 서버는 200 대신에 101을 response
  3. 핸드셰이크 성공 후 tcp 소켓은 클라이언트와 열어두고 socket 통신 시작

웹소켓 특징

  • http와 다르게 메시지 내용의 규정을 정의하지 않으므로 직접 구현하거나 구현된 프로토콜을 사용해야 한다.

STOMP

  • 메시지 전송을 효율적으로 하기 위한 프로토콜로, 기본적으로 pub/sub 기반으로 동작
  • 메시지를 전송하고 메시지를 받아 처리하는 부분이 확실히 정해져 있다.
  • STOMP 프로토콜은 WebSocket 위에서 동작하는 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형, 형식, 내용들을 정의하는 매커니즘

STOMP 사용이유

웹소켓이 메시지 내용의 규정을 정의하지 않아 직접 구현해야하는 문제점이 있기 때문에 메시지의 유형, 형식, 내용들이 정의되어있는 STOMP를 사용하여 개발의 편의성을 높이려 하였고 메시지 브로커로 사용한 Redis 또한 pub/sub 방식이기 때문에 사용하였다.

STOMP 장점

  • 메시지 프로토콜을 만들고 메시지 형식을 커스터마이징 할 필요가 없다
  • 외부 메시지 브로커를 이용해, subscription을 관리하고 메시지를 브로드 캐스트 할 수 있다.
  • 메시지를 STOMP의 destination 헤더를 활용해 컨트롤러의 @MethodMapping 메서드로 라우팅 된다.
  • 메시지 헤더에 값을 줄 수 있어 통신 시 인증 처리를 구현하는 것이 가능하다.
profile
발전하고 싶은 백엔드 개발자

0개의 댓글