Websocket
클라이언트와 서버를 연결하고 실시간으로 통신이 가능하도록 하는 통신 프로토콜
STOMP(Simple Text Oriented Message Protocol)
- STOMP는 WebSocket 프로토콜 위에서 동작하는 메시지 송수신을 효율적으로 처리하기 위해 개발된 프로토콜
- STOMP는 pub/sub 구조로 되어 있어 메시지 송수신 처리 부분이 명확하게 정의되어 있어 메시징 처리를 간편하게 할 수 있음
- 채팅 서버 개발에 용이하고 효율적인 메시징 처리 가능
- 중개 서버를 통해서 클라이언트 간에 비동기적으로 메시지를 전송하기 위한 프로토콜
- 텍스트 기반의 메시지 형식 정의 ⇒ 단순성, 상호운용성
- 특징
- Spring이 기본적으로 제공하는 내장 메시지 브로커가 아닌 외부 메시지 큐(RabbitMQ, ActiveMQ, Kafka 등)를 연동해서 사용
- 연결 주소마다 새로운 Handler를 구현하고 설정해줄 필요 없음
- 클라이언트에서 메시지를 보내면, 해당 메시지는 @MessageMapping에서 처리
- STOMP의 destination 및 message type을 기반으로 메세지를 보호하기 위해 스프링 시큐리티를 사용할 수 있다.
- STOMP의 동작방식
- STOMP는 pub/sub 패턴으로 동작
- pub/sub 패턴은 메시지를 발행하는 곳과 해당 메시지를 구독하는 곳이 분리되어 있으며, 발행된 메시지는 여러 개의 구독자에게 동시에 전달

- Subscribe: 하나의 채널을 클라이언트가 구독
- publish: 하나의 채널을 구독 중인 모든 클라이언트에게 메시지 발행
- STOMP 서버
- 메시지가 전송될 수 있는 여러 목적지(채널)으로 구성
- 각 목적지는 형식이 정해져있지 않은 문자열
- 메시지 전송 전략을 따로 정의하지 않고, 서버와 목적지 별로 달라질 수 있음
- STOMP 클라이언트
- 생산자로서
SEND
프레임을 통해 서버에게 메시지를 보냄
- 소비자로서
SUBSCRIBE
프레임을 사용해 특정 목적지에 메시지를 보내고, MESSAGE
로 프레임을 받음
메시지 브로커
- 메시지 브로커는 애플리케이션, 시스템 및 서비스가 서로 간에 통신하고 정보를 교환할 수 있도록 해주는 SW
- 정규 메시징 프로토콜 간에 메시지를 변환함으로써 수행
- 상호 의존적인 서비스들이 서로 다른 언어나 플랫폼으로 개발된 경우에도 통신이 가능해짐
- 메시징 미들웨어 또는 메시지 지향 미들웨어(MOM) 솔루션 내의 SW 모듈
- 애플리케이션 컴포넌트 간에 데이터 흐름을 처리하는 표준화된 수단을 제공
- 여러 플랫폼에서 개발된 애플리케이션이 내부적으로 통신할 수 있도록 해주는 분산 통신 계층 역할 수행
- 메시지를 검증, 저장, 라우팅하고 이를 적절한 대상에 전달할 수 있음
- 다른 애플리케이션 간의 중개자 역할
- 수신자의 구체적인 상태를 몰라도 송신자가 메시지를 발행할 수 있도록 도와줌
- 메시지 큐를 이용함
- 데이터의 패킷을 순서대로 저장해 소비될 때까지 갖고있음
- 데이터 손실을 방지하고 연결에 장애가 발생해도 시스템이 계속 동작할 수 있도록 도움
- 수신 서비스의 응답을 기다릴 필요가 없이 서비스 간의 비동기 통신이 가능