크라우니브라우저 병행 개발 Phase 2
2026-04-16  ·  2026-04-16-crowny-browser-parallel.md

크라우니브라우저 병행 개발 Phase 2

개요

WebKit 래퍼(A)와 커스텀 렌더러(B) 병행 진행. 에이전트 2개 투입 → A 완료, B 좌표 버그 수정.

무엇을 했는가

Path A — WebKit 래퍼 (완료)

  • `CrownyBrowser/native/crowny-browser.m` (21KB) — Cocoa NSWindow + WKWebView
  • `crowny-internal://` 스킴 핸들러 (CORS 시행)
  • `WKUserScript` 자동 디자인 주입 (meta 태그 감지)
  • MutationObserver로 `data-theme` 변경 → 윈도우 크롬 6테마 동기화
  • 80KB arm64 바이너리, 정상 기동 확인
  • 한선씨 동반본 `crowny-browser.한선` (11KB)

Path B — 커스텀 렌더러 (기반 + 버그 수정)

  • `libs/HTML파서.한선` (23KB) — 토큰화 + DOM 트리
  • `libs/CSS해석.한선` (19KB) — `:root` 변수, `var()` 해결, 선택자 매칭
  • `libs/박스레이아웃.한선` (19KB) — 박스모델 + 블록 레이아웃
  • `tests/renderer-test.한선` — E2E 파이프라인
  • **좌표 버그 수정**: `_BOX_props적용`에서 `맵꺼내`가 센티널(-2147483647) 반환 시 CSS 값으로 파싱되던 문제
- `_BOX_유효값()` 헬퍼 추가 — 접두사 `-214748` 감지 - 6개 속성(padding/margin/fs/bg/fg/radius/display/width) 모두 가드
  • **검증**: div @(0,0) 480×88, h2 @(24,24), p @(24,44) 정확한 박스 스택

데모 페이지

  • `crowny-org/preview/browser-native.html` — meta 태그만 가진 2.5KB 페이지
- 외부 CSS `` 없음 → CrownyBrowser가 번들에서 주입 - 86% 용량 절감 시연 (20.3KB → 2.8KB)

검증

  • A 바이너리: `115MB RSS` WKWebView 정상 기동, stderr 없음
  • B 렌더러: 박스 트리 좌표 완전 정확
  • 프리뷰 서버 `localhost:9876` 유지 중

관련 파일

  • `/Users/ef/CrownyBrowser/native/CrownyBrowser` (실행 바이너리)
  • `/Users/ef/CrownyOS/crownyc/libs/{HTML파서,CSS해석,박스레이아웃}.한선`
  • `/Users/ef/crowny-org/preview/browser-native.html`

잔여 이슈

  • B 렌더러를 뷰.한선 네이티브 그리기와 연결 (현재는 트리 출력만)
  • B: 인라인 레이아웃·텍스트 줄바꿈 개선
  • A: 탭/북마크/히스토리 UI 미구현
  • 둘 다: 실제 HTTPS/TLS (현재 A는 WebKit이 처리, B는 미구현)