닥북(DocBook)으로 epub 파일(전자책 표준 형식) 만들기

Twitter icon류광, 2014-02-11 00:02
닥북으로 epub 파일을 만들기 -- 개방 표준 형식의 파일들과 오픈소스 소프트웨어만으로 전자책을 만들어 봅시다.

이 글에서는 소프트웨어 문서화 분야에서 널리 쓰이고 있는 닥북 형식의 문서를 전자책의 사실상 표준인 EPUB 파일로 변환하는 방법을 설명합니다. epub 파일을 만들어 주는 도구는 많이 있지만, 이 글에서 말하는 방법은 다음 두 가지 면에서 의미가 있습니다.

  1. 표준 DocBook 형식을 따르는 문서를 원본으로 사용하기 때문에 저작, 변환, 검색, 추출 등에서 자동화 여지가 아주 큽니다. 예를 들어 프로그램 소스 코드의 주석이나 데이터베이스로부터 자동으로 닥북 문서를 만들어내고 그것을 다시 자동으로 전자책으로 변환해서 소스코드 문서화나 보고서를 생성하는 것은 현업에 바로 적용할 수 있는 수준으로 가능하고, 이론적으로 닥북으로 변환할 수 있는 것이면 무엇이든 epub로도 변환할 수 있습니다. 예를 들어 오픈오피스나 MS 워드, 아래아한글(HWP) 파일을 자동으로 epub 파일로 변환하는 것도 가능합니다.
  2. 변환 과정에 쓰이는 도구들이 모두 오픈소스입니다. '공짜'라는 점도 중요하겠지만, 필요하다면 자신의 요구에 맞게 수정해서 사용할 수 있다는 점이 더욱 중요합니다.

위키 백과 EPUB에서 보듯이, epub 파일은 기본적으로 HTML 파일들과 관련 정보 파일을 zip 형식으로 압축한 것입니다. 따라서 닥북 문서를 epub 파일로 만드는 기본적인 절차는 다음과 같습니다.

  1. 닥북 문서를 적절한 HTML 파일들과 관련 정보 파일로 변환한다.
  2. 그 파일들을 몇 가지 규칙에 따라 하나의 zip 파일로 압축한다.

1번 과정을 위해서는 xsltproc 같은 XSLT 프로세서와 epub 파일을 위해 마련된 XSLT 스타일시트들이 필요합니다. Windows 사용자라면 그냥 닥북 한국의 Windows용 닥북 모음집(이하 간단히 닥북 모음집) 하나로 해결이 됩니다. 다른 주요 OS들에도 닥북 변환을 위한 패키지가 마련되어 있을 것입니다. 이 글에서는 닥북 모음집을 기준으로 합니다.

2번 과정을 위해서는 zip을 지원하는 압축 프로그램이 필요합니다. 잠시 후 설명할 "몇 가지 규칙"을 만족하는 문제나 이 방법의 중요한 장점인 '자동화'를 위해서는 일반적인 GUI 압축 프로그램보다는 명령줄 기반 압축 프로그램이 유리한데요. 이 글에서는 Info-ZIP의 명령줄 유틸리티 zip.exe를 사용합니다. "zip.exe"으로 웹을 검색해 보면 미리 빌드된 실행 파일을 구할 수 있을 것입니다.

좀 더 구체적인 과정으로 들어가서, 닥북 문서를 epub를 위한 파일들로 변환하는 가장 간단한 방법은 DocBook XSL 스타일시트의 epub/docbook.xsl을 적용하는 것입니다. xsltproc을 사용한다고 하면, 명령줄(cmd.exe)에서 다음을 실행하면 됩니다.

> xsltproc 닥북_XSL_스타일시트/epub/docbook.xsl 닥북문서.xml

닥북 모음집에서는 다음과 같이 하면 됩니다. 기본적으로 위의 방법과 같은 결과를 내지만, 타이핑이 적고 저자 이름이 이름 성 순서가 아니라 성 이름 순서로 표시되는 등의 추가적인 장점이 생깁니다.

> docbookto html {dbk-epub.xsl} 닥북문서.xml

변환이 성공적이면 현재 디렉터리에 OEBPS라는 디렉터리와 META-INF라는 디렉터리가 생깁니다. OEBPS 디렉터리에는 전자책의 내용을 구성하는 HTML 파일들이, META-INF에는 전자책의 전체적인 구성에 대한 정보를 담은 파일이 들어 있습니다. 여기까지가 1번 과정입니다.

이제 2번 과정으로 넘어가서, 내용 파일들을 zip으로 압축하기 전에 추가적인 파일 하나가 더 필요합니다. 바로 mimetype이라는 파일인데요. 이 파일은 application/epub+zip 라는 문자열을 담은 텍스트 파일입니다. 이 파일은 한 번만 만들어 두고 새 epub를 만들 때마다 재활용하면 됩니다. 텍스트 편집기를 이용해서 만들어도 되고, 명령줄에서 바로 만들 수도 있습니다:

> copy CON mimetype
application/epub+zip^Z

마지막의 ^Z는 Ctrl+Z입니다.

이제 필요한 파일들이 모두 만들어졌습니다. 그런데 이 파일들을 무작정 zip으로 압축하면 안 됩니다. 앞에서 잠깐 언급한 "몇 가지 규칙"을 지켜야 하는데, 다음과 같습니다.

  1. 압축 파일의 첫 파일은 반드시 mimetype 파일이어야 한다.
  2. 그 mimetype 파일은 압축률이 0%이고(즉, 압축하지 않고 그대로 포함) 추가적인 헤더가 없어야 한다.

개인적인 경험으로, GUI 압축 프로그램으로는 이 두가지를 제대로 만족하기가 어려웠습니다. 심지어 7zip의 명령줄 버전 7za.exe로도 잘 안 되고, 앞에서 언급한 zip.exe로 하는 게 제일 확실하더군요. 만들고자 하는 epub 파일 이름이 test.epub라고 할 때, 다음과 같이 하면 됩니다.

> del test.epub
> zip -0 -X test.epub mimetype
> zip -r test.epub OEBPS META-INF

설명하자면, 우선 같은 이름의 epub 파일이 있을 수도 있으므로 먼저 삭제해 줍니다. 그런 다음 mimetype 파일 하나만으로 test.epub 압축 파일을 만듭니다(zip 파일을 먼저 만든 후 확장자를 바꿀 필요 없이 처음부터 확장자를 .epub로 하면 됩니다). -0이라는 옵션은 압축을 하지 말라는 뜻이고 -X는 추가적인 헤더를 포함시키지 말라는 뜻입니다. 이 두 옵션이 앞에서 말한 두 가지 규칙을 지키는 데 핵심입니다. 마지막으로 OEBPSMETA-INF를 test.epub에 추가합니다.

이렇게 해서 하나의 epub 파일이 완성되었습니다. 완성된 epub 파일이 표준을 제대로 따르는지를 EPUB Validator에서 검사해 볼 수 있으니 활용하시고요.

이상은 가장 기본적인 과정이고, 이미지 파일을 참조하는 등의 좀 더 복잡한 형태의 닥북 문서를 변환할 때에는 1번과 2번 사이에서 추가적인(그러나 자동화가 가능한) 처리가 필요합니다. 이에 대해서는 다음에 좀 더 이야기해 보겠습니다.

태그: DocBook 닥북

comments powered by Disqus