티스토리 뷰

이전에 Config 파일과, Handler 파일을 작성해서 웹소켓 사용 설정을 마쳤다. 

https://dogandbird.tistory.com/93

이제 본격적으로 웹소켓을 사용해 채팅 구현을 하려고 하는데

STOMP에 대해서 알게 되었다.

 

Websocket만 이용할 경우는 발신자와 수신자에 대한 연결 정보를 직접 관리해야 한다.

또한 사용자들을 해두고 클라이언트에서 다른 클라이언트로 전달하는 코드 또한 직접 구현해야 한다.

하지만 STOMP를 이용한다면 위와 같은 복잡성을 해결할 수 있다.

 

STOMP

STOMP는 Simple Text Oriented Messaging Protocol의 약자로

기존 WebSocket 통신 방식을 좀 더 효율적으로 쉽게 다룰 수 있게 해주는 프로토콜이다.

 

STOMP는 Pub/Sub 구조이다.

이는 메세지를 공급하는 주체와  소비하는 주체를 분리해 제공하는 메시징 방법이다.

Pub가 topic에 메세지를 보내면 해당 topic을 구독해놓은 Sub 모두에게

메세지가 전송되면서 데이터 교환이 이루어진다.

이렇듯 메세지를 전송하고 받아서 처리하는 부분이 확실하게 구조로 정해져있다.

 

구현에서는 이전과 같이 WebSocketHandler를 직접 구현하지 않고

@MessagingMapping 어노테이션을 사용해서 메세지 발행시 엔드포인트를 별도로 분리해서 관리한다.

 

 

설정 파일 작성

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").withSockJS();	// (1)
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.setApplicationDestinationPrefixes("/app");	// (2)
        config.enableSimpleBroker("/topic", "/queue");		// (3)
    }
}

 

(1) WebSocket handshacke를 위해 연결해야 하는 엔드포인트 HTTP URL

(2) app으로 시작하는 헤더를 가진 STOMP 메세지는 @Controller 클래스의 @MessageMapping 메서드로 라우팅

(3) 구독 및 브로드캐스팅을 위해 내장된 메세지 브로커를 사용하고 목적지 헤더가 /topic 또는 /queue로 시작하는 메세지는 브로커로 라우팅

 

라우팅? 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정

 

아래 링크는 참고한 공식 문서이다. 

https://docs.spring.io/spring-framework/reference/web/websocket/stomp.html

 

STOMP :: Spring Framework

The WebSocket protocol defines two types of messages (text and binary), but their content is undefined. The protocol defines a mechanism for client and server to negotiate a sub-protocol (that is, a higher-level messaging protocol) to use on top of WebSock

docs.spring.io

 

'Web > Spring' 카테고리의 다른 글

JUnit의 세부 모듈과 생명주기  (1) 2024.02.25
Dto와 Entity 사이에서의 혼란 😨  (0) 2024.02.20
채팅 ERD (Feat. ERD Cloud)  (1) 2024.02.11
자주 사용되는 JPA 어노테이션  (0) 2024.02.08
Lombok의 @Builder 알아보기  (0) 2024.02.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함