VR 영어 교육 프로젝트에서 HTTP Polling 방식으로 데이터 처리를 했었는데, 사용자의 입력 이후 응답과 피드백 데이터가 돌아오는데까지 대략 5,6초 정도가 걸리는 문제가 있었다.
이러한 문제를 개선하기 위해 WebSocket 방식으로 수정하기로 하였고, 기존의 파이썬 서버에서 Node.js로 수정하고 Unity 클라이언트를 연결하였다. (WebSocket을 사용하기 위해 비동기 처리에 효율적이며 웹소켓과 호환이 잘 되는 Node.js로 수정)
하지만 클라이언트에서 보낸 문자열 데이터를 서버의 Chat GPT API의 입력 데이터로 보내는 과정에서 에러가 발생하였다. 내용은 message 배열에서 content 필드의 타입이 잘못되었다는 오류였다. message[1].content가 문자열 또는 객체 배열이어야 하는데 객체가 들어가있다고 하였다. 클라이언트에서 문자열 데이터를 보냈는데 서버에서 타입을 찍어보니 object로 나왔고, 확인하니 {"type":"Buffer","data":[123,125]} 형식이었다.
찾아보니 유니티 웹소켓 클라이언트가 문자열을 바이트 배열로 변환하여 서버로 전송하기 때문에 발생한 오류였다. 유니티 클라이언트의 웹소켓 처리 방식은 텍스트를 바이트 배열로 전송하기 때문에 수신 측에서 이를 변환하여 문자열로 받을 수 있다. 따라서 서버에서 받은 버퍼를 toString()을 이용해 문자열로 변환하니 정상적으로 출력되었다.
message = message.toString(); // Buffer를 문자열로 변환
https://kindload-save.tistory.com/45
[Node.js] 버퍼와 스트림
이전에 배웠던 언어들에서 주구장창 사용해왔지만 아직 정확하게 이해는 가지 않는 버퍼와 스트림에 대해서 확실하게 짚고 넘어갈겸 포스팅을 한다. 버퍼 그림으로 그리면 대충 이런 느낌인데
kindload-save.tistory.com
'개발 | 프로젝트' 카테고리의 다른 글
[Spring] MVC 동작 구조 (0) | 2025.02.15 |
---|