public class ChattingConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry){
registry.addEndpoint("/ws/chat")
.setAllowedOriginPatterns("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry){
registry.setApplicationDestinationPrefixes("/send");
registry.enableSimpleBroker("/topic");
}
}
public class ChatController {
private final ChatService chatService;
@MessageMapping("/{roomId}")
@SendTo("/topic/{roomId}")
public ChatMessageResDto sendMessage(@DestinationVariable Long roomId,@Valid ChatMessageReqDto dto) {
log.info("메시지 도착 = {}", dto.getContent());
return chatService.saveMessage(roomId, dto, userId);
}
// 생략
}
핵심: WebSocket은 "지속적인 연결 기반 양방향 통신"이라, 중간 Proxy(Nginx)나 방화벽이 Upgrade 헤더를 제대로 전달하지 않으면 동작하지 않습니다.
WebSocket이 HTTP와 달리 Upgrade 헤더를 요구하기 때문에 프록시에서 처리 필수.

location / {
proxy_pass http://IP주소:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location /ws/chat/ {
proxy_pass http://IP주소:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
이 설정을 안 해주면 404에러가 발생한다.
https://jiangxy.github.io/websocket-debug-tool/
출처 : https://woo0doo.tistory.com/38 글 보다가 찾은 사이트예요

SockJS + STOMP 조합이기 때문에 둘 다 클릭해주고 연결해준다.

헤더에 accesstoken을 {"Authorization":"Bearer 토큰"} 방식으로 넣는다
이후 /send/{roomId} 하고 메시지 내용 넣어서 send해준다.

구독했다면 메시지를 받을 수 있다!