처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.08.04 46

20년 된 문서 변환기 판독(Pandoc), 하스켈 취미가 학술 인프라가 되기까지

Hacker News 원문 보기

문서 하나를 마크다운에서 워드로, LaTeX에서 HTML로 바꾸는 일은 실무에서 생각보다 자주 발생하는 골칫거리다. 형식마다 규칙이 다르고, 변환 도구는 대개 특정 입력과 출력 조합에만 최적화되어 있기 때문이다. 판독(Pandoc)은 바로 이 문제를 정면으로 다룬 도구다. 2006년 8월 3일 존 맥팔레인(John MacFarlane)이 자신의 웹사이트에 GPL 라이선스로 공개한 첫 버전은 약 3,000줄의 하스켈 코드에 불과했고, 의존성이라고는 GHC 표준 라이브러리뿐이었다. 그로부터 20년, 판독은 200회 넘는 릴리스를 거치며 50개 이상의 문서 형식을 지원하고 수백만 대의 컴퓨터에 설치된, 하스켈로 작성된 가장 유명한 프로그램이 되었다.

흥미로운 점은 이 프로젝트의 출발이 '문서 변환기를 만들자'는 기획이 아니었다는 사실이다. 맥팔레인은 철학 논리학자인 지인의 블로그를 통해 하스켈을 접했고, 언어를 제대로 배우려면 무언가를 직접 만들어봐야 한다는 생각에 마크다운 파서를 짜기로 했다. 문서 변환은 하스켈을 공부하려는 동기에서 파생된 결과물이었던 셈이다. 학문적 딴짓의 산물이 20년짜리 오픈소스 인프라로 자란 배경에는, 언어를 익히는 즐거움과 자신의 학술 작업에 실제로 쓸모가 있었다는 두 축이 있었다.

정규식 대신 추상 구문 트리를 택하다

판독이 기술적으로 갈라선 지점은 아키텍처였다. 당시 펄, 파이썬, 루비, PHP로 구현된 마크다운 처리기들은 대부분 정규식 치환을 연달아 적용해 마크다운을 곧바로 HTML로 바꿨다. 반면 판독은 파서 컴비네이터(parsec 라이브러리)로 문서를 파싱해 실제 추상 구문 트리(AST)를 만들고, 이 트리를 여러 형식으로 렌더링했다. 이 구조는 정규식 방식의 온갖 예외 상황을 피할 수 있어 더 안정적이었고, 무엇보다 확장성이 뛰어났다. 입력 파서(reader) N개와 출력 렌더러(writer) M개를 만들면 N×M 조합의 변환을 지원할 수 있었기 때문이다. 이 설계 덕분에 reStructuredText 리더, LaTeX 라이터를 하나씩 붙이는 것만으로 지원 형식이 눈덩이처럼 불어났다.

실무자 관점에서 이 대목은 시사하는 바가 크다. 형식 변환을 '입력에서 출력으로 가는 직통 경로'로 짜면 형식이 늘어날 때마다 조합이 폭발하지만, 중간에 공통 표현(AST)을 두면 각 형식은 그 표현과의 관계만 정의하면 된다. 오늘날 데이터 파이프라인이나 API 게이트웨이 설계에서 반복적으로 등장하는 중간 표현 전략을, 판독은 20년 전 문서 영역에서 실증한 셈이다.

없으면 만들어 쓴 생태계

판독의 역사는 필요한 라이브러리가 하스켈에 없을 때 직접 만들어버린 기록이기도 하다. 2008년 판독 1.0에서 ODT를 지원하려면 zip 아카이브 생성 기능이 필요했지만 그런 하스켈 패키지가 없었고, 맥팔레인은 zip-archive를 새로 작성했다. 구문 강조를 위해서는 Kate 편집기의 XML 구문 정의를 파싱하는 highlighting-kate를, 수식 변환을 위해서는 texmath를 만들었다. 이렇게 축적된 부속 라이브러리들은 판독 바깥에서도 하스켈 생태계의 자산이 되었다. 인용과 참고문헌을 CSL 스타일로 자동 생성하는 기능도 이 시기에 안드레아 로사토의 citeproc-hs를 통해 들어왔다.

프로젝트가 커진 데에는 외부 기여자들의 힘이 컸다. 2006년 데비안 패키징을 자원한 터키 개발자 레자이 옥타시부터, 2014년 org-mode 입력을 추가한 알베르트 크레빈켈, 워드 docx 리더(변경 이력 인식 포함)를 만든 제시 로젠탈, 그리고 옥스퍼드 학생 시절 참여해 훗날 GHC 컴파일러의 핵심 관리자가 된 매튜 피커링까지, 서로 다른 시간대에서 밤새 쌓인 기여가 이어졌다. 구글 코드에서 깃허브로의 이전(2010년)과 Hackage 패키지 저장소의 등장도 가시성을 크게 높였다.

커먼마크와 남은 아이러니

판독의 확장 문법 작업은 마크다운 표준화 논의로도 번졌다. 맥팔레인은 제프 애트우드가 주도하고 깃허브, 레딧, 스택오버플로 관계자가 참여한 명세화 작업에 관여했고, 논의가 흐지부지되자 2014년 직접 명세와 자바스크립트·C 파서를 작성했다. 마크다운 창시자 존 그루버가 'Standard Markdown'이라는 이름에 강하게 반발하면서 프로젝트명은 커먼마크(commonmark)로 바뀌었고, 오늘날 대부분의 마크다운 처리기가 이 핵심 규칙을 따른다. 다만 흥미로운 아이러니가 남는다. 커먼마크 명세의 저자가 만든 판독은 여전히 커먼마크 이전의 자체 마크다운 파서를 기본으로 쓴다. 몇몇 핵심 확장이 아직 커먼마크 코어로 구현되지 않았기 때문으로, 사용자는 markdown과 gfm, commonmark 등 파싱 방식을 골라야 한다.

2017년 판독 2.0은 아키텍처 측면에서 또 한 번의 전환점이었다. 그전까지 대부분의 리더와 라이터는 부작용 없는 '순수' 함수였지만, 파일 포함 구문이나 이미지 크기 산정처럼 입출력이 필요한 형식을 온전히 다루려면 한계가 있었다. 판독 팀은 PandocMonad 타입클래스를 도입해, 통제된 테스트용 순수 인스턴스와 실제 입출력을 허용하는 인스턴스를 함께 제공하는 방식으로 이 문제를 정리했다. 안정성과 실용성 사이의 균형을 타입 시스템으로 풀어낸 이 선택은, 판독이 왜 하스켈 위에서 오래 버틸 수 있었는지를 압축해 보여준다. 취미로 시작한 도구가 Quarto와 주피터 노트북 같은 학술 저작 도구에 녹아든 것은, 견고한 중간 표현과 확장 가능한 설계를 처음부터 붙들었기 때문이다.

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.