어려웠다.
그냥 쉽게 말해 TEXT 기반 새로운 프로토콜이다. (http와 생긴게 비슷함)
목적은
메세지 전송을 효율적으로 하기 위한 프로토콜
STOMP ( Simple Text Oriented Messaging Protocol)
우선 어떻게 생긴지 살펴보자.
기본적으로 맨 위에 한줄의 text 가 있다. 이를 COMMAND라 부르고, 현재 COMMAND는 Subscribe이다.
그 후 JSON 같이 키, value 값으로 구성되고,
한칸 띈 다음에
메세지(payload)를 넣을 수 있다.
다음은 클라이언트 B 에서 채팅 메세지를 보내는 예시이다.
기본적으로 Pub/Sub 구조로 되어있어서 ,
메세지를 전송하고 받아 처리하는 부분이 확실히 정해져 있어 개발자 입장에서 명확하게 인지하고 개발할 수 있다.
STOMP: WebSocket 위에서 동작하는 프로토콜로, 클라이언트와 서버가 전송할 메세지의 유형,형식,내용을 정의하는 매커니즘.
STOMP 장점 :
더 다채로운 모델링 가능
1. Messaging Protocol을 만들고 메세지 형식을 커스터마이징 할 필요가 없음.
2. RabbitMQ, ACtive MQ 같은 메세지 브로커를 이용해 구독을 관리하고, 메세지를 브로드캐스팅 할 수 있음.
3. 웹소켓 기반으로 각 연결마다 핸드러를 구현하는 것보다, @Controller된 객체를 이용해 조직적으로 관리할 수 있음.
-> 메세지는 STOMP의 "destination" 헤더를 기반으로 @Controller 객체의 @MethodMapping 메서드로 라우팅됨.
4. STMP의 destination 및 messageType을 기반으로 Spring 시큐리티를 사용할 수 있음.
구독자 관리가 알아서 되므로 웹소켓 세션 관리가 필요 없어집니다. 또한 발송의 구현도 알아서 해결되므로 일일이 클라이언트에게 메시지를 발송하는 구현이 필요 없어집니다.