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 에서 우연히 찾게되어서 읽어보았는데, utf-8로 인코딩이 권장된다는 내용이다.
그런데 인코딩이 utf8으로 되어 있지 않았다!!! 약간의 희망을 품고 수정해보았지만
아쉽게도 해결되지 않았다..
자포자기의 심정으로 처음부터 다시 해보자는 생각을 가지고 메이븐 설정부터 다시 보았는데...
spring-messaging버전이 5.2.7이다. springframework 버전은 5.2.5인데.. 설마
.............. 그래도 이틀간의 삽질이 끝나서 좋았다..
오늘의 결론
버전관리를 잘하자..
버전을 따로 빼서 관리하자.. 윤재성 강사님(인프런 강좌)이 괜히 저렇게 하라고 한게 아니었다....ㅠ
'ddddddebuging' 카테고리의 다른 글
Mapstruct - @Mapping 오류 (0) | 2022.01.21 |
---|---|
spring 외부 정적 리소스 사용하기 (0) | 2020.05.14 |
properties파일과 message를 사용하기 위한 설정 (0) | 2020.05.09 |
Cannot delete or update a parent row: a foreign constraint fails (0) | 2020.05.07 |
20200504 Mybatis 연결에러 (0) | 2020.05.04 |