Tauri v2 + SolidJS + SQLite + ffmpeg 사이드카로 구현한 크로스플랫폼 사진·영상 관리 앱. 로컬/NAS(SFTP·WebDAV·FTP) 소스, 가상 그리드, 인앱 재생, 태그/이동/삭제/undo, 중복 탐지, 포터블 배포. - archive-db: SQLite 스키마·마이그레이션·단일 writer 스레드 + FTS5 trigram - archive-vfs: VFS 4백엔드(local/sftp/ftp/webdav) + 자격증명(키체인/볼트) - archive-indexer: 스캔·해시·썸네일·중복탐지·태그·파일작업·유지보수 - archive-media: localhost HTTP 미디어 서버(Range) + ffmpeg 스트림 잡 - 프론트: 3-pane UI, justified 가상 그리드, 라이트박스, 중복 검토 패널 Rust 테스트 49개 통과. CI: win x64/arm64 포터블 zip + macOS universal dmg. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
68 lines
3.1 KiB
Markdown
68 lines
3.1 KiB
Markdown
# Archive
|
|
|
|
수만 개의 사진·영상을 빠르게 조회·재생하면서 삭제/태그/이동으로 관리하고,
|
|
중복(완전 동일 + 유사)을 찾아 제거하는 크로스플랫폼 데스크톱 앱.
|
|
|
|
- **플랫폼**: Windows x64 / Windows ARM64 / macOS (Intel + Apple Silicon)
|
|
- **배포**: 포터블(무설치) 우선 — exe 옆 `data/` 폴더가 있으면 포터블 모드로 동작
|
|
- **스택**: Tauri v2 (Rust) + SolidJS + SQLite + ffmpeg 사이드카
|
|
- **소스**: 로컬 디스크, OS 마운트 드라이브(UNC/SMB), 앱내 FTP/SFTP/WebDAV (시놀로지 등)
|
|
|
|
## 개발
|
|
|
|
요구사항: Node 22+, Rust stable(1.95+), (Windows) WebView2 런타임 — Win10/11 기본 탑재.
|
|
|
|
> **이 PC 주의사항**: VS Community 2026에는 MSVC 데스크톱 라이브러리가 없어
|
|
> rustc가 링크에 실패한다(LNK1104: msvcrt.lib). 반드시 **VS Build Tools 2026의
|
|
> vcvars64 환경**에서 cargo를 실행해야 하며, 아래 스크립트가 이를 대신 처리한다.
|
|
|
|
```bat
|
|
npm install
|
|
scripts\dev.cmd :: 개발 실행 (vcvars64 + tauri dev)
|
|
scripts\test.cmd :: 코어 크레이트 헤드리스 테스트 (vcvars64 + cargo test)
|
|
```
|
|
|
|
Windows ARM64 크로스컴파일은 로컬에 ARM64 MSVC 라이브러리가 없어 CI에서만 검증된다.
|
|
로컬에서 하려면 VS Installer에서 "MSVC ARM64/AArch64 빌드 도구" 컴포넌트를 설치할 것.
|
|
|
|
## 구조
|
|
|
|
```
|
|
src/ SolidJS 프론트엔드 (3-pane UI, 가상 그리드)
|
|
src-tauri/ Tauri 셸 (커맨드, 데이터 디렉터리, 미디어 서버 기동)
|
|
crates/
|
|
archive-db SQLite 스키마·마이그레이션·단일 writer 스레드
|
|
archive-vfs VFS 추상화 (local / sftp / ftp / webdav)
|
|
archive-indexer 스캔·해시·썸네일·중복탐지 엔진
|
|
archive-media localhost HTTP 미디어 서버 (Range 스트리밍, ffmpeg 잡)
|
|
```
|
|
|
|
## 배포
|
|
|
|
**Windows 포터블 (무설치)**
|
|
|
|
```bat
|
|
scripts\fetch-ffmpeg.ps1 -Target win64 :: ffmpeg 사이드카 다운로드
|
|
npm run tauri build -- --no-bundle :: 릴리스 빌드
|
|
scripts\package-portable.ps1 -Target x64 :: Archive-<ver>-windows-x64.zip 생성
|
|
```
|
|
|
|
zip을 풀고 `Archive.exe`를 실행하면 됩니다. exe 옆 `data\` 폴더에 인덱스·썸네일이
|
|
저장되므로 폴더째 옮겨도 동작합니다. WebView2 런타임(Win10/11 기본 탑재)이 필요합니다.
|
|
|
|
**macOS (universal)**
|
|
|
|
CI(macos-14)에서 `scripts/fetch-ffmpeg-macos.ps1`로 arm64+x64 ffmpeg를 lipo 결합한 뒤
|
|
`tauri build --target universal-apple-darwin`으로 `.dmg`를 만듭니다. 배포 시 Apple
|
|
Developer ID 서명·공증이 필요하며, 미서명 빌드는 첫 실행 시 우클릭 → 열기로 Gatekeeper를
|
|
통과시켜야 합니다.
|
|
|
|
**Windows ARM64**: CI에서 크로스컴파일로 검증됩니다(로컬은 ARM64 MSVC 툴체인 필요).
|
|
|
|
## 유지보수
|
|
|
|
앱 시작 시 백그라운드로 DB 백업(`archive.db.bak`, VACUUM INTO), 30일 지난 삭제 항목
|
|
하드 퍼지, 썸네일 캐시 LRU 정리(기본 상한 4GB)를 수행합니다.
|
|
|
|
설계 문서: 계획서 참조 (`~/.claude/plans/reflective-watching-toucan.md`).
|