Upbit로부터 데이터를 받아왔으니, 유저에게 그 데이터를 그대로 던져줘야 한다.
유저가 WebSocket으로 특정 주소로 요청을 보내면 그 유저의 세션을 관리해서 데이터를 전송하는 방법이 있다.
하지만 유저의 세션을 관리하는게 영 귀찮은게 아니라서 나는 Stomp의 Pub/Sub 통신을 사용해서 구현할 계획이다.
Pub/Sub 통신이란 발행자와 구독자가 있는 것으로, Stomp의 이 기능을 사용하면, 발행과 구독만 관리하면 편하게 구현할 수 있다!
일단 Configuration 코드부터 보자.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/sub");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/coin")
.setAllowedOrigins("*");
}
}
registerStompEndpoints 메서드에서 registry에 /coin 엔드포인트를 등록한다.
(configureMessageBroker 메서드는 /sub로 구독이 가능하게 설정한 부분이다.)
@Override
protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
String convertedMessage = new String(message.getPayload().array(), StandardCharsets.UTF_8);
publish(convertedMessage);
}
/**
* 받은 메시지를 토픽에 발행하는 비동기 메서드입니다.
*
* @param convertedMessage 처리된 메시지
*/
@Async
protected void publish(String convertedMessage) {
simpMessageSendingOperations.convertAndSend("/sub/trade", convertedMessage);
}
WebSocketHandler에서 simpMessageSendingOperations를 통해 /sub/trade로 publish를 해주면 이렇게 된다.
연결은 /coin으로, Subscription URL에는 /sub/trade를 입력해주면 trade 정보를 받을 수 있다.
주의할 점은, 이미 프로젝트에서 Spring Security를 사용중이라면, /coin 을 허용시켜야 데이터를 받을 수 있다는 점이다.
(이것때문에 한참을 헤맸다...ㅜㅠ)
이 프로젝트에서는 누구나 로그인 없이 이 데이터들을 받을 수 있어서 그냥 허용시켜 버렸다.
'Back-end > Spring boot' 카테고리의 다른 글
코인 모의투자 프로젝트(5) - 퍼포먼스 향상 - 2 (1) | 2024.04.28 |
---|---|
코인 모의투자 프로젝트(4) - 퍼포먼스 향상 - 1 (0) | 2024.04.23 |
코인 모의투자 프로젝트(2) - Upbit Websocket 연결 (0) | 2024.04.17 |
코인 모의투자 프로젝트(1) - 개요 (1) | 2024.04.16 |