크라우니메신저 v3 — Phase 7 실사용 마무리
개요
Phase 6에서 모든 기능을 라이브 시스템에 연결한 뒤, Phase 7에서
미디어 전송·종단간 검증·푸시 알림을 완성해 실사용 준비를 마쳤다.
작업 내용
1. 미디어 업로드/다운로드 (ws-server-v3.js + 미디어관리.한선)
음성·사진·파일이 실제로 전송되도록 HTTP 엔드포인트 7개 추가:
| 엔드포인트 | 기능 |
|---|
POST /upload/voice | 음성 업로드 (audio/webm 등 5종, 10MB) |
POST /upload/media | 사진/영상 업로드 (25MB) + 썸네일 |
POST /upload/file | 일반 파일 (100MB) |
GET /voice/{id} | Range 스트리밍 (206 Partial) |
GET /media/{id} | 미디어 서빙 |
GET /thumbs/{id} | 썸네일 서빙 |
GET /files/{id} | 파일 다운로드 |
- multipart/form-data 파서 자체 구현 (외부 라이브러리 0)
- MIME 검증 (octet-stream 거부 확인), 크기 제한
- 미디어관리.한선 +4 함수 (업로드처리/URL생성/유효성/썸네일경로)
- 검증: 음성 업로드 →
{id,url,size,mime} 반환 → 다운로드 HTTP 200 ✓
2. 종단간(E2E) 테스트 (e2e-test.js + E2E검증.한선)
- raw TCP + RFC 6455 WebSocket 핸드셰이크 직접 구현 (Node
net/crypto만)
- Node 25 네이티브 WebSocket 호환 이슈 우회
- SHA1 Accept 검증, 마스킹 프레임 인코딩/디코딩
- 15개 메시지 타입 라이브 서버 대상 테스트 → 15/15 통과
PASS PING·AUTH·MSG·GROUP_CREATE·POLL·LOCATION·IDENTITY
PASS PROFILE_UPDATE·WALLET_LINK·WALLET_SEND·I18N
PASS STATUS_SET·INVITE_CREATE·VOICE_MSG·PAIR_START
결과: 15/15 통과
- E2E검증.한선 — CMP v3 검증 스펙 한선씨 정본 (253줄)
3. VAPID 웹 푸시 서버 (ws-server-v3.js + 푸시알림.한선)
오프라인 사용자 브라우저 알림 (FCM/APNs 의존 0):
- P-256 VAPID 키쌍 생성/저장 (
vapid.json)
- ES256 VAPID JWT 서명 (IEEE P1363 64바이트)
sendPush(userId, payload) — 사용자 전체 구독 병렬 발송, 410/404 자동 정리
- 오프라인 메시지 수신 시 자동 푸시 트리거
| 엔드포인트 | 기능 |
|---|
GET /push/vapid-public | 공개키 (87자 base64url) |
POST /push/subscribe | 구독 등록 |
POST /push/unsubscribe | 구독 해제 |
POST /push/test | 수동 테스트 발송 |
- 푸시알림.한선 +7 함수
- aes128gcm 페이로드 암호화(RFC 8291)는 TODO (VAPID JWT는 완성)
검증
| 항목 | 결과 |
|---|
| 한선씨 컴파일 | 51/51 (100%) |
JS 서버 node -c | PASS (2,741줄) |
e2e-test.js node -c | PASS |
| E2E 라이브 테스트 | 15/15 통과 |
| 미디어 업로드/다운로드 | 정상 (HTTP 200) |
| VAPID 공개키 | HTTP 200 |
| 서버 재시작 | 정상 |
최종 통계
| 항목 | 수치 |
|---|
| 한선씨 파일 | 51개, 22,189줄 |
| JS 서버 | 2,741줄 |
| Web UI | 2,989줄 |
| E2E 테스트 | e2e-test.js + E2E검증.한선 |
| 서버 | v3.0.0 가동중, talk.crowny.org |
발견·수정
- E2E검증.한선
배열생성() → 한선씨는 배열 리터럴 [] 사용. 수정 후 컴파일 통과
- 미디어 업로드 MIME 검증이 octet-stream을 정상 거부 — 명시적 type 지정 필요
잔여 작업
- Web Push aes128gcm 페이로드 암호화 (RFC 8291)
- 썸네일 실제 이미지 리사이징 (현재 원본 복사)
- 지갑
_뱅크송금 → bank.crowny.org:9400 실 API
- 실 Ed25519 (JS WebCrypto)
관련 파일
- JS 서버:
/Users/ef/CrownyOS/apps/메신저/v3/서버/ws-server-v3.js
- E2E 테스트:
서버/e2e-test.js, E2E검증.한선
- 미디어/푸시:
미디어관리.한선, 푸시알림.한선
- 이전 단계:
2026-05-22-crowny-messenger-v3-phase6.md