[java] 자바 웹소켓의 클라이언트 구현 방법

이 기술 블로그에서는 자바를 사용하여 웹소켓 클라이언트를 구현하는 방법에 대해 알아보겠습니다.

1. 웹소켓 클라이언트 라이브러리 추가

먼저, 웹소켓 클라이언트를 구현하기 위해 Maven 또는 Gradle과 같은 의존성 관리 도구를 사용하여 웹소켓 클라이언트 라이브러리를 프로젝트에 추가해야 합니다.

Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다.

<dependencies>
  <dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-client-api</artifactId>
    <version>1.1</version>
  </dependency>
  <dependency>
    <groupId>org.glassfish.tyrus</groupId>
    <artifactId>tyrus-client</artifactId>
    <version>1.13</version>
  </dependency>
</dependencies>

Gradle을 사용하는 경우 build.gradle 파일에 다음 의존성을 추가합니다.

dependencies {
    implementation 'javax.websocket:javax.websocket-client-api:1.1'
    implementation 'org.glassfish.tyrus:tyrus-client:1.13'
}

2. 클라이언트 구현

웹소켓 클라이언트를 구현하려면 ClientEndpoint 어노테이션이 지정된 클래스를 작성해야 합니다. 이 클래스는 웹소켓 서버로부터 메시지를 수신하고 보낼 수 있는 메서드를 포함해야 합니다.

import javax.websocket.*;
import java.net.URI;

@ClientEndpoint
public class WebSocketClient {

    @OnOpen
    public void onOpen(Session session) {
        // 연결이 열릴 때 실행되는 로직
    }

    @OnMessage
    public void onMessage(String message) {
        // 메시지를 수신했을 때 실행되는 로직
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        // 연결이 닫힐 때 실행되는 로직
    }

    public void sendMessage(Session session, String message) {
        session.getAsyncRemote().sendText(message);
    }

}

위의 예시에서 @OnOpen, @OnMessage, 그리고 @OnClose 어노테이션은 각각 웹소켓 연결이 열렸을 때, 메시지를 수신했을 때, 그리고 연결이 닫혔을 때 호출됩니다.

3. 클라이언트 연결 및 메시지 송수신

웹소켓 클라이언트를 사용하여 서버에 연결하고 메시지를 주고받으려면 다음과 같이 작성합니다.

import javax.websocket.*;

public class Main {

    public static void main(String[] args) {
        String serverUri = "ws://example.com/websocket-endpoint";
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        WebSocketClient client = new WebSocketClient();
        
        try {
            Session session = container.connectToServer(client, new URI(serverUri));
            client.sendMessage(session, "Hello, server!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 예시에서 ContainerProvider.getWebSocketContainer()를 사용하여 WebSocketContainer 인스턴스를 얻어온 후, container.connectToServer()로 웹소켓 서버에 연결합니다.

결론

이제 여러분은 자바를 사용하여 웹소켓 클라이언트를 구현하는 방법에 대해 배웠습니다. 추가적으로 클라이언트가 서버에 메시지를 보내고 수신하는 방법을 알게 되었습니다.

원하는 웹소켓 클라이언트를 구현하기 위해 의존성을 추가하고, 클라이언트를 작성하고, 연결 및 메시지 송수신하는 방법을 익히시면 됩니다.