객체 스토리지에 전자책과 메타데이터를 두는 자가 호스팅 라이브러리 Bookshelf
- Bookshelf는 전자책 라이브러리를 객체 스토리지에서 운영하도록 만든 자가 호스팅 프로젝트이며, GitHub 기준 별 145개와 포크 3개를 기록함
- 작성자는 데이터베이스나 별도 서비스 관리 없이 어디서나 라이브러리에 접근하려는 개인적 필요로 만들었고, Cloudflare R2 무료 등급이면 개인 전자책 라이브러리 용량에 충분하다고 설명함
- 최근 브라우저 PDF 리더를 추가해 위치 저장, 목차, 검색, 레이아웃 선택을 지원하며, 40MB PDF는 128KB 범위 요청 몇 번으로 첫 페이지를 열도록 구현함
- Docker Compose 배포 경로는 Node 22와 이미지 도구 설치를 없애고, 비루트 사용자로 실행하며 게시한 책과 앱이 쓰는 데이터를 단일 볼륨에 저장함
- 작성자는 특정 스토리지 구성에 묶이지 않도록 앞으로 저장소와 배포 선택지를 늘릴 계획임
Hacker News opinions
나는 copyparty로 전자책을 평면 파일로 관리함. OPDS로 KOReader와 Readest에 붙이고, WebDAV와 rclone으로 안드로이드 태블릿 SD 카드에도 동기화함.
BookOrbit는 나온 지 얼마 안 됐는데도 기능이 많더라. 만화, 코믹스, 전자책을 한꺼번에 관리하면서 자원도 과하게 먹지 않는 도구를 찾고 있었음.
BookOrbit 저장소와 PR을 보니 AI를 과하게 쓴 흔적이 보여서 안 쓰기로 했음. 뭘 만들고 있는지 이해한 코드 같지 않았음.
나는 BookOrbit와 KOReader 조합을 아주 만족하며 씀. 하이라이트를 내가 통제하는 오픈소스 소프트웨어에 저장하고, 집의 전자잉크 화면 여러 대에 하이라이트 문구를 하루 한 번씩 돌려 보여줌.
객체 스토리지 자체를 자가 호스팅할 만한 선택지가 더 있으면 좋겠음. Garage, RustFS, VersityGW, SeaweedFS 같은 후보가 있음.
Calibre 자체는 S3를 저장소 백엔드로 지원하지 않음. s3fs 같은 우회 방법은 있고, 나는 애플 생태계 밖이었다면 R2를 썼을 듯함.
audiobookshelf는 오디오북에는 아주 좋지만 EPUB은 진행 위치 저장이 들쑥날쑥하고 페이지 넘김 UI도 아쉬움. 그래서 이 프로젝트를 확인해 보려 함.
Bookshelf를 만든 이유는 개인적으로 DB나 별도 서비스를 최대한 없애면서 어디서나 라이브러리에 접근하고 싶었기 때문임. R2 무료 등급이면 개인 전자책 라이브러리에는 충분했고, 앞으로는 스토리지와 배포 선택지도 늘릴 생각임.
'인프라 최소화'를 말하면서 Cloudflare 독점 서비스를 쓰는 건 자가 호스팅과 잘 맞지 않는다고 봄. SeaweedFS나 MinIO, Garage를 붙이면 결국 Node 프로세스와 SQLite 파일보다 운영할 것이 많아짐.
요즘은 무엇을 호스팅하든 클라이언트 측 종단간 암호화가 필요하다고 봄. 암호화하지 않은 제3자 서버의 전자책은 저작권 규제, 자동 신고, 공급자의 스캔 문제를 만들 수 있어서 Cryptomator를 씀.
Bookshelf 작성자인데, 클라이언트 측 종단간 암호화는 검토해 보겠음. Cryptomator도 이번 의견을 보고 알게 됐음.