한선씨 웹엔진 vs WebKit — 정직 비교
작성일 2026-06-11 · 대상 엔진/Users/ef/CrownyBrowser/src/한선씨웹엔진.한선측정 환경: macOS arm64,hanseonc_high→ TOAU →crownyc run(CROWNY_STD=libs) 원칙: 과장 금지. 측정값·소스 사실만 기록. 미실측은 미실측이라 명시.
0. 한 줄 현 상태
크롬엔진(Blink/V8) 0건. crowny:// 같은 내부 페이지는 순수 한선씨 엔진으로 렌더 가능. 일반 웹(임의 HTML/CSS/JS)은 현재 여전히 WebKit(WKWebView, Path A 래퍼)에 의존하며, 한선씨 엔진으로의 전환은 진행 중(부분 구현)이다.
- 순수 한선씨 엔진은 WebKit/WKWebView를 한 줄도 호출하지 않는다. 소스 내 "WebKit" 문자열 5건은 전부 "WebKit 없음"을 명시하는 주석이다.
- 일반 웹을 WebKit 없이 동등하게 띄우는 단계까지는 아직 도달하지 못했다(아래 미지원 표 참조).
1. 한선씨 엔진이 현재 실제로 렌더하는 것
한선씨웹엔진.한선은 HTML 문자열을 직접 파싱 → DOM 병렬배열 → 블록 흐름 레이아웃 → cmd(INIT/RECT/TEXT/END)로 발행한다. cmd는 두 경로로 재사용된다.
crownyc의 fb_rgb 네이티브 프레임버퍼 렌더 (crownyc.c 내 fb_rgb 참조 36건 확인)native/렌더브라우저.한선(cmd → HTML 변환, 파일 존재 확인)
1.1 측정값 (실측)
| 항목 | 값 | 출처 |
|---|---|---|
컴파일(hanseonc_high) | 약 0.030초 | 1회 측정 |
| 토큰 / 큐브 | 1929 토큰 / 7250 큐브 | 컴파일 로그 |
| TOAU 바이너리 | 203,000 바이트 | wc -c |
실행(crownyc run) 1회 | 35.7–36.2 ms | 5회 측정(아래) |
| 발행 cmd 줄 수 | 20줄 | wc -l /tmp/웹렌더.cmd |
| DOM 노드 수 | 13개 | 자가검증 출력 |
| cmd 길이 | 702 바이트 | 자가검증 출력 |
crownyc run 5회 렌더 지연 (실측):RUN1 = 36.2 ms
RUN2 = 35.9 ms
RUN3 = 36.1 ms
RUN4 = 36.1 ms
RUN5 = 35.7 ms
평균 ≈ 36.0 ms (편차 ±0.3 ms)
주의: 이 36 ms는 VM 프로세스 기동 + 파싱 + 레이아웃 + cmd 파일 쓰기까지의 전체 1회 실행 시간이다. 샘플 HTML(약 300자, 13 노드) 기준이며, 대형 페이지에서의 시간은 미측정이다. WebKit의 페이지 로드와 직접 비교 가능한 동일 벤치마크는 아직 만들지 않았다.
자가검증 5종(cmd 줄수>15 / 제목 TEXT / 문단 TEXT / cmd파일+INIT / 링크·리스트 TEXT) 전부 통과(=티). 단 시각적 화면 표시는 디스플레이가 필요하므로 미실측(엔진 스스로 "시각 표시는 디스플레이 필요·미실측"이라 보고).
1.2 지원 기능 (가능)
| 기능 | 한선씨 엔진 | 근거 |
|---|---|---|
| 텍스트 노드 + 공백 정규화 | 가능 | 공백정규화() 연속공백→단일 |
| 블록 흐름 레이아웃(세로 누적) | 가능 | 레이아웃발행() _y 누적 |
| 제목 h1(28px #2C1810) / h2(22px 골드 #C9A961) | 가능 | ctx 분기 |
| 문단 p(15px 본문) | 가능 | 기본 스타일 |
| div 배경색 카드(RECT 띠) | 부분 | 고정 6px 띠로 단순화 |
| 리스트 li 불릿(골드 •) + 들여쓰기 | 가능 | _좌여백+20, 불릿 발행 |
| 링크 a (코랄 #D97757) | 가능(색만) | 색 분기. 클릭/네비게이션 없음 |
| br / 줄바꿈 | 가능 | _y += 20 |
| 1280×800 뷰포트 + y<800 클립 | 가능 | 발행_TEXT y>=800 무시 |
2. WebKit이 하는 것 vs 한선씨 엔진 (정직 비교표)
| 영역 | WebKit | 한선씨 엔진 | 상태 |
|---|---|---|---|
| 텍스트 렌더 | O | O | 가능(폭측정 없는 nowrap) |
| 블록 레이아웃 | O | O | 세로 누적만 |
| 배경색 | O | △ | 고정 6px 띠 근사 |
| 링크 표시 | O | △ | 색만, 동작 없음 |
| 리스트 | O | O | 1단계 불릿 |
| 인라인 자동 줄바꿈(wrap) | O | X | 한 노드=한 줄 nowrap |
| 박스 모델(패딩/마진/테두리) | O | X | 정밀계산 없음 |
| 중첩 div 실제 높이 추적 | O | X | 고정 띠로 단순화 |
| CSS 선택자/스타일시트 | O | X | 클래스 키워드 4종(gold/coral/cream/card)만 |
| 이미지(img) | O | X | 미지원 |
| 표(table) | O | X | 미지원 |
| 폼(form/input) | O | X | 미지원 |
| flexbox / grid | O | X | 미지원 |
| JavaScript 실행 | O | X | 미지원(엔진 자체에 JS VM 없음) |
| 미디어(video/audio) | O | X | 미지원 |
| 한글 폭 측정 기반 정확 좌표 | O | X | 폭 측정 없음 |
3. 정직한 결론
- 크롬엔진 의존도: 0 (Blink/V8 미사용 — 사실).
crowny://등 내부/단순 HTML: 순수 한선씨 엔진으로 렌더 가능 (cmd 20줄 발행, 36 ms 실측 — 사실).- 일반 웹: 현재 WebKit(Path A 래퍼)에 의존. 한선씨 엔진으로 완전 전환은 진행 중이며, wrap/박스모델/CSS/이미지/JS/폼/미디어가 미지원이라 임의 웹페이지를 WebKit 없이 정확히 띄우지는 못한다(정직 보고).
- 시각적 픽셀 출력은 디스플레이 필요로 헤드리스 미실측. 검증은 cmd 줄수·구조·텍스트 포함까지만 확인.
4. 관련 파일
- 엔진:
/Users/ef/CrownyBrowser/src/한선씨웹엔진.한선 - cmd 출력(실측 산출):
/tmp/웹렌더.cmd(20줄) - cmd→HTML 변환기:
/Users/ef/CrownyBrowser/native/렌더브라우저.한선 - 네이티브 fb_rgb 렌더:
/Users/ef/CrownyOS/crownyc/crownyc.c(fb_rgb 참조 36건) - v2 커스텀 렌더 모듈(장기):
/Users/ef/CrownyBrowser/src/v2/ - Path A WebKit 래퍼(현 일반웹 경로):
/Users/ef/CrownyBrowser/native/crowny-browser.m
5. 잔여 이슈 (전환 완료까지)
- 인라인 자동 줄바꿈(wrap) — 한글 폭 측정 + 줄 분할 좌표
- 박스 모델(패딩/마진/테두리) 정밀 계산 + 중첩 div 실제 높이 추적
- CSS 선택자/스타일시트 파서(현재 키워드 4종만)
- 이미지/표/폼/flexbox/미디어
- JS 실행 엔진(현재 전무)
- 디스플레이 시각 검증(현 헤드리스 미실측) — 실제 픽셀 대조 단계 필요