피드로 돌아가기
Dev.toBackend
원문 읽기
An AI News Aggregator That Clusters 30+ Sources in Real-Time — Here's How It Works
Best AI News Today가 30개 이상의 소스를 15분 주기로 크롤링하고 Union-Find 클러스터링으로 중복 제거 및 품질 점수 산정으로 실시간 AI 뉴스 집계
AI 요약
Context
AI 개발자들은 Hacker News, Reddit, 기술 블로그, 랩 공지 등 여러 플랫폼에서 동일한 뉴스 스토리를 반복적으로 확인하고 있다. 같은 발표가 여러 플랫폼에 퍼져 있어 2~3개 버전을 읽어야 동일 기사임을 파악할 수 있는 상황이다.
Technical Solution
- RSS 피드, Reddit JSON API, Medium RSS에서 15분 주기로 30개 이상 소스 수집 및 파이프라인 처리
- Jaccard 계수 0.5 이상의 제목 유사도 기반 Union-Find 알고리즘으로 중복 스토리 클러스터링
- 소스 티어, 발행 시간, 콘텐츠 깊이, 참여도를 조합하여 0~100 범위의 품질 점수 산정
- 4시간 내 3개 이상의 소스에서 동일 기사 출현 시 속보로 자동 태깅
- 컴파일된 정규표현식 패턴(65개 브랜드, 40개 모델, 50명 인물) 약 195개를 클라이언트 측 useMemo와 useRef(Map) 캐싱으로 스토리별 엔티티 매칭
- React 19 + Vite + Tailwind 4 + Framer Motion + Three.js 프론트엔드에서 JSON 사전 직렬화 메모리 캐싱으로 SQLite 읽기 및 JSON.parse() 제거
- Playwright 기반 동적 렌더링으로 600개 이상 페이지 사전 워밍 및 /llms.txt, /llms-full.txt 구조화 마크다운 인덱스 제공으로 ClaudeBot, GPTBot, PerplexityBot 크롤러 대응
Impact
- 정규표현식 패턴 매칭 시간: 약 195개 패턴 기준 10,000회 테스트 1ms 이하
- 평균 응답 시간: 약 6ms (메모리 캐싱 적용 후)
Key Takeaway
실시간 데이터 집계 시스템에서 메모리 사전 직렬화 캐싱, 클라이언트 측 컴파일된 정규표현식 캐싱, Union-Find 기반 중복 제거는 데이터베이스 쿼리를 제거하고 마이크로초 단위 응답 시간을 달성하는 핵심 패턴이다. 단일 Hetzner VPS에서 30개 이상 소스 처리는 아키텍처 설계보다 캐싱 전략과 알고리즘 선택의 중요성을 보여준다.
실천 포인트
뉴스 애그리게이션이나 소셜 미디어 모니터링 시스템을 구축할 때 JSON.stringify() 결과를 메모리에 보관하고 요청마다 재직렬화하지 않으면 I/O 병목 없이 평균 응답 시간을 10ms 이하로 유지할 수 있다. 또한 정규표현식 패턴을 useMemo로 컴파일하고 결과를 useRef(Map)에 캐싱하면 클라이언트에서 수백 개의 엔티티 매칭을 1ms 이하에 완료할 수 있다.