Replies: 1 comment
-
|
작업지시자 결정 (2026-05-02) 본 보고서를 보강하여 작업지시자 결정 반영:
결정 근거 (작업지시자 통찰):
이 통찰은 rhwp 의 정체성을 "HWP 뷰어/에디터" 가 아닌 "한국형 DTP 엔진의 오픈소스 재현 + 워드프로세서" 로 재해석. 다층 레이어는 단순 정정이 아니라 정체성 인프라. 상세 분석은 보고서의 Appendix — 역사적 맥락 섹션 (아래) 참조. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
다층 레이어 렌더링 아키텍처 — 기술 조사 보고서
작성: 2026-05-02 (Task #516 Stage 5+ 영역 확장 검토)
상태: 작업지시자 검토 / 후보 선택 대기
관련 이슈: #516 (web Canvas 워터마크), #514 (BehindText 출력 누락 — 완료), #515 (s0:pi=16 표 좌표)
1. 결정 배경
Task #516 의 Stage 4 까지 정정 (CSS filter 적용) 후 작업지시자 시각 판정에서 3 결함이 식별:
세 결함의 공통 근본은 rhwp-studio 의 web 렌더가 단일 Canvas 2D 평면 이라는 구조적 제약. HWP 의 z-order 모델 (BehindText / InFrontOfText / 어울림 / 위아래) 을 단일 픽셀 평면에 평면화하면서 wrap 모드의 의미가 손실.
작업지시자 결정: 다층 레이어 아키텍처 도입. 단순한 2-3 층 분리가 아니라 다층 확장 가능 (multi-layer extensible) + GPU 가속 활용 형태로 설계.
본 보고서는 후보 3 안을 비교하여 작업지시자가 선택할 수 있도록 정리한다.
2. 평가 기준
3. 후보 3 안
후보 A — Multi-Canvas Layered Composition (HTMLCanvasElement × N)
구조:
렌더링 경로:
mix-blend-mode가능globalCompositeOperation = 'multiply'또는 CSSmix-blend-mode: multiplyGPU 가속:
mix-blend-mode는 GPU compositor 단계에서 처리 (Chrome Compositor)width = page_w * scale로 자동다층 확장:
<canvas>추가)behind-table) 추가 시 신규 Canvas 만 추가구현 영향:
render_page_to_layered_canvas(page, &[Canvas; N], wrap_modes)같은 N-Canvas 인자 메서드 추가. 또는render_layer(canvas, layer_kind)호출을 N 번 호출장점:
단점:
ctx.filter만으로 본 task 같은 워터마크 처리 가능하나 복잡한 효과는 한계GPU 가속 정도: 🟨 중간 (브라우저 compositor 의존, 직접 제어 X)
후보 B — WebGPU Single-Texture Compositor (Custom GPU Renderer)
구조:
단일
<canvas>+ WebGPU context. 내부적으로 layer 별 texture 를 GPU 메모리에 보관하고 GPU shader 로 합성.렌더링 경로:
GPUDevice의 fragment shader 로 layer 합성 (blend mode + alpha)GPU 가속:
다층 확장:
구현 영향:
render_page_to_webgpu(canvas, ...)신규 메서드 + WebGPU context 관리장점:
단점:
GPU 가속 정도: 🟥 매우 높음 (직접)
후보 C — Hybrid: HTML Overlay + Canvas + CSS Compositor (Browser-Native)
구조:
렌더링 경로:
<img>또는 SVG<image>로 분리 — DOM 레벨 layerGPU 가속:
will-change: transform또는 transform 적용 시) → 별도 GPU layer 로 합성 → multi-layer 합성이 GPU 단계에서 single-pass다층 확장:
구현 영향:
render_page_layered(page, container_div) -> { mainCanvas, behindImages, frontImages }같은 다중 매체 출력. 또는 별개 함수 (get_behind_images(page),render_main_canvas(page, canvas))<img>생성filter(Stage 4 정정 결과 와 동일 매핑) — 다만<img>에 적용되어 효과가 더 정확 (브라우저 GPU 처리)장점:
단점:
<img>)GPU 가속 정도: 🟧 높음 (브라우저 compositor 자동, 직접 제어 X)
4. 후보 비교 매트릭스
5. 권장안 + 결정 시나리오
시나리오 1 — 현재 우선순위 (M100 v1.0.0, 이슈 #516 본 task) 일정 고려
권장: 후보 C (HTML Hybrid)
근거:
시나리오 2 — 장기 GPU 가속 본격화 (M200 v2.0.0 이상 협업/실시간)
권장: 후보 B (WebGPU) 단계적 도입
근거:
시나리오 3 — 단순 빠른 정정만 필요 (본 task 의 3 결함 만)
권장: 후보 A (Multi-Canvas)
근거:
통합 권장: 후보 C → 후보 B 단계적 마이그레이션 경로
본 보고서의 권장 경로 (작업지시자 확정 — 2026-05-02):
단기 (M100 v1.0.0, 본 task rhwp-studio (web) 에서 그림 회색조/밝기/대비 효과가 적용되지 않음 — CLI SVG 와 정합성 회귀 #516 의 Stage 5+): 후보 C 도입 ✅ 확정
<img>for BehindText / InFrontOfText)중기 (M150~ v1.5.0): 후보 C 의 본문 Canvas 를 Canvas 2D + OffscreenCanvas + WebWorker 로 확장
장기 (M200 v2.0.0, DTP 정체성 본격화): 후보 B (WebGPU) 도입 ✅ 확정
6. 본 task #516 의 적용 결정 (확정)
작업지시자 확정 (2026-05-02): 옵션 2 — 본 task 의 Stage 5+ 로 후보 C 직접 도입
확정 근거:
7. 메모리 / 의존성 / 외부 PR 관계
feedback_v076_regression_origin— 다층 레이어 도입은 다수 fixture 영향 가능. 작업지시자 시각 판정 게이트 필수reference_authoritative_hancom— 한컴 2010 + 2022 가 정답지8. 다음 단계 (작업지시자 확정 후)
Appendix — 역사적 맥락: 다층 레이어가 rhwp 의 정체성 인프라인 이유
A.1 아래아한글의 출시 시점 정체성
아래아한글 (HWP) 1.0: 1989년 출시. 동시대 출판/조판 도구:
작업지시자 통찰 (2026-05-02):
이는 HWP 의 다음 특성에 흔적이 남는다:
A.2 rhwp 의 정체성 재해석
rhwp 는 단순 "HWP 뷰어/에디터" 가 아니라 "한국형 DTP 엔진의 오픈소스 재현 + 워드프로세서 기능" 의 통합 도구. 이는 rhwp 의 장기 비전 (M200+ v2.0.0) 에서 다음 영역을 자연스럽게 포섭:
A.3 다층 레이어가 핵심 인프라인 이유
위 영역들은 모두 layer 모델 위에 자연스럽게 올라가는 기능. 단일 평면 Canvas 는 이를 표현 불가. 따라서:
A.4 단순 워드프로세서 도구와의 차별화
후보 B (WebGPU) 의 비용 (1-2 개월 구현 + 텍스트 렌더러 자체 작성) 은 워드프로세서 한정 사용 사례에서는 합리화 부족. 그러나 DTP 정체성 본격화 시점 (M200) 에서는:
위 가치 영역에서 GPU 직접 제어가 핵심 자산이 됨. 후보 B 는 비용 대비 효과가 비로소 합리화됨.
A.5 정리
이 단계적 경로는 후보 C 가 후보 B 의 디딤돌 이라는 점에서 정합. 본 보고서의 통합 권장 경로는 단순 비용 회피가 아니라 rhwp 의 본질적 정체성을 단계적으로 실현하는 길.
Beta Was this translation helpful? Give feedback.
All reactions