Stomp 테스트툴로 테스트해보자

Alex·2024년 11월 29일
0

Plaything

목록 보기
38/118

채팅을 만들면서 가장 불편했던 건
클라이언트가 없어서 실시간으로 잘 작동하는지 확인하기가 어렵다는것이다.

채팅 개발 강의를 보면서 얻은 클라이언트 코드가 있긴 하지만
이걸 내쪽에 맞춰서 쓰기가 쉽지 않았다.

그런 와중에 알게 된 Stomp 테스트 사이트가 있다.

참고:[Project] Spring + Stomp 테스트 하는 과정.. (실시간 채팅 구현)

이 글에서 알게된 페이지다.

이렇게 해서 보냈는데 처음에 @Destination 관련 어노테이션을 붙였다가 지웠다. Message에 누가 보내는지 적혀 있기 때문이다.

그런데

라고 떴다.

이렇게 해주어야 한다. @DestinationVariable은 어디에 메시지를 보낼지를 나타내는거라는데...여기는 from으로 돼 있어서 헷갈린다

Stomp 공부하자..

강의만 보고 따라친 결과
메시지가 어떻게 전송되고, 어떻게 받아지는지 솔직히 잘 모르겠다
테스트툴도 어떻게 써야할지 감이 안 잡힌다.

Stomp를 한번 공부해보자.

이게 Stomp 설정이다.
pub은 Publisher sub은 subsciber다.

Publisher가 특정 Topic 에 메시지를 보내면
해당 topic 을 구독한 모든 Subscriber 에게 메시지가 전송된다.

이때 pub과 sub 사이에서 메시지를 전달하는 게 메시지 브로커 Stomp다.

configureMessageBrokers에는 queue(1:1),toic(1:n)으로 메시지를 보낼 때 관습적으로 사용한다.

registry.setApplicationDestinationPrefixes("/sub")는

메시지앞에 "/sub" 이 붙어있는 경로로 발신되면 해당 경로를 처리하고 있는 핸들러로 전달된다.

솔직히 무슨 말인지 잘 모르겠다...

테스트툴을 써보며 공부하자

이렇게 돼 있다고 해보자.

여길 보면 pub/chat/message/alex는 prefix+@MessageMapping 어노테이션안에 경로를 붙여서 메시지를 발송한다.

메시지를 받으려면 /sub/chat을 구독하고 있으면 된다.

그러면 이렇게 메시지가 뜬다.

보안은?...

그런데 뭔가 이상했다.

pub/chat/message/alex으로 메시지를 보냈는데
sub/chat을 구독하는 클라이언트 모두가 메시지를 받는다.

sub/chat/alex를 구독해봤더니 여기도 메시지를 받았다.
일대일 채팅이면 sub/chat/alex로 구독한 사람만 받아야 하는 게 맞다.

클로드에게 원인을 물어보니 sub/chat을 구독하면 원래 그렇다고 한다.
sub/chat/alex를 구독해야 여기로 오는 걸 받을 수 있다.

sendTo를 쓰는 건 위험해보인다...
외부에서 sub/chat을 구독해서 메시지를 다 받아버릴 수 있지 않을까?

일대일 구조로 변경하자

이렇게 SimpMessagingTemplate를 사용해서 특정 채널로 보낼 수 있다고 한다.

topic이 어떻게 생성되는지 확인해봤다.

처음 인자로 넣었던 to+/chat 앞에 user/라는 prefix가 붙는다.

오잉 jwt 토큰값이 이상한데?

그런데 계속 jwt 토큰 값이 잘못됐다고 예외가 발생했다.
어떻게 jwt 토큰값이 들어가는지 디버깅해봤다.

Message가 jwt 토큰값으로 들어갔다?!

simpMessageType : MESSAGE
stompCommand : SEND
nativeHeaders : {Authorization=[Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkdXNnaDEyMzQiLCJleHAiOjE3MzI5MTE1NjMsImlhdCI6MTczMjg5MzU2M30.j1BTB9Zrd-eHC47p1S58je3tjYpbVL3ljyY6mt4lUZQ], destination=[/pub/chat/message/alex], content-length=[84]}
DestinationVariableMethodArgumentResolver.templateVariables : {to=alex}

header값을 다 출력해보니... navativeHeaders를 통해서
list로 헤더값들이 들어갔다. 그래서, 이걸 따로 추출하기로 했다.

뭔가 실제로 클라이언트에서 stomp로 헤더를 보내면 이것과는 달라질 수도 있을 거 같다. 그때가서 바꿔버리자.

이렇게 보냈을 때

여기로는 메시지가 간다.

여리로는 오지 않는다.

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글

관련 채용 정보