3P by GN⁺ 2일전 | ★ favorite | 댓글 1개
  • 작성자는 해커뉴스의 모든 데이터를 다운로드하고 이를 DuckDB로 분석
  • 20GB에 달하는 전체 아이템(스토리 + 댓글)을 JSON 파일로 저장, 향후 업데이트도 가능하게 구성함
  • DuckDB를 활용해 ‘파이썬’, ‘자바스크립트’, ‘루비’, ‘러스트’ 등의 언급 비율을 주간 단위로 시계열 분석
  • SQL 작성에는 LLM을 활용해 초보자도 쉽게 복잡한 분석을 진행할 수 있었음
  • 해당 프로젝트는 공개된 사이트 hn.unlurker.com에서 확인 가능하며, 누구나 이 데이터를 분석 기반으로 재활용할 수 있음

전체 해커뉴스 데이터를 긁다

  • hn.unlurker.com을 만들며 Go 언어로 자체 HN API 클라이언트를 개발, 최신 Go 기능과 린터를 활용한 개인 프로젝트로 출발
  • Hacker News의 아이템(HN API에서 스토리와 댓글)을 0번부터 순차적으로 모두 다운로드하는 scan 명령어 구현
  • 다운로드는 수 차례 중단됐지만 재시작 가능한 구조로 수 시간 만에 약 20GiB JSON 파일 확보

DuckDB로 텍스트 시계열 분석

  • grep으로 간단한 패턴 검색을 하던 중, 분석 툴로 DuckDB를 시도, 소규모 단일 파일 분석에 최적화된 고속 DB
  • JSON 파일을 테이블로 불러오고, 아이템 텍스트 내 언급된 언어들의 비율을 주간 단위로 계산
  • Python, JavaScript, Java, Ruby, Rust 키워드를 포함한 비율을 12주 이동 평균으로 시각화할 수 있도록 SQL 작성
  • DuckDB의 신규 UI 덕분에 사용이 쉬워졌고, LLM의 도움으로 SQL도 쉽게 작성 가능

결과 및 다음 계획

  • DuckDB는 이 규모의 데이터 분석에 탁월한 성능과 사용성을 제공
  • 데이터 확보 완료 후, 작성자는 농담 반 진심 반으로 "LLM 기반 봇 수백 개를 훈련시켜 해커뉴스를 대체하겠다"고 언급
  • 그러나 실질적인 데이터 수집 및 분석 목적은 달성했으며, 프로젝트는 여기서 마무리
  • 이후 분석은 누군가 이 데이터를 바탕으로 새로운 인사이트를 도출할 사람의 몫이라고 밝힘

참고 링크

Hacker News 의견
  • 두 개의 DB가 Hacker News 테이블을 업데이트하여 다운로드 없이 분석할 수 있음

    • BigQuery는 Google Cloud 계정이 필요하며, 쿼리는 무료 계층일 것 같음
    • ClickHouse는 가입 없이 브라우저에서 직접 쿼리를 실행할 수 있음
  • 과거에 @fesshole Twitter/Bluesky 계정에 대해 비슷한 작업을 했음

    • 전체 아카이브를 다운로드하고 모델을 미세 조정하여 더 기발한 고백을 생성했음
    • 하지만 결국 무고한 기계에게 부적절한 내용을 가르쳤다는 것을 깨달았음
  • Hacker News의 모든 내용을 담은 20 GiB JSON 파일을 가지고 있었음

    • 텍스트만 있는 사이트임에도 불구하고 이 정도의 양에 놀랐음
    • 18년 동안 200억 바이트 이상의 텍스트가 게시되었음
  • Java에 대한 쿼리는 JavaScript의 모든 인스턴스를 포함하므로 Java가 과대 대표됨

  • Hacker News를 다운로드할 때의 네티켓은 무엇인지 궁금함

    • 서버에 부담을 주기 전에 Dang에게 문의해야 하는지, 아니면 대형 기술 회사들이 이미 여러 번 하고 있을 것이라 가정해야 하는지
  • 앞으로 많은 API가 duckdb 파일을 반환하는 옵션을 제공할 것으로 예측됨

    • 어차피 json을 데이터베이스에 로드할 것이라면, 응답으로 데이터베이스를 받는 것이 더 효율적임
  • 비슷한 작업을 수행했음

    • BigQuery 데이터셋을 사용하여 데이터를 parquet로 내보내고 다운로드하여 duckdb로 쿼리했음
  • 모든 Hacker News 콘텐츠를 로컬로 다운로드한 후, LLM 기반 봇을 훈련시켜 기여자로 운영할 수 있음

    • 이는 농담으로 한 말이지만, 언젠가 누군가 시도할 것을 두려워함
  • 누적 차트를 사용하지 말라는 요청

    • 독자의 인식을 왜곡할 가능성이 높음
    • 특정 데이터 포인트의 높이를 판단하기 어렵고, 종속성을 암시할 수 있음
  • 과거에 Hacker News 데이터 덤프를 작성했음

    • 최근 항목이 시간이 지남에 따라 더 많이 업데이트되어, 최근 다운로드한 항목이 더 오래된 항목보다 더 오래된 것처럼 보이게 하는 기능을 구현하면 좋을 것 같음