[스프링] 스프링 WebSocket와 STOMP
이번 포스트에서는 스프링의 WebSocket 및 STOMP(Simple Text Oriented Messaging Protocol)에 관해 알아보겠습니다.
WebSocket과 STOMP란 무엇인가?
WebSocket은 실시간 양방향 통신을 지원하는 프로토콜로, 클라이언트와 서버 간의 안정적인 연결을 제공합니다. STOMP는 웹 어플리케이션 간의 메시지 전달을 위한 간단한 프로토콜로, WebSocket 위에 구축되어 있습니다.
스프링에서의 WebSocket과 STOMP
스프링은 WebSocket 및 STOMP 프로토콜을 지원하는 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 클래스로, 클라이언트로부터 메시지를 받아 다시 클라이언트에게 보내는 메소드를 정의한 것입니다.
마무리
이렇듯 스프링의 WebSocket과 STOMP을 이용하면 복잡한 실시간 통신 기능을 쉽게 구현할 수 있습니다. 더 많은 자세한 내용은 공식 문서를 참고하시기 바랍니다.
위 내용은 스프링 공식 문서 및 강의를 참고하여 작성되었습니다.