STOMP(Simple Text Oriented Messaging Protocol)

mangez_js·2024년 12월 16일

Study

목록 보기
29/47

STOMP

pub/sub 기반으로 동작하는 메시징 프로토콜
메시지 송신자와 수시잔가 명확하게 분리된 방식으로 메시지를 주고받을 수 있습니다.

Pub/Sub

메시지 발행(Publish)과 구독(Subscribe)으로 구성된다.

  1. 채팅방 생성
  • Topic 생성
    ∘ 채팅방은 Topic으로 정의
    ∘ Topic은 특정 주체(채팅방 이름)를 나타내며, 발행되는 메시지는 해당 Topic을 구독 중인 클라이언트에게 전달
  1. 채팅방 입장
  • Topic 구독(Subscribe)
    ∘ 클라이언트가 특정 Topic을 구독하면, 해당 Topic에서 발생하는 메시지를 지속적으로 수신 할 수 있습니다.
    ∘ 구독은 웹 소켓 연결이 유지되는 동안 활성화되며, "채팅방을 지속적으로 바라보는 것"으로 이해할 수 있습니다.
  1. 채팅방 메시지 송선
  • Topic으로 메시지 발행(Publish)
    ∘ 클라리언트가 메시지를 작성하고 전송하면, 해당 메시지는 특정 Topic에 발행
    ∘ Topic에 발행된 메시지는 이를 구독 중인 모든 클라이언트에게 전달

흐름 예시

  1. 클라이언트 A가 채팅방 /topic/chatRoom1에 입장하고 구독
  2. 클라이언트 B가 /app/chatRoom1으로 메시지를 발행
  3. 클라이언트 A는 메시지를 즉시 수신
  1. Spring Boot 설정(WebSocket + STOMP)
  • @EnableWebSocketMessageBroker를 사용하여 WebSocket 메시징을 활성화하고, STOMP 프로토콜을 설정합니다.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{
	@Override
    public void configureMessageBroker(MessageBrokerRegistry config){
    	config.enableSimpleBroker("/topic"); // 메시지 발송 대기
        config.setApplicationDestinationPrefixes("/app); // 클라이언트 요청의 prefix
    }
    
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry){
    	registry.addEndpoint("/ws").withSockJs(); // WebSocket 엔드포인트 설정
    }
}
  1. Controller(채팅 메시지 처리)
  • 클라리언트의 메시지를 처리하고, 해당 채팅방에 메시지를 발행하는 역할을 합니다.
@Controller
public class ChatController {
	@MessageMapping("/chatRoom1")
    @SendTo("/topic/chatRoom1")
    public ChatMessage sendMessage(ChatMessage message){
    	return message; // 채팅 메시지를 발송
    }
}

0개의 댓글