본문 바로가기
Study Information Technology

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

by infobeste 2024. 8. 10.
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
반응형