Spring STOMP를 이용하여 실시간 채팅이 가능한 페이지를 만드는중...

 

 

 

요놈이 나를 괴롭혔다...

SockJS로만 하면 연결이 되는데 Stomp를 얹어서 연결을 시도하는 순간 에러가 났다.

spring명세서랑 스택오버플로우랑 깃헙 예제 싹다 뒤져도 저 오류에 대한 해결법을 찾을 수 없었다..

 

 

 

 

<해결을 위한 여러가지 생각의 과정>

 

1. copyToString메소드의 매개변수가 배열로서(Ljava/io/ByteArrayOutputStream;Ljava/nio/charset/CharSet; -> Ljava가 배열이라는것도 이번에 알았다..) 받아져서 그런가?

 

2. json 형이 아니라 string으로 메세지를 넘기려고해서 파싱을 못하는건가?

 

3. 개발도구 Network에서 websocket요청값의 header가 upgrade로 정상 요청됨은 확인을 하였는데 Error메세지에 보니까 content-length : "0"이고 body도 비어 있으니까 헤더에 추가 정보가 필요한가?

 

 

 

 

1번은 Spring.io 문서에서 org.springframework.util.StreamUtils를 찾아보다가 발생한 의문이었는데, 애초에 ByteArray니까 어떤 배열형태라서 문제가 있는것 같지는 않았다. 다만 에러메세지가 이 문제를 계속 가리키고 있었기 때문에 가장 중요문제가 이곳인것 같았다...

 

2번은 아닌것 같았다. 여러 예제를 찾아보고 구글링해보아도, json형으로 id와 msg를 넘기는것이 당연히 더 좋은 형태이겠지만 테스트로 단순하게 메세지를 string형으로 넘기는 예제도 많이 있었다.

 

3번은... content-length에 대해서 찾아보다가

 

 

https://stomp.github.io/stomp-specification-1.2.html#Header_content-length

 

 

 

https://stomp.github.io 에서 우연히 찾게되어서 읽어보았는데, utf-8로 인코딩이 권장된다는 내용이다.

그런데 인코딩이 utf8으로 되어 있지 않았다!!! 약간의 희망을 품고 수정해보았지만

아쉽게도 해결되지 않았다..

 

 

 

 

 

자포자기의 심정으로 처음부터 다시 해보자는 생각을 가지고 메이븐 설정부터 다시 보았는데...

 

 

spring-messaging버전이 5.2.7이다. springframework 버전은 5.2.5인데.. 설마

 

 

 

 

 

.............. 그래도 이틀간의 삽질이 끝나서 좋았다..

 

 

오늘의 결론

버전관리를 잘하자..

 

 

 

 

버전을 따로 빼서 관리하자.. 윤재성 강사님(인프런 강좌)이 괜히 저렇게 하라고 한게 아니었다....ㅠ

+ Recent posts