8P by neo 7일전 | favorite | 댓글 1개
  • 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 파일에서 조정 가능.
    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 북마크를 통합할 수 있는지 궁금해함

    • 읽고 싶은 모든 것을 오프라인으로 캐시하고 링크 부식을 방지하며 쿼리할 수 있기를 희망함