TeaTime - SQLite, IPFS 및 GitHub로 구동되는 분산형 도서관 시스템
(github.com/bjesus)- 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 애플리케이션임.
 - 로컬에서 쉽게 실행 가능: 저장소를 클론하고 다음 단계 수행
- 종속성 설치: 
npm install - 서버 실행: 
npm run dev - 
http://localhost:3000으로 이동 
 - 종속성 설치: 
 - Nuxt 문서를 참조하여 추가 정보 확인 가능
 
데이터베이스 생성
- JSON 기반 데이터베이스 저장소를 포크하고 JSON 파일을 필요에 맞게 조정하여 데이터베이스 생성 가능.
 - GitHub Actions가 SQLite 파일을 생성하고 GitHub Pages에 업로드함.
 - TeaTime과 함께 작동할 수 있는 SQLite 데이터베이스를 수동으로 생성하려면 데이터베이스 저장소의 예제를 따름.
 - 각 SQLite 데이터베이스는 아래 스키마를 가진 테이블을 포함함. 열 이름은 
config.json파일에서 조정 가능.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 사용자 인터페이스에서 데이터베이스의 순서를 결정하여 다른 사용자가 최고의 데이터베이스를 쉽게 찾을 수 있도록 함.
 
Hacker News 의견
- 
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 북마크를 통합할 수 있는지 궁금해함
- 읽고 싶은 모든 것을 오프라인으로 캐시하고 링크 부식을 방지하며 쿼리할 수 있기를 희망함