[스프링] 스프링 WebSocket 클라이언트 구현

스프링 프레임워크는 웹소켓(WebSocket)을 사용하여 서버와 클라이언트 간 실시간 양방향 통신을 구현할 수 있습니다. 이 기능을 사용하면 서버에서 클라이언트로 데이터를 푸쉬하거나, 클라이언트에서 서버로 데이터를 보낼 수 있습니다. 이를 통해 실시간 채팅, 주식 시세 업데이트 등의 기능을 구현할 수 있습니다.

이 글에서는 스프링 WebSocket 클라이언트를 구현하는 방법에 대해 알아보겠습니다.

스프링 WebSocket 클라이언트 라이브러리 추가

먼저, 스프링에서 제공하는 WebSocket 클라이언트를 사용하기 위해 아래와 같이 의존성을 추가합니다.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>5.3.9</version>
</dependency>

스프링 WebSocket 클라이언트 구현

WebSocket 클라이언트를 구현하기 위해 WebSocketStompClient를 사용합니다.

import org.springframework.messaging.simp.stomp.StompSession;
import org.springframework.messaging.simp.stomp.StompClient;
import org.springframework.messaging.simp.stomp.StompHeaders;
import org.springframework.messaging.simp.stomp.StompSessionHandler;
import org.springframework.messaging.simp.stomp.StompSessionHandlerAdapter;

public class MyWebSocketClient {
    public static void main(String[] args) {
        StompClient stompClient = new WebSocketStompClient(new SockJsClient(
            Arrays.asList(new WebSocketTransport(new StandardWebSocketClient()))));
        stompClient.setMessageConverter(new MappingJackson2MessageConverter());

        StompSessionHandler sessionHandler = new MyStompSessionHandler();
        stompClient.connect("ws://localhost:8080/mywebsocketendpoint", sessionHandler);
    }

    private static class MyStompSessionHandler extends StompSessionHandlerAdapter {
        // handle methods for connect, disconnect, and errors
    }
}

위 코드에서 MyStompSessionHandler 클래스를 통해 웹소켓 세션 이벤트를 처리할 수 있습니다.

스프링 WebSocket 클라이언트 사용

WebSocket 클라이언트를 사용하여 서버와의 연결, 메시지 수신 등의 작업을 수행할 수 있습니다.

stompSession.subscribe("/topic/mytopic", new StompFrameHandler() {
    @Override
    public Type getPayloadType(StompHeaders headers) {
        return MyMessage.class;
    }

    @Override
    public void handleFrame(StompHeaders headers, Object payload) {
        MyMessage message = (MyMessage) payload;
        // handle the received message
    }
});

stompSession.send("/app/mymessageendpoint", myMessage);

위 코드에서 /topic/mytopic으로 구독(subscribe)하고, /app/mymessageendpoint로 메시지를 보내는(send) 예시가 나와 있습니다.

이제 스프링의 WebSocket 클라이언트를 사용하여 서버와 양방향 통신을 구현하는 방법에 대해 알아보았습니다. 따라서 스프링에서 제공하는 WebSocket 기능을 이용하여 다양한 실시간 기능을 구현할 수 있게 되었습니다.

참고 자료