|
| 1 | +# Scriptum |
| 2 | + |
| 3 | +[Scriptum](https://scriptum.rootly.kr)은 한글 스크립트가 없는 YouTube 동영상의 스크립트를 AI로 생성하고, 직접 업로드하여 지식 아카이브를 구축하는 웹 애플리케이션입니다. 사용자는 키워드 검색을 통해 자막 내의 특정 정보를 빠르게 찾고, 해당 시점의 영상을 즉시 재생하여 학습 효율을 높일 수 있습니다. |
| 4 | + |
| 5 | +## 아키텍처 |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | +- 백엔드, ai pipeline은 로컬에서 실행됨 |
| 10 | + |
| 11 | +## 주요 기능 (Key Features) |
| 12 | + |
| 13 | +- **지식 검색 및 아카이브**: 자막 기반의 정교한 검색 기능을 통해 원하는 정보를 정확하게 찾아냅니다. |
| 14 | +- **실시간 영상 동기화**: 검색된 자막 시점으로 영상을 즉시 이동시켜 재생합니다. |
| 15 | +- **사용자 스크립트 관리**: 관심 있는 스크립트를 저장하고 관리할 수 있습니다. |
| 16 | +- **다국어 지원**: 다양한 언어의 자막 데이터를 처리하고 표시합니다. |
| 17 | +- **반응형 UI**: 데스크탑 및 모바일 환경에 최적화된 사용자 인터페이스를 제공합니다. |
| 18 | + |
| 19 | +## 기술 스택 (Tech Stack) |
| 20 | + |
| 21 | +### Frontend |
| 22 | + |
| 23 | +- **Core**: React 19, TypeScript, Vite |
| 24 | +- **Styling**: TailwindCSS v4 |
| 25 | +- **State Management**: React Context / Custom Hooks |
| 26 | +- **Routing**: React Router 7 |
| 27 | +- **Video Player**: React Player |
| 28 | + |
| 29 | +### Backend / BaaS |
| 30 | + |
| 31 | +- **Firebase**: |
| 32 | + - **Authentication**: 사용자 인증 및 관리 |
| 33 | + - **Firestore**: 데이터베이스 (스크립트, 사용자 정보 저장) |
| 34 | + |
| 35 | +### Search Engine |
| 36 | + |
| 37 | +- **Typesense**: 빠르고 강력한 오타 보정 검색 기능 제공 (서버/클라우드) |
| 38 | +- **Fuse.js**: 클라이언트 사이드 경량 검색 지원 |
| 39 | +- **React InstantSearch**: 검색 UI 구현 |
| 40 | + |
| 41 | +### Testing |
| 42 | + |
| 43 | +- **Unit/Integration**: Vitest, React Testing Library |
| 44 | +- **E2E**: Playwright |
| 45 | + |
| 46 | +## 시작하기 (Getting Started) |
| 47 | + |
| 48 | +이 프로젝트를 로컬 환경에서 실행하기 위한 방법입니다. |
| 49 | + |
| 50 | +### 전제 조건 (Prerequisites) |
| 51 | + |
| 52 | +- **Node.js**: v20 이상 권장 |
| 53 | +- **npm** 또는 **yarn** |
| 54 | + |
| 55 | +### 환경 변수 설정 (Environment Setup) |
| 56 | + |
| 57 | +프로젝트 루트에 `.env` 파일을 생성하고 다음 Firebase 설정 값을 입력해야 합니다. |
| 58 | + |
| 59 | +```env |
| 60 | +VITE_FIREBASE_API_KEY=your_api_key |
| 61 | +VITE_FIREBASE_AUTH_DOMAIN=your_auth_domain |
| 62 | +VITE_FIREBASE_PROJECT_ID=your_project_id |
| 63 | +VITE_FIREBASE_STORAGE_BUCKET=your_storage_bucket |
| 64 | +VITE_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id |
| 65 | +VITE_FIREBASE_APP_ID=your_app_id |
| 66 | +VITE_FIREBASE_MEASUREMENT_ID=your_measurement_id |
| 67 | +``` |
| 68 | + |
| 69 | +### 실행 (Run) |
| 70 | + |
| 71 | +개발 서버를 실행합니다. |
| 72 | + |
| 73 | +```bash |
| 74 | +npm run dev |
| 75 | +``` |
| 76 | + |
| 77 | +브라우저에서 `http://localhost:5173`으로 접속하여 확인합니다. |
| 78 | + |
| 79 | +## 스크립트 (Scripts) |
| 80 | + |
| 81 | +- `npm run dev`: 개발 서버 실행 |
| 82 | +- `npm run build`: 프로덕션 빌드 (TypeScript 컴파일 및 테스트 포함) |
| 83 | +- `npm run test`: 유닛 테스트 실행 (Vitest) |
| 84 | +- `npm run lint`: ESLint를 사용한 코드 린트 |
| 85 | +- `npm run preview`: 빌드된 애플리케이션 미리보기 |
| 86 | + |
| 87 | +## 폴더 구조 (Project Structure) |
| 88 | + |
| 89 | +``` |
| 90 | +src/ |
| 91 | +├── assets/ # 이미지, 폰트 등 정적 자원 |
| 92 | +├── components/ # 재사용 가능한 UI 컴포넌트 |
| 93 | +├── context/ # 전역 상태 관리 (Context API) |
| 94 | +├── hooks/ # 커스텀 React Hooks |
| 95 | +├── pages/ # 페이지 단위 컴포넌트 (라우트) |
| 96 | +├── services/ # Firebase 및 외부 API 통신 로직 |
| 97 | +├── types/ # TypeScript 타입 정의 |
| 98 | +├── utils/ # 헬퍼 함수 및 유틸리티 |
| 99 | +└── main.tsx # 진입점 (Entry Point) |
| 100 | +``` |
| 101 | + |
| 102 | +© 2026 Scriptum. All rights reserved. |
0 commit comments