Pandoc 20년: Haskell 학습 프로젝트에서 범용 문서 변환기로

1 week ago 13

Haskell 학습용 Markdown 파서로 출발한 Pandoc은 20년간 200회 넘게 릴리스되며 51개 입력·76개 출력 형식과 3,876가지 변환을 지원하는 도구로 성장함 정규식으로 Markdown을 HTML로 직접 바꾸는 대신 추상 구문 트리(AST) 를 만들고 reader와 writer를 분리해, N개 reader와 M개 writer만으로 N×M 변환을 지원함 템플릿, Markdown 확장, YAML 메타데이터, JSON·Lua 필터, CommonMark, 인용·참고문헌 처리에 이어 docx·EPUB·Jupyter·Typst·WASM까지 적용 범위를 넓혀옴 Haskell의 강한 타입 시스템과 순수 함수는 대규모 변경과 부작용 통제를 도왔으며, PandocMonad 추상화로 실제 I/O와 샌드박스 실행을 함께 지원함 LLM도 문서 형식을 변환할 수 있지만, 현재 Pandoc은 낮은 에너지 소비와 결정적 출력, 높은 신뢰성에서 앞서며 의도 이해가 필요한 변환에서는 향후 LLM이 더 나아질 가능성이 있음 Haskell 학습에서 시작된 문서 변환기 2006년 8월 3일 공개된 Pandoc 0.1은 약 3,000줄의 Haskell 코드로 구성됐으며, GHC 표준 라이브러리 외에는 의존성이 없었음 Markdown, reStructuredText, HTML, LaTeX를 서로 변환하고 RTF와 S5로 출력할 수 있었음 이후 20년 동안 200회 넘게 릴리스됐고, Haskell로 작성된 가장 인기 있는 프로그램이 됐으며 전 세계 수백만 대의 컴퓨터에 설치됨 50개가 넘는 문서 형식, 자동 인용·참고문헌 생성, Quarto와 Jupyter Notebook 통합을 지원하게 됨 문서 변환기를 먼저 구상하고 Haskell을 선택한 것이 아니라, Haskell을 배우기 위한 프로젝트로 Markdown 파서를 만들면서 출발함 Greg Restall의 글을 통해 Haskell에 관심을 갖고 A Gentle Introduction to Haskell을 읽음 Haskell이 파서와 컴파일러 작성에 적합하고 파서 조합기 라이브러리 parsec를 제공한다는 점에서 Markdown 파서를 선택함 당시 Perl·Python·Ruby·PHP 구현은 연속적인 정규식 변환으로 Markdown을 HTML로 직접 바꿨지만, Pandoc은 파서 조합기로 실제 AST를 생성함 정규식 구현에서 생기는 여러 변칙을 피할 수 있어 더 안정적이었음 N개 re...

Read Entire Article