본문 바로가기

Study Information Technology

개발자를 위한 실시간 통신을 위한 Spring Boot WebSocket 서버 구축

728x90
반응형

개발자를 위한 실시간 통신을 위한 Spring Boot WebSocket 서버 구축

Overview

이 문서에서는 Spring Boot를 사용하여 WebSocket 서버를 개발하는 방법에 대해 자세히 설명합니다. WebSocket은 실시간으로 양방향 통신을 지원하는 프로토콜로, 클라이언트와 서버 간에 데이터를 효율적으로 전송할 수 있습니다. Spring Boot는 WebSocket을 지원하기 위한 여러 가지 기능을 제공하며, 이를 통해 쉽게 실시간 애플리케이션을 개발할 수 있습니다.

구현 단계

  1. 의존성 추가

먼저, Spring Boot 프로젝트에 WebSocket을 추가하기 위해 필요한 의존성을 pom.xml 파일에 추가합니다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. WebSocket 구성

WebSocket을 구성하기 위해 @Configuration 클래스를 생성하고, WebSocketConfigurer를 구현합니다.

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 WebSocketHandler(), "/websocket-endpoint")
.setAllowedOrigins("*");
}
}

위 코드에서 WebSocketHandler는 실제 WebSocket 메시지를 처리하는 핸들러 클래스입니다. /websocket-endpoint는 WebSocket 연결을 위한 엔드포인트 URL입니다.

  1. WebSocket 핸들러 구현

다음으로, WebSocketHandler 클래스를 생성하여 실제 WebSocket 메시지를 처리합니다.

import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import java.io.IOException;

public class WebSocketHandler implements WebSocketHandler {

@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
// 클라이언트로부터 메시지 수신 처리
String clientMessage = message.getPayload();
// 원하는 작업 수행
session.sendMessage(new TextMessage("서버에서 전송하는 메시지: " + clientMessage));
}

@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
// 클라이언트 연결 후 실행되는 코드
}

@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
// 클라이언트 연결 종료 후 실행되는 코드
}
}

handleTextMessage, afterConnectionEstablished, afterConnectionClosed 등의 메서드를 사용하여 클라이언트와의 연결을 관리하고 메시지를 처리할 수 있습니다.

  1. 클라이언트 구현

WebSocket을 사용하여 통신하기 위해 클라이언트도 구현해야 합니다. 클라이언트는 HTML과 JavaScript를 사용하여 구현할 수 있으며, WebSocket API를 활용하여 서버와 연결하고 메시지를 주고받을 수 있습니다.

<script>
  const socket = new WebSocket('ws://localhost:8080/websocket-endpoint');

  socket.onopen = function(event) {
    console.log('WebSocket 연결 성공');
    socket.send('안녕하세요, 서버!');
  };

  socket.onmessage = function(event) {
    console.log('서버로부터 메시지 수신: ' + event.data);
  };
</script>

위 코드는 웹 브라우저에서 동작하는 간단한 WebSocket 클라이언트 예제입니다.

  1. 에러 처리

WebSocket 개발 시 발생할 수 있는 몇 가지 일반적인 에러 상황과 해결 방법을 다음과 같이 제시합니다.

  • WebSocket 연결 실패: 클라이언트에서 서버로의 연결 시도 중 연결이 실패할 경우, 서버의 로그를 확인하여 연결을 시도한 클라이언트의 IP 주소와 포트를 확인합니다. 또한, 클라이언트 측에서 onerror 이벤트 핸들러를 추가하여 에러 메시지를 확인할 수 있습니다.

  • 메시지 전송 실패: handleTextMessage 메서드에서 메시지를 전송할 때 IOException이 발생할 수 있습니다. 이 경우, 예외를 적절히 처리하여 클라이언트에게 에러 메시지를 전송하거나, 로그를 통해 디버깅 정보를 기록할 수 있습니다.

참고 문서

이 문서에서 설명한 내용 외에도 추가적인 정보는 아래의 Spring 공식 문서에서 확인할 수 있습니다:

이 문서를 참고하여 Spring Boot에서 WebSocket을 구현하고 관리하는 방법에 대해 더 자세히 알아보세요.

728x90
반응형