25.03.31 TIL Websocket Broker Relay

신성훈·2025년 3월 31일
0

TIL

목록 보기
158/162

Spring Boot Websocket Broker Relay

오늘은 Spring Boot에서 Websocket과 Broker Relay를 활용하여 실시간 메시지 전달 시스템을 구축하는 방법에 대해 배웠습니다.


1. Stomp와 SockJS

  • Stomp (Simple Text Oriented Messaging Protocol): 메시지 전달 프로토콜로, Pub/Sub 구조를 통해 메시지를 발행자(Publisher)가 특정 토픽에 발행하고, 구독자(Subscriber)가 해당 토픽을 구독하여 메시지를 받습니다.
  • SockJS: Websocket 연결을 처리하는 라이브러리로, Websocket을 지원하지 않는 브라우저에서도 Websocket과 유사한 기능을 제공합니다.

2. Broker Relay

  • Broker Relay는 메시지를 중계하는 역할을 합니다. Spring에서 SimpleBroker를 사용하거나 외부 메시지 브로커(RabbitMQ 등)를 사용할 수 있습니다.
  • SimpleBroker: Spring 내장 브로커로 메모리에 메시지를 저장하고 처리합니다. 주로 개발 환경에서 사용됩니다.
  • 외부 메시지 브로커: RabbitMQ, Apache Kafka 등 외부 시스템을 사용하여 메시지를 처리할 수 있고 대규모 시스템에서 안정성과 확장성을 제공합니다.

3. Spring Boot에서 Websocket Broker Relay 예시

  1. 의존성 추가

        org.springframework.boot:spring-boot-starter-websocket
    
  2. Websocket 설정:

    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/topic");
            config.setApplicationDestinationPrefixes("/app");
        }
    
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/ws").withSockJS();
        }
    }
  3. 메시지 핸들러

    @Controller
    public class ChatController {
    
        @MessageMapping("/chat.sendMessage")
        @SendTo("/topic/public")
        public String sendMessage(String message) {
            return message;
        }
    }
  4. 클라이언트 구독 및 메시지 전송

  • 클라이언트는 /ws 엔드포인트에 연결하고 /topic/public에 구독합니다.
  • 메시지를 전송하면 /app/chat.sendMessage로 전송됩니다.

4. 마무리

오늘 배운 내용을 통해 Spring Boot에서 Websocket과 Broker Relay를 활용하여 실시간 메시지 전달 시스템을 구축하는 방법을 알게 되었고 외부 메시지 브로커를 사용하면 시스템의 확장성과 안정성을 크게 높일 수 있다는 점이 인상 깊었습니다.
이러한 기술을 실제 프로젝트에 적용하여 실시간 메시지 전달 기능을 구현해 보는 것이 다음 목표입니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글