크라우니메신저 v3 — Phase 8 프로덕션 강화
개요
실사용 검증을 마친 메신저를 프로덕션 품질로 끌어올리는 단계.
웹 푸시 실암호화·크라우니뱅크 실연동·한선씨↔JS 정합성 감사 3축.
작업 내용
1. 웹 푸시 페이로드 암호화 (RFC 8291 aes128gcm)
실제 Chrome/Firefox 푸시 서비스에서 작동하도록 페이로드 암호화 완성:
hkdf() — HKDF-SHA256 Extract+Expand (RFC 5869)
encryptWebPush() — 임시 P-256 키쌍 → ECDH → salt → IKM(32) → CEK(16) → Nonce(12) → 0x02 패딩 → AES-128-GCM → RFC 8188 헤더 (salt 16 + rs 4 + idlen 1 + keyid 65)
decryptWebPush() — 라운드트립 검증
- Node 내장
crypto만 사용 (외부 의존 0)
- 검증: 한글 페이로드 암호화→복호화 라운드트립 PASS, RFC 8188 헤더 구조 확인
2. 크라우니뱅크 실연동
채팅 송금이 실제 잔액을 이동하도록 bank.crowny.org:9400 연결:
bankRequest(path, method, body, token) — 뱅크 HTTP 클라이언트 (3초 타임아웃)
bankTokens 맵 — 사용자별 Bearer 토큰
WALLET_BALANCE → /api/wallet/balance 실 잔액 (토큰 없으면 /api/wallet/by-uid 공개 조회 → 0 폴백)
WALLET_SEND → /api/transfer 실 호출, 성공 시 bank_linked:true 전파
- 폴백: 뱅크 미가동 시 인메모리 모드 유지,
bank_linked:false 알림 — 메신저 자체는 정상
- 뱅크 확인: localhost:9400 가동 (CrownyBank/4.0-account, 63 엔드포인트)
- 지갑연동.한선: 뱅크API경로/뱅크잔액조회경로/송금요청본체 함수 추가
3. 한선씨↔JS 정합성 감사
정본(한선씨)과 런타임(JS)의 드리프트 점검·수정:
감사: 프로토콜 78타입 / 서버코어 35라우팅 / JS 57 case
불일치 7건 발견, 4건 수정:
JS 디스패처에 10개 case 추가: GROUP_CREATE/JOIN/LEAVE/INVITE/KICK/UPDATE, SLOW_MODE, CHANNEL, PAYMENT
handleSlowMode, handleChannel, handlePayment 신규 함수
보고만 한 3건 (수정 보류):
HTTP_PORT 9750(한선씨) vs 9754(JS) — 런타임 영향 우려
WALLET 응답 타입 상수 미선언 — 클라이언트 수신만, 동작 무관
서버코어.한선 이중 라우터(메시지수신처리/패킷처리) — 큰 리팩터링 필요검증
| 항목 | 결과 |
|---|
ws-server-v3.js node -c | PASS (3,065줄) |
| 3중 동시편집 무결성 | 무손실 — Push 9 / Bank 7 / 정합성 6 흔적 모두 보존 |
| 한선씨 컴파일 | 51/51 (100%) |
| E2E 라이브 테스트 | 15/15 통과 |
| Web Push 암호화 라운드트립 | PASS |
| VAPID 공개키 | HTTP 200 |
| 크라우니뱅크 | localhost:9400 가동 확인 |
최종 통계
| 항목 | 수치 |
|---|
| 한선씨 파일 | 51개, 22,304줄 |
| JS 서버 | 3,065줄 |
| Web UI | 2,989줄 |
| 서버 | v3.0.0 가동중 |
잔여 작업 (정리 대상)
- 서버코어.한선 HTTP_PORT 9750 → 9754 통일
- 프로토콜.한선에 WALLET 응답 타입 상수 추가
- 서버코어.한선 이중 라우터 정리
- 썸네일 실제 이미지 리사이징
- 실 Ed25519 (JS WebCrypto)
관련 파일
- JS 서버:
/Users/ef/CrownyOS/apps/메신저/v3/서버/ws-server-v3.js
- 한선씨:
푸시알림.한선, 지갑연동.한선, 서버코어.한선, 프로토콜.한선
- 이전 단계:
2026-05-22-crowny-messenger-v3-phase7.md