[java] 자바 웹소켓의 헤더 관리

웹소켓 통신에서는 HTTP와 마찬가지로 헤더를 사용하여 클라이언트 및 서버 간의 정보 교환에 사용됩니다. 클라이언트 또는 서버에서 웹소켓 연결을 설정할 때 특정 헤더를 포함하거나 특정 헤더를 기반으로 동작을 제어해야 하는 경우가 있습니다. 이를 위해 자바 웹소켓에서는 헤더를 관리하고 조작할 수 있는 다양한 방법을 제공합니다.

1. 클라이언트 측 헤더 관리

웹소켓 클라이언트에서는 ClientEndpointConfig.Configurator 클래스를 확장하여 헤더를 관리할 수 있습니다. 다음은 클라이언트 측 헤더를 설정하는 예제 코드입니다.

import javax.websocket.ClientEndpointConfig;
import javax.websocket.HandshakeResponse;
import java.util.List;
import java.util.Map;

public class CustomConfigurator extends ClientEndpointConfig.Configurator {
    @Override
    public void beforeRequest(Map<String, List<String>> headers) {
        super.beforeRequest(headers);
        headers.put("Authorization", List.of("Bearer token123"));
    }
}

위의 예제에서 beforeRequest 메서드를 재정의하여 웹소켓 연결 요청 시 전송될 헤더를 추가하거나 수정할 수 있습니다.

2. 서버 측 헤더 관리

웹소켓 서버에서는 ServerEndpointConfig.Configurator 클래스를 확장하여 헤더를 관리할 수 있습니다. 다음은 서버 측 헤더를 읽거나 조작하는 예제 코드입니다.

import javax.websocket.Extension;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.ServerEndpointConfig;
import java.util.List;
import java.util.Map;

public class CustomConfigurator extends ServerEndpointConfig.Configurator {
    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        super.modifyHandshake(sec, request, response);
        Map<String, List<String>> headers = request.getHeaders();
        // 헤더 관리 로직 추가
    }
}

위의 예제에서 modifyHandshake 메서드를 재정의하여 웹소켓 연결 시 클라이언트로부터 전송된 헤더를 읽거나 조작할 수 있습니다.

웹소켓 연결 시 헤더를 관리하는 방법에 대해 간략하게 살펴보았습니다. 클라이언트 및 서버 측에서 헤더를 조작하여 특정 동작을 제어하거나 인증 정보를 포함하는 등 다양한 용도로 활용할 수 있습니다.

특정 웹소켓 프레임워크나 라이브러리를 사용하는 경우, 해당 프레임워크나 라이브러리에서 제공하는 헤더 관리 방법을 참고해야 합니다.

참고: