EPUB 제작의 기초/EPUBCheck 오류
EPUB v3 문서에서는 외부 엔티티가 허용되지 않습니다. 외부 엔티티 선언이 발견되었습니다: %1$s.
내.맘.대.로
2025. 9. 29. 07:34
External entities are not allowed in EPUB v3 documents. External entity declaration found: %1$s.
이 오류는 EPUB 파일 내부의 문서(주로 XHTML 파일)가 책 바깥의 다른 파일이나 인터넷 주소에서 내용을 가져오도록 설정되어 있음을 의미합니다. EPUB 3 표준에서는 보안과 안정성 문제로 이러한 '외부 참조'를 엄격히 금지합니다.
책의 특정 페이지에 "3장을 읽으려면, 도서관에 가서 XYZ 책을 빌려오세요"라고 적어두는 것과 같습니다. 📚 EPUB은 모든 내용이 하나의 파일 안에 완전히 포함되어 있어야 하며, 독자나 전자책 뷰어에게 외부에서 무언가를 가져오도록 요구할 수 없습니다.
## 외부 엔티티가 금지되는 이유
- 보안 위험 🔐: 외부 파일이나 인터넷 주소에서 악성 코드를 불러오는 통로로 악용될 수 있습니다.
- 독립성 원칙: EPUB 파일은 인터넷 연결 없이도 모든 기능이 완벽하게 작동해야 하는 '자체 완결형' 패키지입니다.
- 안정성: 만약 참조하는 외부 웹사이트가 사라지거나 인터넷에 연결되어 있지 않으면, 책의 내용이 깨져 보이게 됩니다.
## 해결 방법
해결책은 외부 엔티티 선언을 삭제하고, 만약 해당 콘텐츠가 필요하다면 그 내용을 직접 파일 안에 포함시키는 것입니다.
- 오류가 발생한 XHTML 파일을 텍스트 편집기에서 엽니다.
- 파일의 상단에 있는 <!DOCTYPE ...> 선언 부분을 찾습니다.
- <!ENTITY ... SYSTEM "..." > 형식으로 작성된 외부 엔티티 선언 줄 전체를 삭제합니다.
- 만약 본문에서 해당 엔티티(예: &my-entity;)를 사용했다면, 그 부분을 외부 파일의 실제 내용으로 복사하여 붙여넣어야 합니다.
### 수정 예시
- 수정 전 (오류 예시):
-
XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html [ <!ENTITY external_chapter SYSTEM "http://example.com/chapter3.html"> ]> <html ... > <body> ... &external_chapter; ... </body> </html>
- 수정 후 (올바른 코드): ✅
-
XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html ... > <body> ... <h1>3장</h1> <p>이것은 3장의 내용입니다...</p> ... </body> </html>
반응형