크라우니브라우저 Path A — 로컬직통 라우팅 통합 (2026-05-28)
개요
크라우니브라우저 Path A (macOS WKWebView 기반)에 외부 도메인을 자동으로 127.0.0.1:포트로 우회하는
로컬직통 라우팅을 통합. 169개 가용 도메인 중 dot이 있는 157개를 대상으로 함.
문제점: WKWebView는 macOS 시스템 네트워크 스택을 사용하므로 한선씨 HTTP스택.한선을 통과하지 않음.
해결: 3가지 경로 제공 — 사용자가 선택해 쓸 수 있음.
산출물
| 파일 | 역할 |
|---|---|
/Users/ef/crowny-local/hosts-patch.sh | /etc/hosts 토글 (157도메인 → 127.0.0.1) |
/Users/ef/crowny-local/로컬프록시.한선 | 한선씨 HTTP 포워딩 프록시 (포트 18888) |
/Users/ef/crowny-local/로컬프록시.toau | 컴파일된 바이너리 (152KB) |
/Users/ef/crowny-local/로컬프록시.sh | start/bg/stop/status 진입 스크립트 |
/Users/ef/CrownyBrowser/native/crowny-browser.m | CROWNY_LOCAL_PROXY=1 환경변수로 프록시 사용 |
/Users/ef/CrownyBrowser/native/Makefile | -framework Network 추가 |
3가지 옵션 비교
A옵션 — /etc/hosts 패치 (간단, 시스템 전역)
가장 단순. DNS 단계에서 도메인 → 127.0.0.1로 강제. 모든 앱에 영향.
장점: 설정 1회로 모든 클라이언트(브라우저/curl/Node 등) 동작 단점: 시스템 전역, sudo 필요, 게이트웨이 우회 (직접 백엔드 포트로 접속)
bash# 적용 (sudo)
sudo /Users/ef/crowny-local/hosts-patch.sh on # 157 도메인 → 127.0.0.1
# 상태 확인
/Users/ef/crowny-local/hosts-patch.sh status
# 미리보기 (적용 전)
/Users/ef/crowny-local/hosts-patch.sh preview
# 제거
sudo /Users/ef/crowny-local/hosts-patch.sh off
마커: # === CROWNY LOCAL DIRECT — BEGIN === ~ === END === 블록으로만 변경.
백업: /etc/hosts.crowny.bak (1회 자동).
DNS 캐시 자동 플러시 (dscacheutil + mDNSResponder).
주의: 백엔드가 포트별로 떠있어야 함. 게이트웨이 :8080 우회하므로 TLS/Trident/리버스프록시 기능은 사라짐. 개발 직통 용도.
B옵션 — 한선씨 로컬프록시 (격리, 브라우저 설정)
로컬프록시.한선 (한선씨 HTTP 포워딩 프록시)을 포트 18888에 띄움.
WKWebView가 이 프록시를 사용하도록 proxyConfigurations 설정.
장점: 격리됨 (시스템 영향 없음), 한선씨 통과 → 로깅/필터 추가 가능 단점: macOS 14.4+ 필요, 브라우저 빌드/환경변수 설정 필요 제한: MVP는 직렬 처리, HTTPS는 직통 connect-relay만 지원
bash# 프록시 시작
/Users/ef/crowny-local/로컬프록시.sh bg # 백그라운드
/Users/ef/crowny-local/로컬프록시.sh start # 포그라운드
/Users/ef/crowny-local/로컬프록시.sh status
/Users/ef/crowny-local/로컬프록시.sh stop
# 브라우저 빌드 + 프록시 모드 실행
cd /Users/ef/CrownyBrowser/native && make
CROWNY_LOCAL_PROXY=1 ./CrownyBrowser
검증 결과 (2026-05-28):
- 컴파일 OK (1397 토큰, 5510 큐브, 152KB)
- 포트 18888 LISTEN 확인 (
lsof -iTCP:18888) - bogus host → HTTP 502 ("매핑 없음: bogus.example.com")
- docs.crowny.org → HTTP 200 (실제 docs 서버 응답 10964 bytes forward)
- spear.crowny.org → HTTP 200 (실제 spear 서버 응답)
C옵션 — WKURLSchemeHandler (향후, 깊은 통합)
crowny:// 같은 custom scheme만 가로채는 방식. 기존 crowny-internal:// 핸들러 확장.
모든 매핑 도메인을 crowny:// prefix로 바꿔야 하므로 도메인 URL을 그대로 못 씀.
장점: 시스템 영향 0, 외부 도구 불필요
단점: 도메인 URL 그대로 안 됨 (사용자가 crowny://docs.crowny.org/ 같이 입력)
상태: 미구현. 향후 작업 대상.
권장 옵션 — A (hosts 패치)
이유:
- 가장 단순. 한 번 적용하면 끝
- 다른 도구(curl, Node, 다른 브라우저)에서도 동일하게 동작 → 디버깅 일관성
- B는 macOS 14.4+ 제약 + HTTPS 한계
- 게이트웨이를 우회하므로 직통 백엔드 개발 시 더 빠름
한선씨 동반 검증
로컬프록시.한선= 한선씨 단일 원본 →.toau1:1 컴파일crowny-browser.m= WKWebView 통합 필수 (macOS native API).
crowny-browser.한선에 로컬직통 옵션 3가지 문서 추가.
hosts-patch.sh= bash. 한선씨로 표현하기엔/etc/hosts텍스트 처리 단순.
lbv 본체에 hosts-on/off 명령 추가 가능 (한선씨로).잔여 이슈
- HTTPS 미지원 — 로컬프록시는 plain HTTP만 forward. WKWebView가 https://로 접근하면
- 로컬프록시 동시성 — MVP는 직렬 1연결. 다탭 동시 로딩 시 느림.
- WKWebView proxy 검증 —
CROWNY_LOCAL_PROXY=1로 실제 도메인 입력 후 트래픽이
nw_relay_hop_create API 정확성은 macOS 14.4+ 의존.
- lbv 매핑 갱신 — gateway.yaml 변경 시
/tmp/lbv-map자동 갱신 필요.
로컬프록시.sh refresh 또는 lbv 리스트 호출로 수동.학습DB 등록
crowny_hosts_patch—/etc/hosts마커 블록 토글 패턴crowny_local_proxy— 한선씨 HTTP forwarding proxy 패턴 (Host 헤더 파싱)
관련 파일
/Users/ef/crowny-local/lbv— gateway.yaml 매핑 추출 (157 도메인)/Users/ef/crowny-gateway/gateway.yaml— SSOT (서비스 목록 단일 원본)/tmp/lbv-map— 추출된 도메인|포트|name (refresh 시 갱신)/Users/ef/CrownyBrowser/CLAUDE.md— Path A 기본 구조