작업 완료 · 2022

컴포넌트 인기도 기반 차등 수집

활성도와 유지보수 신호를 수집해 중요한 컴포넌트를 더 자주 갱신하도록 큐를 구성했습니다.

기간2022
소속래브라도랩스(LabradorLabs)
역할데이터 엔지니어 · 수집 모듈/전략 설계·구현
GraphQLPython스코어링

작업 요약

Stars·Forks·Commits·기여자 수 4종 지표 적용

활성도가 높은 컴포넌트를 더 자주 수집했습니다

오픈소스 생태계 전체를 같은 주기로 수집하면 중요한 컴포넌트와 거의 쓰이지 않는 컴포넌트가 같은 빈도로 자원을 사용합니다. 수집 자원이 한정돼 있어, 우선순위를 활성도 지표 데이터로 정했습니다.

Stars나 commits 같은 지표를 갱신 주기를 조정하는 운영 신호로 썼습니다. 산출한 점수에 따라 실제 갱신 주기가 달라지도록 수집 정책에 반영했습니다.

배경

라이브러리/컴포넌트를 선택할 때는 버전 정보에 더해 커뮤니티 활성도·유지보수 상태 같은 질적 정보가 필요합니다. 이런 신호는 소스 저장소에 흩어져 있어 외부 API로 수집·정량화할 필요가 있었습니다.

접근

  1. 수집

    GitHub·GitLab GraphQL API로 활성도 지표 수집

  2. 점수화

    중요도·인기도를 점수로 산출

  3. 차등 스케줄

    점수가 높은 컴포넌트를 더 자주 갱신

  4. 최신성

    한정된 자원으로 주요 데이터를 최신 상태로 유지

인기도 점수로 우선순위를 매겨 갱신 주기를 차등화했습니다. 크롤링 자원은 점수가 높은 컴포넌트에 먼저 배분했습니다.

아키텍처

전체 구조를 먼저 보고, 크게 열어 세부 내용을 확인하세요.크게 보기ExcalidrawMermaid
GitHub와 GitLab이 활성도 수집기로 합류하고 점수 엔진과 스케줄러를 거쳐 짧은 주기와 긴 주기의 재수집 큐로 갈라지는 구조
GitHub·GitLab의 4종 지표를 점수화하고, 점수가 높은 컴포넌트는 짧은 주기로 낮은 컴포넌트는 긴 주기로 재수집하도록 큐를 구성했습니다.

점수가 높은 컴포넌트는 짧은 주기로, 낮은 컴포넌트는 긴 주기로 재수집되도록 스케줄러가 큐를 구성합니다.

결과

지표 4종 수집Stars·Forks·Commits·기여자 수를 GitHub·GitLab GraphQL API로 정량화
수집 정책 전환전 컴포넌트 동일 주기에서 점수 기반 차등 주기로 바꿔 한정된 크롤링 자원을 재배분
갱신 우선순위점수가 높은 컴포넌트일수록 짧은 주기로 재수집되도록 큐를 구성

역할

데이터 엔지니어로서 수집 모듈 개발, 인기도 점수화, 차등 수집 전략 수립·적용을 직접 맡았습니다. 외부 GraphQL API로 활성도 지표를 모으는 수집기를 만들었고, 차등 수집 정책은 팀 리뷰를 거쳐 적용했습니다. 점수가 높은 컴포넌트는 짧은 주기로, 낮은 컴포넌트는 긴 주기로 재수집 큐에 배치했습니다.

🕷 라이브러리 크롤러 시리즈 ② — ① 멀티 언어 크롤러 구축 · ③ 누락 점검·Python 전환