# TeaTime - SQLite, IPFS 및 GitHub로 구동되는 분산형 도서관 시스템

> Clean Markdown view of GeekNews topic #17998. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17998](https://news.hada.io/topic?id=17998)
- GeekNews Markdown: [https://news.hada.io/topic/17998.md](https://news.hada.io/topic/17998.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-29T08:33:43+09:00
- Updated: 2024-11-29T08:33:43+09:00
- Original source: [github.com/bjesus](https://github.com/bjesus/teatime)
- Points: 8
- Comments: 1

## Summary

TeaTime은 IPFS, SQLite, GitHub을 기반으로 한 정적 분산형 도서관 시스템으로, 데이터베이스와 파일이 분리되어 있어 쉽게 포크, 복제, 배포가 가능합니다. 사용자는 다양한 기준으로 검색할 수 있으며, IPFS를 통해 파일을 제공받아 시스템의 회복력을 높입니다. Nuxt.js로 개발된 프론트엔드와 JSON 기반 데이터베이스를 통해 사용자 맞춤형 데이터베이스를 생성할 수 있습니다.

## Topic Body

- IPFS, SQLite, GitHub을 기반으로 하는 완전한 정적 분산 라이브러리 시스템  
- Netlify와 GitHub Pages에서 자동 업데이트되는 인스턴스 호스팅 가능  
  
### 분산 라이브러리  
  
- TeaTime 웹 애플리케이션은 데이터베이스와 가져오는 파일로부터 완전히 분리되어 있음.  
- 사용되는 데이터베이스는 GitHub Pages에 게시된 teatime-database 주제가 태그된 GitHub 저장소임.  
- 각 저장소는 SQLite 데이터베이스를 가리키는 config.json 파일을 포함함.  
- 사용자가 검색을 수행하기 전에 사용할 데이터베이스를 선택하고, TeaTime은 sql.js-httpvfs를 사용하여 SQLite 데이터베이스를 쿼리함.  
- SQLite 데이터베이스의 각 행은 라이브러리의 항목이며, 파일 해시 열은 IPFS에서 항목을 가져오는 데 사용됨.  
- 웹 애플리케이션이 정적 사이트이고 데이터베이스가 정적 파일로 구성되어 있어 쉽게 포크, 복제, 배포 가능함.  
- 프론트엔드 인스턴스는 teatime-instance 주제가 태그된 GitHub 저장소임.  
- IPFS에서 파일이 제공되므로 이 분산 아키텍처는 TeaTime의 회복력을 높임.  
  
#### 기능  
  
- 제목, 저자, 연도 또는 형식으로 검색 가능  
- 읽기 기록 유지 및 파일 재열기 시 페이지로 돌아가기  
- 파일을 로컬로 다운로드  
- IndexedDB에 파일 캐시하여 빠른 로딩  
- TeaTime에 파일 드롭하여 렌더링  
- 다크 모드 및 전체 화면 모드  
- 쿠키 없음, 로그인 없음  
- **완전히 분산됨**  
  
#### 프론트엔드 개발  
  
- TeaTime은 Nuxt.js 애플리케이션임.  
- 로컬에서 쉽게 실행 가능: 저장소를 클론하고 다음 단계 수행  
  1. 종속성 설치: `npm install`  
  2. 서버 실행: `npm run dev`  
  3. `http://localhost:3000`으로 이동  
- Nuxt 문서를 참조하여 추가 정보 확인 가능  
  
#### 데이터베이스 생성  
  
- JSON 기반 데이터베이스 저장소를 포크하고 JSON 파일을 필요에 맞게 조정하여 데이터베이스 생성 가능.  
- GitHub Actions가 SQLite 파일을 생성하고 GitHub Pages에 업로드함.  
- TeaTime과 함께 작동할 수 있는 SQLite 데이터베이스를 수동으로 생성하려면 데이터베이스 저장소의 예제를 따름.  
- 각 SQLite 데이터베이스는 아래 스키마를 가진 테이블을 포함함. 열 이름은 `config.json` 파일에서 조정 가능.  
  ```sql  
  CREATE TABLE "books" (  
    "id" INTEGER,  
    "title" TEXT,  
    "author" TEXT,  
    "year" INTEGER,  
    "lang" TEXT,  
    "size" INTEGER,  
    "ext" TEXT,  
    "ipfs_cid" TEXT,  
    PRIMARY KEY("id" AUTOINCREMENT)  
  );  
  ```  
- SQLite 파일이 너무 크면 분할 가능. 데이터베이스 최적화 정보 참고 필요. FTS 사용 권장.  
- 저장소를 GitHub Pages에 게시하고 `teatime-database` 주제를 저장소에 할당  
  
#### 기여  
  
- 코딩을 못하더라도 이 저장소와 좋아하는 데이터베이스 저장소를 포크하여 기여 가능.  
- 저장소를 포크할 때 직접적으로 연결되지 않도록 수동으로 포크하는 것이 좋음 (`git clone` && `git remote add your-origin ...` && `git push your-origin main`).  
- 유용한 데이터베이스 저장소에 별표를 추가하는 것도 좋은 방법임. 이는 TeaTime 사용자 인터페이스에서 데이터베이스의 순서를 결정하여 다른 사용자가 최고의 데이터베이스를 쉽게 찾을 수 있도록 함.

## Comments



### Comment 31823

- Author: neo
- Created: 2024-11-29T08:33:45+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42256104) 
- IPFS 기여자는 IPFS에서 여러 게이트웨이로부터 다운로드를 처리하는 방법을 개선할 수 있는 방법을 제안함
  - @helia/verified-fetch를 사용하면 Fetch와 유사한 API를 통해 CIDs를 수락하고 콘텐츠 라우팅과 P2P 검색을 처리할 수 있음
  - 게이트웨이에 직접 연결할 수 있는 경우 게이트웨이를 전달할 수도 있음

- Pear P2P 프레임워크는 GitHub에서 벗어나 진정한 분산 시스템으로 전환하는 데 도움이 될 수 있음
  - 인덱스가 GitHub에 있어야 한다면 IPFS에 파일을 저장하는 것이 무슨 의미가 있는지 의문을 제기함

- Helia를 사용하여 사용자가 네트워크의 노드로 기여할 수 있도록 하는 것을 고려 중임
  - Helia에 대한 정보를 검색하면서 OrbitDB를 떠올리게 되었음

- 특정 리소스에 접근할 때 CORS 정책으로 인해 차단되는 문제가 발생함
  - 요청의 모드를 'no-cors'로 설정하여 CORS를 비활성화한 상태로 리소스를 가져올 수 있음

- 브라우저에서 모든 작업이 이루어지며, 사용자, 쿠키, 추적이 없음
  - LocalStorage와 IndexedDB를 사용하여 마지막 읽은 위치와 파일 내 위치를 저장함
  - 이 기능을 매우 좋아하며 감사의 뜻을 전함

- TeaTime에서 사용되는 데이터베이스는 GitHub Pages에 게시된 GitHub 저장소임
  - 악의적인 사용자가 이 태그를 사용할 수 있어 보안 문제가 될 수 있음

- 데이터베이스에 무엇이 있는지 모르기 때문에 검색할 내용을 알 수 없음
  - 탐색 기능을 제안함

- 예제 인스턴스를 사용할 수 있는지에 대한 질문이 있음

- Pocket 북마크를 통합할 수 있는지 궁금해함
  - 읽고 싶은 모든 것을 오프라인으로 캐시하고 링크 부식을 방지하며 쿼리할 수 있기를 희망함
