Typst로 PDF 생성 서버를 직접 운영한다? 셀프 호스팅 문서 생성 도구 'Papermake'

핵심 요약
Papermake는 Typst 템플릿을 기반으로 PDF를 생성해 주는 HTTP 기반 문서 생성 서버입니다. Rust로 작성된 단일 실행 파일에 S3 호환 스토리지와 ClickHouse만 있으면 자체 인프라에 구축할 수 있어, 인보이스·계약서·리포트처럼 반복적으로 PDF를 만들어야 하는 서비스에 특히 유용합니다.
한 줄로 정리하면 이렇습니다.
"Typst 템플릿을 Docker 이미지처럼 버전 관리하고, REST API 한 번 호출로 PDF를 받아보는 서버"
어떤 문제를 해결하나요?
서비스에서 PDF를 생성하다 보면 흔히 이런 고민을 하게 됩니다.
- 템플릿이 여기저기 흩어져 있어 어떤 버전이 실제로 쓰이는지 알기 어렵다
- 클라이언트나 각 서버마다 렌더링 도구를 설치·관리해야 한다
- "이 PDF가 어떤 템플릿과 어떤 데이터로 만들어졌는지" 추적이 안 된다
Papermake는 템플릿의 중앙 집중식 관리, API 기반 렌더링, 버전 관리, 생성 이력(Audit Trail) 관리를 한 번에 제공하는 것을 목표로 합니다.
주요 기능 살펴보기
1. 코드로 관리되는 템플릿 (Templates as Code)
템플릿은 불변(Immutable) 버전과 가변(Mutable) 태그를 함께 지원합니다. Docker Registry를 써보셨다면 바로 감이 오실 텐데요.
invoice:v1.0.0— 한 번 만들어지면 절대 변경되지 않는 고정 버전invoice:latest— 항상 최신 버전을 가리키도록 갱신되는 태그
덕분에 운영 환경에서는 고정 버전을 지정해 안정성을 확보하고, 개발 환경에서는 latest로 편하게 최신 템플릿을 테스트할 수 있습니다.
2. 서버 측 렌더링 (Server-side Rendering)
클라이언트에 Typst를 설치할 필요가 전혀 없습니다. HTTP API 호출만으로 서버가 PDF를 렌더링해서 돌려주기 때문에, 어떤 언어·환경에서든 손쉽게 연동할 수 있습니다.
3. 콘텐츠 주소 지정 저장소 (Content-addressable Storage)
템플릿을 SHA-256 해시 기준으로 저장합니다. 동일한 내용의 템플릿은 중복 저장되지 않아, Git과 유사한 방식으로 저장 공간을 효율적으로 사용합니다.
4. 완전한 감사 추적 (Audit Trail)
모든 렌더링 작업에 대해 입력 데이터와 출력 결과의 해시를 기록합니다. 즉, 생성된 모든 PDF가 어떤 템플릿과 어떤 데이터로 만들어졌는지 정확히 역추적할 수 있습니다. 금융·법무 문서처럼 감사 요건이 있는 도메인에서 특히 매력적인 기능입니다.
5. 가벼운 셀프 호스팅 구성
필요한 구성 요소는 단 세 가지입니다.
- Rust로 작성된 단일 실행 파일
- S3 호환 객체 스토리지 (MinIO 등)
- ClickHouse
무거운 외부 의존성 없이 자체 인프라에서 운영할 수 있어, 문서 데이터를 외부 SaaS에 보내기 어려운 환경에서도 도입을 검토해 볼 만합니다.
마치며
LaTeX보다 가볍고 현대적인 조판 도구로 주목받는 Typst를 '서버'로 감싸, 템플릿 레지스트리 + 렌더링 API + 감사 로그까지 묶어낸 점이 Papermake의 핵심입니다. 인보이스, 증명서, 리포트 등 정형화된 PDF를 대량으로 생성해야 한다면 GitHub 저장소(rkstgr/papermake)를 한번 들여다보시길 추천합니다.
출처: GeekNews