[Lobsters 요약] Cloudflare Workers, Vectorize, Nostr 기반 자체 호스팅 AI 뉴스 애그리게이터
1
설명
Hacker News, Lobsters, Reddit 등 다양한 소스에서 뉴스를 수집하여 개인화된 AI 뉴스 피드를 제공하는 자체 호스팅 뉴스 애그리게이터가 개발되었습니다.
이 프로젝트는 Cloudflare Workers, Vectorize, D1 및 Nostr 기술 스택을 활용하여 사용자 취향에 맞는 콘텐츠를 선별합니다.
2024년 5월 15일 공개된 이 솔루션은 개인 정보 보호와 데이터 소유권을 강조합니다.
### 배경 설명
최근 몇 년간 개인화된 정보 소비에 대한 요구가 증가하면서, 기존 뉴스 애그리게이터의 한계를 극복하려는 시도가 활발해지고 있습니다. 특히, 사용자의 명시적인 동의 없이 데이터를 수집하고 활용하는 방식에 대한 우려가 커지면서, 자체 호스팅 및 개인 정보 보호를 강화한 솔루션에 대한 관심이 높아지고 있습니다. 이러한 배경 속에서 Cloudflare의 서버리스 컴퓨팅 플랫폼인 Workers와 벡터 데이터베이스 서비스인 Vectorize, 그리고 분산형 소셜 프로토콜인 Nostr를 결합한 새로운 형태의 뉴스 애그리게이터가 등장했습니다. 이 프로젝트는 사용자가 자신의 데이터를 완전히 통제하면서도 AI 기반의 고도로 맞춤화된 뉴스 경험을 얻을 수 있도록 설계되었습니다. 특히, @cf/baai/bge-base-en-v1.5와 같은 최신 AI 모델을 활용하여 텍스트 임베딩을 생성하고, 코사인 유사도(Cosine Similarity)를 통해 사용자의 과거 좋아요 기록과 유사한 기사를 찾아내는 방식은 기존의 키워드 기반 검색이나 단순 분류 방식과는 차별화되는 지점입니다. 이는 사용자가 관심 있는 주제의 미묘한 차이까지도 포착하여 더욱 정교한 뉴스 큐레이션을 가능하게 합니다.
### 프로젝트 개요 및 핵심 기능
delirehberi/news 프로젝트는 Cloudflare Workers, Vectorize, D1, Nostr를 기반으로 하는 완전 자동화된 자체 호스팅 AI 뉴스 애그리게이터입니다. 이 시스템은 Hacker News, Lobsters, Reddit과 같은 인기 있는 소스에서 뉴스를 지속적으로 스크랩합니다. 수집된 각 기사에 대해 Cloudflare Workers AI(@cf/baai/bge-base-en-v1.5 모델 사용)를 활용하여 AI 임베딩을 생성하며, 이를 사용자의 개인적인 좋아요 기록과 비교하여 초개인화된 뉴스 피드를 생성합니다. 주요 기능으로는 사용자의 과거 좋아요를 기반으로 취향에 맞는 기사를 찾아내는 AI 벡터 검색(코사인 유사도 활용), NIP-07을 통해 인증된 사용자의 좋아요 기록을 AI 학습에 활용하고 큐레이션된 피드를 전역 Nostr 릴레이에 재게시할 수 있는 Nostr 통합, 그리고 예약된 크론 작업을 통해 HackerNews, Lobsters, Reddit에서 자동으로 뉴스를 가져오는 멀티 소스 인제스트 기능이 있습니다.
### 아키텍처 및 기술 스택
이 프로젝트의 아키텍처는 현대적인 웹 기술과 Cloudflare의 서버리스 기능을 효과적으로 결합합니다. 프론트엔드는 Vite, Tailwind CSS v4, Vanilla JS를 사용하여 유리질감(glassmorphic) 디자인의 사용자 인터페이스를 제공하며, 인터리브된 피드, 이미지 미리보기, 팔로워 수 표시 등의 기능을 포함합니다. 백엔드 API는 Cloudflare Workers 환경에서 Hono 프레임워크를 사용하여 구축되었습니다. 데이터베이스로는 Cloudflare D1(SQL)을 사용하며, 메타데이터와 768차원 임베딩을 저장하는 벡터 데이터베이스로는 Cloudflare Vectorize가 활용됩니다. 텍스트 임베딩 생성에는 @cf/baai/bge-base-en-v1.5 모델이 사용됩니다. 이러한 구성은 확장 가능하고 비용 효율적인 인프라를 제공하며, 개발자가 인프라 관리 부담 없이 애플리케이션 개발에 집중할 수 있도록 지원합니다.
### 설치 및 배포 과정
프로젝트 설정은 Node.js v22 이상과 Cloudflare 계정을 필요로 합니다. Nostr 기능을 사용하려면 Alby 또는 nos2x와 같은 Nostr 확장 프로그램이 필요합니다. 초기화 과정은 `make init` 명령어를 통해 종속성을 설치하고 설정 템플릿을 복사합니다. 이후 `make db-init` 및 `make vectorize-init` 명령어로 D1 데이터베이스와 Vectorize 인덱스를 프로비저닝하고, `worker/wrangler.jsonc` 파일에 해당 ID와 인덱스 이름을 업데이트합니다. Reddit OAuth 자격 증명 및 Nostr 공개 키와 같은 민감한 정보는 환경 변수로 설정하고 `make push-secrets` 명령어를 통해 Cloudflare의 보안 저장소로 안전하게 푸시됩니다. 프론트엔드 설정은 `frontend/.env` 파일에서 API URL, 사용자 정의 부제목, 테마 등을 구성합니다. 마지막으로 `make deploy` 명령어를 실행하면 Hono 백엔드 API와 Vite 프론트엔드가 Cloudflare Pages 및 Workers에 동시에 배포됩니다. AI 모델 학습을 위한 초기 데이터는 제공된 엔드포인트를 통해 Lobsters, Reddit의 기존 좋아요 기록이나 HackerNews의 JSON 내보내기 데이터를 사용하여 부트스트랩할 수 있습니다.
### 가치와 인사이트
이 프로젝트는 사용자가 자신의 뉴스 소비 데이터를 완벽하게 제어할 수 있다는 점에서 큰 가치를 지닙니다. 자체 호스팅을 통해 데이터 프라이버시를 강화하고, AI 기반의 초개인화된 뉴스 큐레이션을 통해 정보 과부하 시대에 효율적으로 관심 있는 콘텐츠에 접근할 수 있습니다. Nostr 통합은 탈중앙화된 소셜 네트워크와의 연동을 가능하게 하여, 큐레이션된 콘텐츠를 공유하고 커뮤니티 내에서 영향력을 확장할 수 있는 새로운 방법을 제시합니다. 또한, Cloudflare의 서버리스 인프라를 활용함으로써 개발자는 인프라 관리의 복잡성을 줄이고 핵심 기능 개발에 집중할 수 있습니다. 이는 개인 개발자나 소규모 팀이 강력한 AI 기반 서비스를 구축하고 배포하는 데 있어 실질적인 이점을 제공합니다.
### 기술·메타
* **Frontend:** Vite, Tailwind CSS v4, Vanilla JS
* **Backend API:** Hono on Cloudflare Workers
* **Database:** Cloudflare D1 (SQL)
* **Vector Database:** Cloudflare Vectorize
* **AI Model:** @cf/baai/bge-base-en-v1.5
* **Protocol:** Nostr (NIP-07)
### 향후 전망
이 프로젝트의 향후 발전 가능성은 여러 측면에서 기대됩니다. 첫째, AI 모델의 지속적인 발전과 함께 @cf/baai/bge-base-en-v1.5 외에 더 정교하거나 특정 목적에 특화된 임베딩 모델을 통합하여 큐레이션의 정확도를 높일 수 있습니다. 둘째, Nostr 프로토콜의 성장과 함께 더 많은 사용자가 참여하고 큐레이션된 피드를 공유하며 커뮤니티 기반의 콘텐츠 발견 생태계를 구축할 수 있습니다. 셋째, 다양한 뉴스 소스(예: 블로그, 학술 논문 저장소)를 추가하고, 사용자가 직접 소스를 등록하거나 제외할 수 있는 유연성을 강화하는 방향으로 발전할 수 있습니다. 또한, 경쟁 서비스와의 차별화를 위해 사용자 정의 가능한 AI 필터링 규칙, 요약 기능, 다국어 지원 등 추가적인 고급 기능을 도입할 가능성도 있습니다. Cloudflare의 지속적인 서비스 개선 또한 프로젝트의 안정성과 성능 향상에 기여할 것입니다.
📝 원문 및 참고
- Source: Lobsters
- 토론(Lobsters): [lobste.rs](https://lobste.rs/s/u7ls6b/self_hosted_ai_news_aggregator_using)
- 원문: [링크 열기](https://github.com/delirehberi/news)
---
출처: Lobsters · [원문 링크](https://github.com/delirehberi/news)
신고 · 불법·유해·아동 안전(CSAE) 관련 콘텐츠
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.