[스프링] 스프링 WebSocket와 STOMP

이번 포스트에서는 스프링WebSocketSTOMP(Simple Text Oriented Messaging Protocol)에 관해 알아보겠습니다.

WebSocket과 STOMP란 무엇인가?

WebSocket은 실시간 양방향 통신을 지원하는 프로토콜로, 클라이언트와 서버 간의 안정적인 연결을 제공합니다. STOMP는 웹 어플리케이션 간의 메시지 전달을 위한 간단한 프로토콜로, WebSocket 위에 구축되어 있습니다.

스프링에서의 WebSocket과 STOMP

스프링WebSocketSTOMP 프로토콜을 지원하는 spring-websocket 모듈을 제공합니다. 이를 사용하여 웹 어플리케이션에서 쉽게 실시간 통신을 구현할 수 있습니다.

아래는 스프링 부트WebSocket을 사용하여 간단한 채팅 어플리케이션을 구현한 예제입니다.

// WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }
}

위의 코드는 WebSocketConfig 클래스로, /chat 엔드포인트를 등록하고, /topic을 주제로 하는 간단한 메시지 브로커를 설정하는 역할을 합니다.

// ChatController.java
@Controller
public class ChatController {
    @MessageMapping("/chat.sendMessage")
    @SendTo("/topic/public")
    public ChatMessage sendMessage(@Payload ChatMessage chatMessage) {
        return chatMessage;
    }

    @MessageMapping("/chat.addUser")
    @SendTo("/topic/public")
    public ChatMessage addUser(@Payload ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) {
        headerAccessor.getSessionAttributes().put("username", chatMessage.getSender());
        return chatMessage;
    }
}

위의 코드는 ChatController 클래스로, 클라이언트로부터 메시지를 받아 다시 클라이언트에게 보내는 메소드를 정의한 것입니다.

마무리

이렇듯 스프링WebSocketSTOMP을 이용하면 복잡한 실시간 통신 기능을 쉽게 구현할 수 있습니다. 더 많은 자세한 내용은 공식 문서를 참고하시기 바랍니다.

위 내용은 스프링 공식 문서 및 강의를 참고하여 작성되었습니다.