본문 바로가기

SpringBoot

[Springboot] #1 웹소켓과 STOMP로 실시간 채팅 구현하기 - spring boot에 웹소켓 연결

 

실시간 채팅을 구현하기 위해 웹소켓과 STOMP를 이용하여 구현하였다.

 

1. 웹소켓의 통신 과정

웹소켓의 연결

(1) 클라이언트 요청: 클라이언트가 웹소켓 연결을 시작하기 위해 서버에 HTTP 요청을 보낸다.

(2) 서버 응답: 서버는 클라이언트의 HTTP 요청(웹소켓 업그레이드 요청)을 수신하고, 이를 확인한 후 웹소켓 연결을 수락한다. 서버는 HTTP 응답을 보내며, 이는 웹소켓 업그레이드를 승인하는 내용을 포함하게 된다.

(3) 프로토콜 업그레이드 완료: 이러한 과정을 거치면 HTTP에서 웹소켓 프로토콜로 업그레이드가 완료되며, 지속적인 연결을 통해 양방향 통신이 활성화된다.

 

데이터 전송

클라이언트와 서버는 텍스트 또는 바이너리 메시지를 주고받게되는데, 이 과정에서 각 메시지는 웹소켓 프레임으로 캡슐화되어 전송된다.

 

연결 종료

클라이언트 또는 서버가 연결 종료 요청시 통신이 종료되고, 웹소켓 연결이 닫힌다.

 

2. 웹소켓 의존성 추가

build.gradle파일에 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-websocket'

 

3. WebSocket연결

 

WebSocketChatHandler 파일 생성

@Component
public class WebSocketChatHandler extends TextWebSocketHandler {

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String input = message.getPayload();
        TextMessage textMessage = new TextMessage("웹소켓 테스트. 연결완료~");
        session.sendMessage(textMessage);
    }
}

WebSocket 메시지를 처리하는 핸들러.

클라이언트로부터 텍스트 메시지를 수신하면, 응답 메시지를 클라이언트에게 전송한다.

 

WebSocketConfig 파일 생성

@Configuration
@EnableWebSocket
@RequiredArgsConstructor
public class WebSocketConfig implements WebSocketConfigurer {
    private final WebSocketHandler webSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler, "/ws/chat").setAllowedOrigins("*");
    }
}

WebSocket 설정.

WebSocketConfigurer를 구현하여 /ws/chat 엔드포인트에 webSocketHandler를 등록하고, setAllowedorigins("*")을 통해 모든 도메인에서의 접근을 허용한다.

 

연결테스트

chrome 확장 프로그램인 Simple Web Socket Client를 이용해서 웹소켓 연결을 테스트 해볼 수 있다.