피드로 돌아가기
Dev.toBackend
원문 읽기
Headless Browser 제거를 통한 Deterministic PDF 생성 아키텍처 전환
Generating PDFs from JSON Instead of HTML: Why Templates Are a Dead End
AI 요약
Context
HTML-to-PDF 파이프라인은 스크롤 기반의 HTML과 고정 페이지 기반의 PDF 간 근본적 설계 불일치로 인한 레이아웃 붕괴 문제를 야기함. 브라우저 엔진 버전 및 환경 설정에 따른 비결정적(Non-deterministic) 렌더링 결과와 무거운 Headless Browser 의존성으로 인한 인프라 오버헤드가 주요 한계점으로 작용함.
Technical Solution
- HTML/CSS 템플릿을 배제하고 문서 구조를 정의한 Structured JSON 모델 도입을 통한 렌더링 결정성 확보
- Page-first 모델 설계를 통해 페이지 경계, 마진, 헤더/푸터를 일급 객체로 처리하여 Table Row 절단 등의 레이아웃 오류 원천 차단
- 외부 CDN 의존성을 제거하고 폰트 데이터를 Base64-encoded buffer 형태로 직접 임베딩하여 환경별 렌더링 일관성 유지
- Chromium 기반 브라우저 엔진을 제거하고 전용 PDF 렌더링 엔진을 사용함으로써 200MB 이상의 바이너리 의존성 및 메모리 점유율 최적화
- Document Extraction API와 Generation API를 동일한 JSON 스키마로 연결하여 데이터 변환을 위한 Glue Code 없는 파이프라인 구성
실천 포인트
- PDF 생성 시 페이지 경계 제어가 빈번하다면 HTML 기반 템플릿 대신 구조화된 데이터 모델 검토 - 렌더링 환경(Docker, Serverless)에 따른 폰트 및 CSS 해석 차이를 방지하기 위해 Asset 임베딩 방식 적용 - Headless Browser 도입 전 Cold Start 시간과 메모리 사용량이 인프라 비용에 미치는 영향 분석 - 데이터 추출(Extraction)과 생성(Generation) 단계의 데이터 포맷을 일치시켜 파이프라인 단순화 시도
태그