작업 완료 · 2026

12개 라이브러리 크롤러 누락 점검과 Python 전환

레지스트리 원본과 DB를 대조해 실제 누락을 찾고 재시도·백필 경로를 고쳤습니다.

기간2026
소속래브라도랩스(LabradorLabs)
역할데이터 엔지니어
Go·Javatransformer크롤러

작업 요약

RubyGems 누락 제품 101개 → 4개

스케줄이 정상이어도 수집 누락이 있었습니다

크롤러 프로세스와 스케줄이 정상이어도 일부 패키지나 버전은 빠질 수 있었습니다. 일시적인 HTTP 오류를 완료로 기록하거나, 레지스트리의 대소문자를 잘못 다루거나, 피드에서 한 번 놓친 버전을 다시 확인하지 않는 식으로 원인이 달랐습니다.

한 언어의 수정법을 다른 언어에 그대로 적용할 수 없어서 각 레지스트리 원본과 DB를 직접 비교했습니다. RubyGems에서는 이 비교를 매주 실행했고, 백필 뒤 누락 후보가 101개에서 4개로 줄었는지 같은 명령으로 다시 확인했습니다.

배경

제품 데이터는 Go, Java/Maven, npm, PyPI, RubyGems, Composer, CocoaPods, NuGet 등 언어별 패키지 크롤러에서 시작합니다. 저장소와 실행 방식이 서로 달랐고, 같은 PRODUCT_KEY도 레지스트리와 DB에서 표현이 달라 단순 비교로는 누락 여부를 판단하기 어려웠습니다.

무엇을 어떻게 확인했나

  1. 원본 목록

    레지스트리의 패키지·버전 목록 확보

  2. DB 비교

    생태계별 실제 테이블과 차집합 계산

  3. 재검증

    404·삭제·별칭과 실제 누락 분리

  4. 수정·백필

    크롤러를 고친 뒤 같은 목록으로 재확인

실제로 잡힌 누락

누락 원인은 생태계마다 달랐습니다. 완료 상태를 너무 일찍 기록한 경우, 대소문자와 escape 규칙을 놓친 경우, 레지스트리 피드가 메타데이터보다 먼저 도착한 경우를 각각 다른 방식으로 고쳤습니다.

결과

Go 45,508건 영향 범위세 호출 경로 수정·회귀 테스트 4개, 당시 상태 34의 268건 복구
Maven 1,689개중앙 인덱스와 DB 대조에서 확인한 실제 누락 제품
RubyGems 101→4개백필 뒤에도 주간 전수 비교로 재발 여부 확인
48개 gem·1,310버전기존 크롤러와 같은 형식으로 멱등 백필
Java/Maven Python 전환인덱스 적재와 POM 메타데이터 수집을 분리
12개 생태계 문서저장소별 시작점, 수집 루프, DB 위치, 수정 이력을 코드와 함께 확인

역할

각 언어 담당자는 자기 크롤러의 평소 수정과 운영을 맡았습니다. 제 몫은 12개 생태계에 같은 누락 점검 기준을 적용하고, 레지스트리와 DB를 비교하는 도구를 만들며, 반복되는 결함을 7종으로 기록하는 일이었습니다. Java/Maven Python 전환과 플랫폼 이관용 transformer는 직접 맡았습니다. 다른 담당자가 고친 크롤러는 테스트 결과와 출력 데이터 형식을 함께 확인했습니다.

Java/Maven Python 전환, transformer, 누락 점검 도구는 직접 만들었고, 나머지 크롤러에는 공통 점검 기준을 적용하고 수정 내용을 검토했습니다.

🕷 라이브러리 크롤러 시리즈 ③ — ① 멀티 언어 크롤러 구축 · ② 인기도 기반 차등 수집

2026년 수집처 운영 조건 검토: 수집처별 법적·운영 경계 정리