[스프링] 스프링 WebSocket의 세션 관리

웹 애플리케이션에서 WebSocket을 사용하면 클라이언트와 서버 간 양방향 통신이 가능합니다. WebSocket에서는 클라이언트가 서버에 연결할 때 세션이 생성되고, 해당 세션을 통해 메시지를 교환합니다. 스프링 프레임워크에서는 스프링 WebSocket을 사용하여 이러한 기능을 구현할 수 있습니다.

세션 관리

스프링 WebSocket은 WebSocketSession을 통해 세션을 관리합니다. 이를 통해 클라이언트와 서버 간의 연결을 추상화하고, 세션 관리를 쉽게 할 수 있습니다.

@ServerEndpoint(value = "/chat")
public class ChatEndpoint {

    @OnOpen
    public void onOpen(Session session) {
        // 웹소켓 클라이언트와의 연결이 열렸을 때 호출되는 메서드
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        // 클라이언트로부터 메시지를 받았을 때 호출되는 메서드
    }

    @OnClose
    public void onClose(Session session) {
        // 웹소켓 클라이언트와의 연결이 닫혔을 때 호출되는 메서드
    }
}

위 코드는 @ServerEndpoint 어노테이션을 사용하여 ChatEndpoint 클래스를 웹소켓 엔드포인트로 지정하고, @OnOpen, @OnMessage, @OnClose 어노테이션을 사용하여 세션의 상태 변화에 따른 메서드를 정의한 것입니다.

세션 속성

WebSocketSession을 통해 세션에 속성(attribute)을 저장하고, 필요에 따라 이를 활용할 수 있습니다.

@ServerEndpoint(value = "/chat")
public class ChatEndpoint {

    @OnOpen
    public void onOpen(Session session) {
        session.getUserProperties().put("username", "guest");
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        String username = (String)session.getUserProperties().get("username");
    }
}

위 코드는 getUserProperties() 메서드를 사용하여 사용자 속성을 세션에 저장하고, 이를 활용하여 클라이언트와 관련된 정보를 유지하는 예시입니다.

결론

스프링 WebSocket을 사용하면 세션을 효과적으로 관리할 수 있으며, WebSocketSession을 통해 세션의 상태 변화를 감지하고 속성을 저장할 수 있습니다.

참고 자료: 스프링 공식 문서