[스프링] 스프링 WebSocket의 서버 측 구현

서버 측 구현은 클라이언트의 연결을 수락하고, 메시지를 수신하며, 클라이언트에게 메시지를 보내는 것을 말합니다. 스프링 프레임워크는 WebSocketHandler 인터페이스와 @ServerEndpoint 어노테이션을 사용하여 서버 측 WebSocket을 구현할 수 있습니다.

2. WebSocketHandler를 사용한 서버 측 구현

WebSocketHandler를 구현하려면 TextWebSocketHandler 클래스를 확장하고, 필요한 메서드를 구현해야 합니다.

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        // 클라이언트로부터 메시지 수신 시 처리 로직 구현
    }
}

WebSocketHandler를 빈으로 등록하기 위해서는 WebSocketConfigurer를 구현하여 registerWebSocketHandlers() 메서드를 오버라이드 해야 합니다.

import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/myHandler");
    }
}

WebSocketConfig 클래스는 @Configuration 어노테이션을 사용하여 구성 클래스로 지정하고, Spring 애플리케이션이 스캔할 수 있도록 패키지에 등록되어야 합니다.

3. @ServerEndpoint 어노테이션을 사용한 서버 측 구현

@ServerEndpoint 어노테이션을 사용하여 WebSocket을 구현할 수도 있습니다. 먼저, javax.websocket.server.ServerEndpoint를 import하고, 클래스에 어노테이션을 추가하여 WebSocket 엔드포인트를 지정해야 합니다.

import javax.websocket.server.ServerEndpoint;
import javax.websocket.OnOpen;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.Session;

@ServerEndpoint("/myEndpoint")
public class MyWebSocketServer {
    @OnOpen
    public void onOpen(Session session) {
        // 클라이언트 연결 시 처리 로직 구현
    }
    
    @OnClose
    public void onClose(Session session) {
        // 클라이언트 연결 종료 시 처리 로직 구현
    }
    
    @OnMessage
    public void onMessage(String message, Session session) {
        // 클라이언트로부터 메시지 수신 시 처리 로직 구현
    }
}

4. 요약

이 포스트에서는 스프링 프레임워크를 사용하여 서버 측 WebSocket을 구현하는 방법에 대해 살펴보았습니다. WebSocketHandler 인터페이스와 @ServerEndpoint 어노테이션을 사용하여 서버 측 WebSocket을 손쉽게 구현할 수 있습니다.