---
title: "ePub에서 HTML이 달라지는 방식"
published: 2026-01-02T23:11:32.000Z
canonical: https://jeff.news/article/337
---
# ePub에서 HTML이 달라지는 방식

ePub은 일반 HTML이 아닌 XHTML을 사용하며, XML 네임스페이스, 제한적 CSS 지원, epub:type 시맨틱 속성 등 웹 개발자가 알아야 할 차이점을 정리한 글

## ePub에서 HTML이 달라지는 방식

- ePub은 일반 HTML이 아니라 **XHTML**을 사용함. XML 기반이라 self-closing 태그 필수, 네임스페이스 선언 필수, 문법 오류 하나면 e-리더가 바로 에러를 뱉음
- 수십 년 전 HTML을 XML 위에 재구축하려던 XHTML 프로젝트가 웹에서는 실패했지만, ePub 세계에서는 아직도 현역임

## CSS는 되긴 되는데...

- e-리더는 브라우저에 비하면 구석기 시대 수준이라 `:not()`도 리스크 있고, `:is()` 같은 건 지원 안 된다고 보는 게 맞음
- XHTML이니까 CSS에서도 네임스페이스를 인식해야 함. `q[lang]`이 아니라 `@namespace xml` 선언 후 `q[xml|lang]`으로 셀렉터를 써야 동작함

## MathML, SVG, 그리고 epub:type

- HTML5에서는 MathML/SVG 태그를 그냥 쓰지만, XHTML에서는 루트에 네임스페이스를 선언하고 `m:math`, `svg:svg` 같은 접두사를 붙여야 함
- `epub:type` 속성으로 미주(endnote), 참조(noteref) 같은 시맨틱을 표현할 수 있음. e-리더가 이를 인식하면 모달로 미주를 보여주는 식
- `epub:type`은 DPUB WAI-ARIA role 값으로 대체되는 추세이긴 한데, Apple Books에서도 아직 제대로 지원이 안 됨
- Z39.98-2012 시맨틱 어휘로 로마 숫자 같은 더 세밀한 의미 표현도 가능하긴 한데, 지원하는 리더는 거의 없음

## ePub 만드는 법

- `META-INF/container.xml` → 패키지 파일(매니페스트 + 스파인) → XHTML 파일들 → zip으로 묶어서 `.epub`으로 확장자 변경하면 끝
- 직접 구조 잡기 귀찮으면 Standard Ebooks 툴셋 추천: `se create-draft --white-label`로 스캐폴딩, `se build`로 빌드하면 됨

## 핵심 포인트

- ePub은 XHTML 기반이라 self-closing 태그와 네임스페이스가 필수
- e-리더의 CSS 지원은 제한적이며 네임스페이스 인식 셀렉터 필요
- epub:type으로 미주 등 시맨틱 표현 가능하나 DPUB WAI-ARIA로 전환 중
- Standard Ebooks 툴셋으로 ePub 스캐폴딩과 빌드 가능

## 인사이트

웹 기술을 안다고 ePub을 바로 만들 수 있는 건 아님. XHTML의 XML 유산이 곳곳에 영향을 미침
