피드로 돌아가기
I Spent a Week Fighting HTML-to-PDF. Here’s What Finally Worked.
Dev.toDev.to
Backend

DOCX 템플릿 기반 Rust 렌더러 구현으로 PDF 생성 병목 해결

I Spent a Week Fighting HTML-to-PDF. Here’s What Finally Worked.

Graham Sutton2026년 5월 6일4intermediate

Context

HTML-to-PDF 방식의 CSS Print Layout 제어 한계로 인한 페이지 오버플로우 및 헤더/푸터 설정의 기술적 제약 발생. Headless Chrome 등 기존 라이브러리의 렌더링 불일치와 복잡한 설정으로 인한 개발 생산성 저하 직면.

Technical Solution

  • HTML 기반 렌더링을 포기하고 Word(DOCX)의 정교한 Pagination 및 레이아웃 엔진을 활용하는 템플릿 방식 채택
  • Rust 언어를 통한 고성능 PDF 컨버전 파이프라인 구축으로 런타임 오버헤드 최소화
  • Handlebars 스타일의 템플릿 엔진을 구현하여 DOCX 내 조건부 렌더링 및 루프 처리 로직 적용
  • 네트워크 I/O 병목 해결을 위해 원격 URL 기반 이미지 페칭 대신 Base64 인라인 데이터 전송 방식 도입
  • 이미지 집약적 문서 처리를 위한 네트워크 오케스트레이션 최적화 설계

Impact

  • 이미지 병목 제거 시 초당 약 15페이지의 PDF 렌더링 성능 확보

1. 복잡한 레이아웃의 PDF 생성 시 HTML/CSS 대신 DOCX 기반 템플릿 엔진 검토

2. 다수의 외부 리소스 포함 시 Network Overhead 감소를 위해 Base64 인코딩 전송 고려

3. 렌더링 성능 최적화 시 단순 연산 속도보다 리소스 페칭(Fetching) 단계의 병목 여부 우선 확인

원문 읽기