WebSocket 요청과 응답을 짝짓기 위해 로봇 서버 프로토콜에 UUID를 추가한 과정
2026.10.04 · 1분
개요
| 항목 | 내용 |
|---|---|
| 유형 | 기술 선택·협업 조율 |
| 시점 | PoC 개발 과정 |
| 상태 | 로봇 서버 프로토콜에 UUID 추가, 관제 서버에 요청·응답 처리 구현 |
| 관련 영역 | 관제 서버, 로봇 서버 연동, WebSocket 통신 |
| 나의 역할 | 문제 인식, 프로토콜 변경 요청, 관제 서버 측 구현 |
1. 상황과 제약
관제 서버는 로봇 서버와 WebSocket으로 통신했습니다. 카메라 주소 요청, 현재 작업 조회처럼 응답을 받아야 하는 요청이 여러 개였는데, 메시지에 요청을 구분할 값이 없어서 도착한 응답이 어느 요청에 대한 것인지 알 수 없었습니다.
로봇 서버는 다른 담당자가 개발하고 있어서, 프로토콜을 바꾸려면 그쪽과 합의해야 했습니다.
2. 검토와 판단
관제 서버 쪽에서 우회하지 않고 프로토콜에 식별자를 넣기로 했습니다. 로봇 서버 담당자에게 요청과 응답에 UUID를 넣어 달라고 요청했습니다.
3. 실행과 조율
요청이 받아들여져 로봇 서버 프로토콜에 UUID가 추가됐습니다. 관제 서버에는 이 UUID를 쓰는 요청·응답 처리를 구현했습니다.
- 요청마다 UUID를 만들고 임시 수신 핸들러를 등록합니다.
- 응답의 UUID가 요청과 같을 때만 결과를 돌려줍니다.
- 4초 안에 응답이 없으면 타임아웃으로 처리합니다.
- 처리가 끝나면 핸들러를 제거하고, 소켓이 열려 있지 않으면 바로 반환합니다.
4. 결과와 확인
서비스 코드에서 await rcService.getRecvRtspAddr()처럼 일반적인 비동기 호출로 로봇에 질의할 수 있게 됐습니다. 처리가 끝날 때마다 핸들러를 지우므로 리스너가 쌓이지 않습니다.