개발정리

스프링 STOPM -개요 본문

스프링/스프링 프레임워크

스프링 STOPM -개요

coffee. 2024. 2. 12. 13:35

개요

STOMP는 본래 엔터프라이즈 메세지 브로커와 연결되는 스크립팅 언어를 위해 만들어졌습니다.

이것은 보통 사용되는 메세지 패턴의 작은 부분을 보내기 위해 디자인되었습니다.

STOMP는 어떠한 신뢰성 있는 two-way 스트리밍 네트워크에 사용될 수 있습니다.(ex.TCP,웹 소켓)

비록, STOMP는 Text 지향 프로토콜이지만, 메세지 내용은 text와 바이너리 둘다 가능.

 

STOMP는 프레임 기반 프로토콜입니다. (여기서 프레임은 HTTP에서 사용되는 프레임)

 

다음은 STOMP의 프레임 구조입니다.

클라이언트들은 SEND나 SUBSCRIBE 명령을 사용할 수 있습니다.

destination 헤더에는 메세지가 무엇에 대한 것인지 와 누가받을 것인지가 묘사되어 있습니다.

이것은 간단한 pub/sub 매커니즘을 가능케 합니다.

이러한 방식으로 당신은 브로커를 통해 연결된 클라이언트들로 메세지를 보내거나 몇가지 작업을 요청하기 위해 서버로 보낼 수 있습니다.

 

당신이 스프링의 STOMP를 사용할 때, 스프링 웹 소켓이 STOMP 브로커로 작동합니다.

메세지들은 @Controller 메소드나 인 메모리 브로커로 라우팅 됩니다.

당신은 또한 STOMP 브로커를 대신하는 메시지 큐와 함께 작동하도록 설정할 수 있습니다.

이러한 경우에 스프링은 브로커와 TCP연결을 유지하며 메세지를 받아 연결된 클라이언트로 보냅니다.

 

다음의 예시는 서버가 주기적으로 내보내는 주식 시세를 받기위해 구독중인 클라이언트를 나타냅니다.

 

다음의 예시는 서버가 @MessageMapping 메소드를 통해 다룰수 있는 거래요청을 보내는 클라이언트를 보여줍니다.

작동 후에,서버는 클라이언트에게 거래 확인 메세지와 세부사항을 전파할 수 있습니다.

 

STOMP의 스펙에서 destination의 의미는 고의로 불투명하게 남겨 두었습니다.

이것은 어떠한 문자열 도 될 수 있으며,이것의 의미와 문법은 전적으로 STOMP서버가 정의 하는 것에 달렸습니다.

이것은 매우 흔합니다. 하지만 /topic/..은 publish-subscribe(one-to-many)를 의미하고 /queue/..는 point-to-point(one-to-one)을 의미 합니다.

 

STOMP 서버는 모든 구독자에게 메세지를 전파하기 위해 MESSAGE커멘드를 사용할 수 있습니다.

다음의 예제는 구독 클라이언트에게 주식 시세를 보내는 서버를 나타냅니다.

 

서버는 청하지 않은 메세지들을 보낼수 없습니다.모든 메세지들은 특정한 구독한 클라이언트에게 반드시 응답해야합니다.

그리고 서버 메세지의 subscription 헤더는 클라이언트의 id헤더와 일치 하여야 합니다.

 

참조

https://docs.spring.io/spring-framework/reference/web/websocket/stomp/overview.html