[java] Spring Framework를 사용하여 웹 소켓 통신 구현하기

웹 소켓(WebSocket)은 실시간 양방향 통신을 제공하는 프로토콜입니다. 웹 소켓을 사용하면 서버와 클라이언트 간에 실시간으로 데이터를 주고받을 수 있습니다. 이번 포스트에서는 Java와 Spring Framework를 사용하여 웹 소켓 통신을 구현하는 방법에 대해 알아보겠습니다.

1. Spring Framework 설정

먼저, Spring Framework를 사용하기 위해 Maven 또는 Gradle을 사용하여 프로젝트를 설정합니다. Spring Framework의 WebSocket 모듈을 의존성으로 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다.

<dependencies>
    ...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    ...
</dependencies>

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

dependencies {
    ...
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    ...
}

2. WebSocket 엔드포인트 생성

웹 소켓 통신을 처리할 엔드포인트를 생성해야 합니다. Spring Framework에서는 @Controller 어노테이션을 이용하여 엔드포인트를 만들 수 있습니다. 예를 들어, /chat 엔드포인트를 생성하기 위해서는 다음과 같이 코드를 작성합니다.

@Controller
public class ChatController {

    @MessageMapping("/chat")
    @SendTo("/topic/messages")
    public Message sendMessage(Message message) {
        return message;
    }
}

위의 코드에서 @MessageMapping("/chat") 어노테이션은 클라이언트에서 /chat 엔드포인트로 메시지를 보낼 때 이 메서드가 호출된다는 것을 의미합니다. 그리고 @SendTo("/topic/messages") 어노테이션은 메시지를 전달할 대상을 명시해 줍니다. 이 경우 /topic/messages라는 topic으로 메시지를 전송하게 됩니다.

3. WebSocket 구성

Spring Framework에서 WebSocket을 사용하기 위해 WebSocket 구성을 해야 합니다. 이를 위해 @Configuration 어노테이션이 붙은 클래스를 생성하고, WebSocketConfigurer 인터페이스를 구현합니다. 아래는 WebSocket 구성을 정의한 예시입니다.

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(chatHandler(), "/chat");
    }

    @Bean
    public WebSocketHandler chatHandler() {
        return new ChatHandler();
    }
}

위의 코드에서 @EnableWebSocket 어노테이션은 WebSocket을 활성화시킵니다. 그리고 registerWebSocketHandlers() 메서드를 오버라이딩하여 엔드포인트와 핸들러를 등록합니다. @Bean 어노테이션을 사용하여 ChatHandler를 빈으로 등록합니다.

4. JavaScript 클라이언트 작성

마지막으로, 웹 소켓을 사용할 JavaScript 클라이언트를 작성해야 합니다. 이를 위해서는 웹 소켓 API를 사용하여 서버와 연결하고, 메시지를 주고받을 수 있습니다. 아래는 JavaScript 소스 코드의 간단한 예시입니다.

const socket = new WebSocket('ws://localhost:8080/chat');

socket.addEventListener('open', (event) => {
    console.log('Connected to WebSocket server');
});

socket.addEventListener('message', (event) => {
    const message = JSON.parse(event.data);
    console.log('Received message:', message);
});

function sendMessage(text) {
    const message = {
        text: text
    };
    socket.send(JSON.stringify(message));
}

위의 코드에서 new WebSocket('ws://localhost:8080/chat')를 사용하여 서버와 웹 소켓 연결을 생성합니다. addEventListener() 메서드를 사용하여 이벤트를 처리하고, socket.send() 메서드를 사용하여 메시지를 서버로 전송합니다.

결론

이제 Java와 Spring Framework를 사용하여 웹 소켓 통신을 구현하는 방법에 대해 알아보았습니다. Spring Framework를 활용하면 간단하게 웹 소켓 통신을 구현할 수 있습니다. 여러분은 이 방법을 활용하여 실시간 양방향 통신을 구현하고 다양한 웹 애플리케이션을 개발할 수 있습니다.

참고 자료