WebSocket 은 default 가 fire-and-forget
Protocol 이 '이 특정 message 의 응답 기다려' 안 줘. 모든 message 가 독립. request-response semantic 만들려면 — '이 user data fetch', '이 setting 저장', 클라가 확인 원하는 모든 거 — correlation ID 추가: 클라가 고른 unique ID, 서버가 echo back, 클라가 매칭에 사용.
Promise 로 wrap 한 request
클라쪽 ergonomic 은 작은 Promise wrapper. await ws.request('user.get', {id: 'x'}) 가 응답 data 리턴. 내부: UUID 픽, resolver 등록, send, wait. timeout 추가 — 응답 안 오는 것도 가능한 결과니까.