Post

Jekyll 블로그에서 한 글을 여러 형식으로 출력하는 방법

Jekyll로 HTML과 PDF, iCal 등 다양한 형식을 한 번에 생성하는 실무 노하우

Jekyll 블로그에서 한 글을 여러 형식으로 출력하는 방법

대학원 홈페이지에서 마주친 뜻밖의 과제

작년 가을, 퇴임한 대학 교수인 내가 모교의 학술 네트워크 구축 프로젝트에 참여하게 되었다. 학과 세미나 일정을 웹사이트에 공지하는 것이 주요 업무였다. 그런데 곧 문제가 터졌다. 어떤 학생들은 HTML 페이지만으로 충분했지만, 상당수는 스마트폰의 달력 앱에 자동으로 일정을 입력할 수 있는 iCal 파일을 원했던 것이다.

처음엔 naive하게 생각했다. 같은 내용으로 HTML과 iCal 파일을 각각 만들면 되지 않을까? 하지만 Jekyll로 블로그를 운영해본 경험이 있었던 나는 곧 문제의 핵심을 깨달았다. Jekyll의 기본 메커니즘상 하나의 마크다운 파일은 보통 하나의 출력 형식만 생성한다는 것이었다.

Jekyll의 한계와 창의적인 극복법

Jekyll의 기본 아키텍처를 이해하려면 먼저 레이아웃과 확장자의 관계를 알아야 한다. 마크다운 파일을 작성할 때, YAML 프론트매터에서 layout: post 같은 지정자를 사용한다. Jekyll은 이를 기반으로 _layouts/post.html 파일을 찾아 최종 HTML을 생성한다. 하지만 기본적으로는 하나의 레이아웃이 하나의 HTML 결과물만 만든다.

내 고민을 GitHub의 Jekyll 공식 저장소에서 찾은 이슈 #3041이 명확하게 설명하고 있었다. 누군가 이미 같은 문제를 제안했던 것이다. “하나의 포스트/페이지에서 여러 출력 형식을 생성할 수 있으면 어떨까?”라는 주제였다. iCal뿐만 아니라 JSON, RSS, PDF 등 다양한 형식이 필요한 경우가 많았기 때문이다.

공식 해결책을 기다릴 수 없었던 나는 커뮤니티 솔루션들을 연구했다. 그 결과 몇 가지 실용적인 방법을 찾았다.

실무에서 적용한 세 가지 실전 기법

첫 번째 방법: 플러그인을 통한 다중 출력

Jekyll 플러그인을 활용하는 것이 가장 깔끔한 해결책이었다. jekyll-multiple-outputs 같은 커뮤니티 플러그인을 사용하거나, 직접 간단한 Ruby 플러그인을 작성할 수 있다. 내 경우, 세미나 정보를 담은 하나의 마크다운 파일에서 output_format: [html, ical] 같은 YAML 필드를 추가했다. 그러면 Jekyll이 빌드할 때 자동으로 두 가지 형식의 파일을 생성했다.

두 번째 방법: 레이아웃의 유연한 활용

다른 접근은 프론트매터에서 출력 형식을 명시하고, 레이아웃 내부에서 조건부 렌더링을 하는 것이었다. 예를 들어 format: ical 변수를 설정하면, post.html 레이아웃이 이를 감지하여 iCalendar 형식의 콘텐츠를 출력하도록 할 수 있다. 이 방법은 추가 플러그인 없이 작동한다.

세 번째 방법: 별도 파일과 자동화

가장 실용적인 방법은 주 콘텐츠는 HTML로 유지하되, 빌드 후 처리 스크립트로 추가 형식을 생성하는 것이었다. Python이나 Node.js 스크립트로 생성된 HTML 파일을 파싱하여 iCal 형식으로 변환하는 식이다. 이는 Jekyll 종료 후 실행되는 훅을 이용해 완전히 자동화할 수 있다.

실제 효과와 배운 점들

세미나 페이지를 이런 방식으로 개선한 후, 학생들의 반응은 매우 긍정적이었다. 한 번의 포스팅으로 웹페이지와 달력 앱이 동시에 업데이트되니까, 유지보수 부담도 크게 줄었다.

이 경험을 통해 배운 가장 중요한 교훈은 정적 사이트 생성기의 한계를 미리 인식하고, 필요에 따라 창의적으로 우회하는 것이 얼마나 중요한지였다. Jekyll은 완벽하지 않을지 몰라도, 약간의 노력으로 복잡한 요구사항을 충족시킬 수 있는 유연성이 있다.

혹시 당신도 Jekyll 블로그에서 비슷한 필요를 느껴본 적 있다면, 위의 세 가지 방법 중 어느 것이 당신의 상황에 가장 적합할지 한번 검토해보시기 바란다.

This post is licensed under CC BY 4.0 by the author.