Spring Boot에서 WebSocket 사용하기

김형진·2024년 3월 11일

Spring

목록 보기
15/15
post-thumbnail

Spring Boot를 사용하여 웹 소켓(WebSocket)을 구현하는 것은 실시간 양방향 통신 기능을 간단하게 구현할 수 있는 방법입니다. 웹 소켓은 클라이언트와 서버 간의 지속적인 연결을 통해 실시간 데이터를 교환할 수 있는 프로토콜입니다. 아래는 Spring Boot를 이용하여 간단한 채팅 애플리케이션을 개발하는 과정입니다.

1. 의존성 추가

먼저 pom.xml 파일에 Spring WebSocket 의존성을 추가해야 합니다.

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

2. WebSocket Configuration 설정

WebSocket을 사용하기 위해 설정 파일을 추가해야 합니다. WebSocketConfig.java와 같은 이름으로 클래스를 생성하고 다음과 같이 설정합니다.

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

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

3. WebSocket 핸들러 구현

WebSocket 핸들러 클래스를 작성해야 합니다. 이 핸들러는 클라이언트와 서버 간의 통신을 관리합니다.

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 {
        // 클라이언트로부터 메시지를 받았을 때 처리할 로직을 작성합니다.
        String payload = message.getPayload();
        session.sendMessage(new TextMessage("서버에서 받은 메시지: " + payload));
    }
}

4. 클라이언트 구현

웹 소켓을 사용하는 클라이언트도 구현해야 합니다. 일반적으로 JavaScript를 사용하여 웹 브라우저에서 클라이언트를 구현합니다.

var socket = new WebSocket("ws://localhost:8080/chat");

socket.onopen = function(event) {
    console.log("연결 성공!");
};

socket.onmessage = function(event) {
    console.log("서버에서 받은 메시지: " + event.data);
};

socket.onclose = function(event) {
    console.log("연결 종료!");
};

function sendMessage(message) {
    socket.send(message);
}

5. Spring Boot 애플리케이션 실행

이제 Spring Boot 애플리케이션을 실행하고 클라이언트를 통해 메시지를 보내면, 서버가 해당 메시지를 다시 받아서 클라이언트로 전송하는 것을 확인할 수 있습니다.

0개의 댓글