ePub 2.0은 텍스트 중심의 정적 구조이며, ePub 3.0은 HTML5/CSS3/JavaScript를 지원하여 멀티미디어, 인터랙션, 접근성 기능을 제공하는 국제표준입니다.
- 입력: .epub 파일 (ePub 2.0 이하, 최대 50MB)
- 출력: .epub 파일 (ePub 3.0 Spec 3.2)
Mock 모드에서는 약 8초, 실제 AI API 사용 시에는 파일 크기와 옵션에 따라 30초~2분 소요됩니다.
# 1. 저장소 클론 및 의존성 설치
git clone https://github.com/hayanmind/repub.git
cd repub
pnpm install
# 2. API 서버 실행 (터미널 1)
pnpm dev:api # http://localhost:3001
# 3. 웹 대시보드 실행 (터미널 2)
pnpm dev # http://localhost:3000브라우저에서 http://localhost:3000 접속합니다. API 키 없이도 Mock 모드로 전체 기능을 데모할 수 있습니다.
네. 프론트엔드는 API 서버에 연결되지 않아도 데모 모드로 동작합니다. 업로드 페이지에서 샘플을 선택하거나 파일을 업로드하면 demo- 접두사가 붙은 작업 ID로 변환 진행 애니메이션이 표시됩니다. 미리보기, 리포트 페이지도 데모 데이터로 자동 전환됩니다.
- 메인 대시보드 (/) - 시스템 개요 확인
- 업로드 (/upload) - 샘플 ePub 선택 -> "이 샘플 사용" 클릭
- 변환 진행 (/convert) - 5단계 파이프라인 애니메이션 확인
- 미리보기 (/preview) - Before/After 탭에서 AI 변환 구간 하이라이트 확인, 퀴즈 풀기 체험
- 리포트 (/report) - KPI 13개 항목 달성 현황, 접근성 점수 확인
- 설정 (/settings) - Mock/AI 모드 상태 확인
API 키가 설정되지 않은 상태에서 자동으로 활성화되는 데모 모드입니다. AI API를 호출하지 않고 미리 준비된 데모 데이터를 사용합니다.
| 항목 | Mock 모드 | Real API 모드 |
|---|---|---|
| API 키 | 불필요 | OPENAI_API_KEY 필수 |
| 퀴즈 생성 | 미리 정의된 데모 퀴즈 | GPT-4가 본문 기반 실시간 생성 |
| TTS 음성 | 데모 플레이어 UI만 표시 | ElevenLabs 실제 음성 생성 |
| 이미지 생성 | 비활성화 | Stability AI 실제 이미지 생성 |
| 변환 시간 | ~8초 (시뮬레이션) | 30초~2분 (API 호출 포함) |
| 용도 | 시연, 개발, 테스트 | 실제 서비스 운영 |
.env 파일에 API 키를 설정하고 API 서버를 재시작합니다:
# .env
OPENAI_API_KEY=sk-...
ELEVENLABS_API_KEY=... # 선택
STABILITY_API_KEY=... # 선택또는 웹 대시보드의 설정 페이지 (/settings)에서 API 키를 입력할 수도 있습니다.
네, Mock 모드로 동작하여 데모용 결과를 생성합니다. 실제 AI 기능은 OpenAI 등의 API 키가 필요합니다.
- 텍스트 처리: OpenAI GPT-4
- TTS: ElevenLabs
- 이미지: Stability AI (선택)
- 대안: Anthropic Claude (선택)
JSON 스키마 검증, HTML 문법 검사, 음성 싱크 정확도 측정 등 자동화된 품질 검증 파이프라인을 적용합니다. 검증 실패 시 최대 3회 재생성을 시도합니다.
- KWCAG 2.1 (한국형 웹 콘텐츠 접근성 지침)
- EPUB Accessibility 1.1 (W3C)
- WCAG 2.1 AA (웹 대시보드)
ePubCheck 4.x와 Ace by DAISY를 통한 자동 검증을 수행하며, 결과를 리포트 페이지 (/report)에서 확인할 수 있습니다. 현재 KWCAG 2.1 기준 충족율 92%를 달성했습니다.
fixtures/samples/디렉토리에 .epub 파일을 추가합니다.fixtures/samples/metadata.json파일에 샘플 정보를 추가합니다:
{
"samples": [
{
"id": "my-sample",
"title": "샘플 제목",
"author": "저자명",
"language": "KO",
"description": "샘플 설명",
"filename": "my-sample.epub",
"fileSize": 150000,
"source": "출처"
}
]
}- API 서버를 재시작하면 업로드 페이지 (/upload)의 샘플 목록에 표시됩니다.
fixtures/create-samples.ts 스크립트를 사용합니다:
npx tsx fixtures/create-samples.ts이 스크립트는 프로그래밍 방식으로 ePub 2.0 파일을 생성합니다 (JSZip 사용).
- API Zero-Retention 정책 적용 (LLM에 전송된 데이터 비저장)
- 전송 구간 암호화 (HTTPS/SSL)
- 변환 완료 후 서버 내 원본 파일 자동 삭제 옵션
현재 데모 버전은 단일 파일 변환에 초점을 맞추고 있습니다. 프로덕션 배포 시 작업 큐 (BullMQ/Redis)를 통한 배치 변환을 지원할 예정입니다.
NEXT_PUBLIC_API_URL 환경 변수로 설정합니다. 미설정 시 http://localhost:3001을 기본값으로 사용합니다.
# .env.local (프론트엔드용)
NEXT_PUBLIC_API_URL=https://api.example.com- Node.js 20 이상이 설치되어 있는지 확인하세요:
node -v - pnpm 9 이상이 설치되어 있는지 확인하세요:
pnpm -v node_modules삭제 후 재설치:rm -rf node_modules && pnpm install
- API 서버가 실행 중인지 확인하세요:
pnpm dev:api - 포트 3001이 사용 중이지 않은지 확인하세요:
lsof -i :3001 - 브라우저에서 http://localhost:3001/api/health 접속하여 서버 상태를 확인하세요
- 설정 페이지 (/settings)의 "시스템 정보" 섹션에서 API 서버 연결 상태를 확인할 수 있습니다
- 파일이 유효한 ePub 형식(.epub, ZIP 구조)인지 확인하세요
- 인코딩 깨짐이 있는 경우 자동 복구를 시도합니다
- 심각한 구조 오류 시 에러 리포트를 확인하세요
- 원본 파일에 XHTML 콘텐츠가 포함되어 있는지 확인하세요
- OPF 파일의 spine 항목이 올바른지 확인하세요
- API 서버 콘솔에 출력되는 로그를 확인하세요
- ePub 뷰어는 실제 변환 작업이 완료된 후에만 동작합니다
- 데모 모드에서는 뷰어 대신 Before/After HTML 비교 뷰를 사용하세요
- 브라우저 콘솔에서 에러 메시지를 확인하세요
pnpm install이 완료되었는지 확인하세요fixtures/디렉토리에 ePub 샘플 파일이 있는지 확인하세요- 없다면
npx tsx fixtures/create-samples.ts를 실행하세요