크라우니 브라우저 v5 — Mac/Windows · 멤버 전용 · 7티어 · 프로토콜 차등
개요
크라우니 멤버 전용 경량 브라우저. 기존 CrownyOS용 브라우저(WKWebView Path A)를 토대로, 맥용 먼저(Brave 참고) → Windows(WebView2) → 한선씨 엔진 교체 단계 전략으로 재구성.
- 정체성: 브라우저 자체가 1차 게이트. 통신 프로토콜 레벨부터 등급 차등.
- 핵심 목적: 최고로 가벼운 도구. 개발도상국 저용량 환경 최적화.
- 과금: 계정당 월 2000CD 동일. 사용료 막히면(paused) 전 서비스 중단.
- 등급: 7단계 — 0 일반 · 1~4 티어 · 5 관리자 · 6 수퍼관리자(숨김). 요금 동일, 접근권한만 차등.
핵심 설계 결정
엔진: "가장 가벼운 크롬엔진" = 풀 Chromium 번들 ❌ → OS 내장 WebView ✅
| Mac | Windows | |
|---|---|---|
| Phase 1~3 | WKWebView (시스템 WebKit, 번들 0) | WebView2 (시스템 Edge/Blink=진짜 크롬엔진, 번들 0) |
| Phase 4 | 한선씨 엔진(Path B)으로 교체 | 동일 |
회원/과금/티어 백엔드 = subscribe.crowny.org 재사용 (재작성 0)
POST /api/entitlement/verify,GET /api/entitlement?service=→{status: active|paused|none}- paused(2000CD 소진) = 브라우저가 전 서비스 차단. 사용자 요구와 정확 일치.
무엇을 했는지 (Phase 1 완료 — Mac)
한선씨 SSOT (정본) — /Users/ef/CrownyBrowser/src/티어/
| 파일 | 역할 | 검증 |
|---|---|---|
티어판정.한선 | 7티어 4상 접근판정(티/옴/타/음) | 7케이스 ✅ |
크라우니프로토콜.한선 | 서명헤더 6종 + 라이트모드 0~3(저용량) | ✅ |
서비스등급표.한선 | 서비스→필요등급+전용여부 | 6케이스 ✅ |
세션판정.한선 | 이용권→세션상태 4상(2000CD 월정산) | 4케이스 ✅ |
경량지표.한선 | 최경량 목표지표 채점 | Phase1 전부 티 ✅ |
Mac 셸 결선 — /Users/ef/CrownyBrowser/native/
crowny_tier.h/crowny_tier.m— 한선씨 SSOT의 C 미러(핫패스 성능용). 1:1 동일 판정 검증.crowny-browser.m패치 3곳:
CrownyCurrentSession)
2. applicationNameForUserAgent → UA에 등급/멤버/라이트/SHA256서명 탑재 = 프로토콜 차등
3. decidePolicyForNavigationAction 신규 = 1차 티어 게이트(차단 시 안내페이지, 서버 왕복 0)
세션갱신.sh— subscribe 이용권 조회 →세션.json작성(paused→전 서비스 차단)Makefile—crowny_tier.m빌드 통합. 바이너리 213KB(목표 300KB 이하 달성).
검증 결과
- 빌드: 클린(경고 0), 213KB arm64
- C미러 vs 한선씨 SSOT: 접근판정 6케이스 + 서비스등급표 6케이스 완전 일치
- 차단 판정: 일반→티어2=타403 / 티어3→티어2=티200 / 티어1→티어2=옴428 / paused=타402 / 미인증=음401 / 수퍼관리자→티어4=티200
프로토콜 차등 (통신 레벨)
모든 요청 UA: CrownyBrowser/5.0 (Crowny; tier=N; m=ID; lite=L; ts=...; sig=SHA256)
- 일반 브라우저는 이 UA를 못 보냄 → 서버가 전용 서비스 게이트 가능
X-Crowny-Lite0~3: 전체/절약/텍스트우선/텍스트전용 — 개발도상국 대역 예산(무제한/512KB/128KB/32KB)
Phase 2 완료 — Windows WebView2 스캐폴드 (native/win/)
| 파일 | 역할 | 검증 |
|---|---|---|
crowny_tier_win.h/.c | crowny_tier.m 1:1 Win32 이식 (BCrypt SHA256, _wfopen 세션) | — |
crowny_browser_win.c | WebView2 COM 호스트 (Env→Ctrl→NavStarting 콜백, 게이트 결선, put_UserAgent) | Win 실기 필요 |
test_win.c | 헤드리스 검증 (Win32 의존 없음) | macOS cc 14/14 PASS |
BUILD-WINDOWS.md | NuGet/MSVC 빌드, Runtime 의존성 | — |
windows.h not found는 macOS에 Windows SDK가 없어서 나는 예상된 것(Windows 전용 파일). 로직부(test_win.c)는 Mac C 미러와 동일 판정 14/14.Phase 3 완료 — 전용 서비스 서버측 게이트
클라이언트 UA 주입의 서버측 짝. 위조 차단까지.
src/티어/게이트검증.한선(SSOT) +native/게이트검증.js(배포 미러, Express/http 미들웨어)- 검증: 정상=티200 / 위조서명=타403 / 만료(리플레이)=타401 / 일반브라우저→전용=타426 / 소진=타402 — 한선씨↔JS 완전 일치
- end-to-end: 브라우저 서명 UA 주입 → 1차 client 게이트 → 서버
게이트미들웨어({secretLookup, statusLookup})서명+티어+전용 검증
후속 배치 (2026-06-27 — 5항목 + 원격지원)
병렬 에이전트(가드레일 주입·모델 분업) + 메인 통합으로 진행:
| 항목 | 결과 |
|---|---|
| 로그인 UI | crowny-browser.m: 메뉴 멤버>로그인 ⌘⇧I, 401블록→crowny://login, NSAlert 패널(회원ID+토큰)→세션갱신.sh→전 탭 UA 갱신+새로고침, 로그아웃. 빌드 214KB |
| 게이트웨이 배포 | crowny-browser-gate/(index/lookups/demo/test/가이드). node test 6 PASS, 스모크(일반→426/공개→200/유효서명→200). ⚠️SUB_SERVICE_KEY 미설정 시 fail-open → 전용서비스 fail-closed로 수정 필요 |
| Windows 완성 | native/win/ 5갭 봉합: WebResourceRequested(crowny-internal 스킴)·UA 버전가드·탭/히스토리/북마크 stub·NavigationStarting 차단·BUILD 갱신. test_win 14/14 PASS |
| 티어 config화 | 서비스등급.psv(21서비스)+서비스등급로더.한선(실 PSV 로드)+서비스등급정책.md. 한선씨·C 양측 PSV 동적 로드 검증(studio 2→1 변경 즉시 반영). 운영자가 코드수정·재컴파일 없이 등급 조정. C측: crowny_tier.m loadServicePSV(), env CROWNY_SERVICE_PSV |
| Phase 4 엔진 | 한선씨웹엔진 HTML→cmd 렌더 검증(블록레이아웃·텍스트·색·줄바꿈 23줄). 엔진교체계획.md(리소스 종류별 전환 순서·픽셀동등 정책). 갭: 임의 HTML 주입 미결선·CSS 미적용 |
| 원격지원 도구 | ✅ 크롬 원격데스크톱 격, 멤버 티어 게이트. 한선씨 권한 SSOT(원격지원판정.한선 24케이스) + 시그널링 서버(support.crowny.org:9966, WS 24/24 PASS) + WebRTC 클라이언트(원격지원.html) + Mac 네이티브 훅(메뉴멤버>원격지원, crownyControl 메시지핸들러→CGEvent 마우스/스크롤/키 주입, 접근성 권한, grant 게이트). E2E 검증: 세션생성(tier5)→코드발급(티)/helper tier4→거부(음)/tier5→동의대기(옴) |
원격지원 도구 (신규 — Chrome Remote Desktop 격)
크라우니 멤버 간 화면공유+원격제어. 도우미(관리자 tier5+)가 피지원자 화면을 보고 제어.
- 접속코드 방식: host 세션생성→6자리코드(TTL 10분)→helper 코드입력→host 동의→WebRTC P2P
- 2단 권한: 화면보기(view)=동의로 충분 / 원격제어(control)=host 추가허가 필요. 4상 티/옴/타/음
- 제어 주입: WKWebView가 WebRTC DataChannel로 받은 제어이벤트→
crownyControl메시지→네이티브 CGEvent(마우스move/click/우클릭/scroll, 키보드 유니코드+특수키). 접근성 권한 필요(host측) - 파일:
src/원격지원/원격지원판정.한선,crowny-support/{원격지원서버.js,원격지원.html,API계약.md} - 잔여: TURN 서버(LTE/이중NAT), Windows
SendInput()제어,X-Crowny-Sig서버 서명검증 연동
Mac 다듬기 — 최소무게·최고성능 (2026-06-27)
실측 분석 → 개선법 10가지(native/최적화10.md). 즉효 3건 적용:
- M1 strip(
strip -x): 바이너리 216KB→181KB (16%↓) - M2 UA 서명 캐시:
crowny_build_uaSHA256를 탭마다 재계산→세션당 1회(CrownyCurrentUA) - M3
-dead_strip: 미참조 코드 제거 - 핫패스 점검: 티어 게이트·PSV는 캐시되어 네비게이션당 비용 무시 가능(양호)
native/최적화10.md.잔여 이슈
- Phase 2 실기 빌드: WebView2 SDK 설치 + MSVC 빌드(Windows 머신).
crowny-internal://스킴add_WebResourceRequested미구현, 탭/히스토리 Win 미구현. - Phase 4 (한선씨 엔진 교체): Path B(
한선씨웹엔진.한선) 미성숙(블록레이아웃+CJK만, CSS 미적용). "순수모드"(crowny://web/) 토글이 교체 훅. 목표 ≤8MB/≤64MB/≤300ms. 리소스 종류별 점진 교체(HTML/CSS→JS). - 게이트웨이 배포:
게이트검증.js를 crowny-gateway/각 서비스에 미들웨어 결선 +secretLookup(멤버 세션비밀)·statusLookup(subscribe 연동) 구현. - 로그인 UI: 현재 세션은
세션.json/환경변수. auth.crowny.org 연동 로그인 창 미구현. - 티어 소스: 멤버 등급(0~6) 부여 API
member.crowny.org/api/me/tier확정 필요.
관련 파일
- 한선씨 SSOT:
/Users/ef/CrownyBrowser/src/티어/*.한선 - Mac 셸:
/Users/ef/CrownyBrowser/native/crowny_tier.{h,m},crowny-browser.m,세션갱신.sh,Makefile - Windows:
/Users/ef/CrownyBrowser/native/win/(작업 중) - 백엔드:
/Users/ef/crowny-subscribe/(subscribe.crowny.org:9946) - 빌드:
cd native && make CrownyBrowser
빌드 & 실행
bashcd /Users/ef/CrownyBrowser/native && make CrownyBrowser
# 테스트(환경변수 세션 오버라이드)
CROWNY_MEMBER=kim.president.sk CROWNY_TIER=2 CROWNY_STATUS=active ./CrownyBrowser
# 사용료 소진 시뮬레이션 → 전 서비스 차단 확인
CROWNY_MEMBER=test CROWNY_TIER=5 CROWNY_STATUS=paused ./CrownyBrowser