← 목록
기타 2026-06-11 5KB 읽기 6분

크라우니메신저 v3 — 로컬 실동작 검증·완성

개요

게이트웨이를 우회하고 localhost 직통으로 크라우니메신저 v3의 핵심 실동작 (사람 초대 / 음성·영상 통화 / 4통화 송금 / 실시간 브리지)을 적대적 E2E로 검증. 서버 코드 분석 → raw WebSocket 클라이언트로 실테스트 → 발견한 갭 ADDITIVE 수정.

위치: /Users/ef/CrownyOS/apps/메신저/v3/ 서버: 서버/ws-server-v3.js (실행본), 서버/signaling.js (시그널링 SSOT) 한선씨 동반: 서버/ws-server-v3.한선, 서버/signaling.한선, 지갑연동.한선

3포트 LISTEN

  • :9767 WS — 실 WebSocket 핸들러 (LISTEN ✅)
  • :9766 HTTP API — /status 200, /api/broadcast 200 (✅)
  • :9752 SPA — GET / HTTP 200, 216KB (✅)
  • 의존: bank :9400 (crownyc/한선씨 VM, UP) — /health 200, /api/wallet/by-uid 응답 정상

실테스트 결과 (raw WS 클라이언트, /tmp/msg-e2e-test.js 등)

1. 통화 시그널링 (signaling.js setupSignaling 배선)

  • CALL_OFFER alice→bob 중계 + iceServers 전달 — PASS
  • CALL_STATE ringing (발신자 통지) — PASS
  • CALL_ANSWER bob→alice 중계 — PASS
  • CALL_ICE candidate 중계 — PASS
  • CALL_END 종료 + duration — PASS
  • CALL_BUSY (수신자 실통화중) — PASS (전용 3자 테스트 msg-busy-test.js)
  • CALL_GROUP 생성 + CALL_GROUP_JOIN 참여·알림(count=2) — PASS (msg-group-call.js)

2. 4통화 송금 (handleWalletSend, LIMITS/ASSET_NORM)

  • WALLET_SEND crn/fone/crm/crd 각각 ACK + 수신자 WALLET_SEND 수신 — PASS
  • 정규화 확인: fone→fnc, 나머지 그대로. bank_linked=false(미링크 폴백 정상)
  • 한도 초과 거부 (crd>1000 → WALLET_OVER_LIMIT) — PASS
  • amount 누락 거부 (WALLET_SEND_INVALID) — PASS
  • LIMITS = { fnc:100000, crn:10000, crm:1000000, crd:1000 }
  • 3. 실시간 브리지 (익명 SUBSCRIBE + /api/broadcast → ROOM_MSG)

    • 익명 SUBSCRIBE 허용 (AUTH 없이 conv room 구독) — PASS
    • /api/broadcast POST 200 + delivered=1 — PASS
    • ROOM_MSG E2E 수신 (페이로드 그대로) — PASS

    4. 사람 초대

    • INVITE_CREATE → INVITE_CREATED + invite code 발급 — PASS
    총 18/18 논리 검증 통과 (서버 버그 0건).

    수정 (ADDITIVE)

    : handleWalletRequest(WALLET_REQUEST)가 자산 정규화를 하지 않아 클라가 표시코드(FONE/CRD 대문자)로 송금 요청 시 잘못된 asset 코드로 저장됨. (handleWalletSend 은 ASSET_NORM 적용, handleWalletRequest 만 누락 — 불일치)

  • 서버/ws-server-v3.js handleWalletRequest 에 ASSET_NORM 추가 (FONE→fnc 정규화)
  • 검증: WALLET_REQUEST asset=FONE → 수신측 asset=fnc — PASS (req-test.js)
  • 지갑연동.한선자산정규화(asset) 함수 추가 + 송금요청생성에서 적용 (JS와 1:1 동기화)
  • 3레이어 트리플체크: 컴파일 ✅ / 구조 ✅ (함수 47, 28979 큐브)
  • 크라우니코드 학습: 자산정규화, 송금요청생성_정규화자산
  • 3레이어 트리플체크

    • signaling.한선 — 컴파일 PASS (함수 17, 11862 큐브)
    • ws-server-v3.한선 — 컴파일 PASS (함수 40, 26510 큐브)
    • 지갑연동.한선 — 컴파일 PASS (함수 47, 28979 큐브)

    원격노드/사용자 사용법

    • 로컬뷰: lbv 로 talk.crowny.org → 127.0.0.1:9752 SPA
    • WS 클라이언트: ws://127.0.0.1:9767 에 AUTH({user_id, crowny_id}) → AUTH_OK 후
    CALL_OFFER/ANSWER/ICE/END, CALL_GROUP/JOIN/LEAVE, WALLET_SEND/REQUEST/BALANCE 송신
    • AI 브리지: 익명 SUBSCRIBE({room}) → POST /api/broadcast {room,payload} → ROOM_MSG 수신
    • 기동: bash /Users/ef/CrownyOS/apps/메신저/v3/start-v3.sh {start|status|restart}

    남은 갭 (코드 외 / 프로비저닝)

    • 뱅크 실 잔액 이동(bank_linked=true) 경로는 WALLET_LINK 로 bank_token + 등록 지갑이
    있어야 활성. 미링크 시 인메모리 폴백 + pending_tx 큐 적재(정상 설계). 실 계정 프로비저닝은 별건.
    • STUN/TURN: 기본 stun:stun.crowny.org:3478, 자체 미배포 구간은 STUN_FALLBACK=1 시 Google.
    실 통화 미디어(P2P)는 클라 WebRTC + 자체 TURN 배포 확인 필요 (시그널링은 완전 동작).
    • AUTH: crowny_id 단독 전달 시 strict isCrownyId(CRN-XXXXXXXX) 미매칭이면 user_id 없으면
    AUTH_FAIL — 실 crowny_id 포맷이면 정상. 테스트는 user_id 동반 필요.

    관련 파일

    • /Users/ef/CrownyOS/apps/메신저/v3/서버/ws-server-v3.js (handleWalletRequest 수정)
    • /Users/ef/CrownyOS/apps/메신저/v3/서버/signaling.js
    • /Users/ef/CrownyOS/apps/메신저/v3/지갑연동.한선 (자산정규화 추가)
    • /tmp/msg-e2e-test.js, /tmp/msg-busy-test.js, /tmp/msg-group-call.js, /tmp/req-test.js (테스트)