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 파일은 인터넷 연결 없이도 모든 기능이 완벽하게 작동해야 하는 '자체 완결형' 패키지입니다.
  • 안정성: 만약 참조하는 외부 웹사이트가 사라지거나 인터넷에 연결되어 있지 않으면, 책의 내용이 깨져 보이게 됩니다.

## 해결 방법

해결책은 외부 엔티티 선언을 삭제하고, 만약 해당 콘텐츠가 필요하다면 그 내용을 직접 파일 안에 포함시키는 것입니다.

  1. 오류가 발생한 XHTML 파일을 텍스트 편집기에서 엽니다.
  2. 파일의 상단에 있는 <!DOCTYPE ...> 선언 부분을 찾습니다.
  3. <!ENTITY ... SYSTEM "..." > 형식으로 작성된 외부 엔티티 선언 줄 전체를 삭제합니다.
  4. 만약 본문에서 해당 엔티티(예: &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>
반응형