🔒 내부용 · 비배포 (포트폴리오에는 일반화 버전만 공개) · 출처: repo-note + Jira/Confluence live audit 2026-07
0한눈에
- 대상: 언어별 오픈소스 라이브러리 크롤러(Go=
crawler-lib-golang, Java/Maven 등) + 신규 데이터 플랫폼 이관용 transformer.
- 목표: 멀티 언어 크롤러를 일관된 현대 구조로 재정비하고, 수집 데이터를 신규 데이터 플랫폼으로 이관.
- 핵심 키워드: 레지스트리 전체 패키지 모니터링, 패키지 매니저 API rate limit, 대소문자 누락 수정, 12개 생태계 온보딩·개선 이력 문서화.
1왜 했나
언어마다 따로 발전한 크롤러가 구조·동작이 제각각이라 유지보수와 신규 소스 편입이 어려웠다. 동시에 수집 데이터를 신규 데이터 플랫폼으로 옮겨야 했고, 레지스트리는 계속 변하므로 신규·변경 패키지 추적과 수집 정확도가 관건이었다.
2진행 순서
- 레지스트리 전체 패키지 모니터링 연구 (npm Replicate Registry, PyPI Simple Index 등)로 신규·변경 패키지 추적 방식 정립
- 패키지 매니저 API
rate limit 조사 → 누락 없이 안정적으로 수집할 전략 수립
- 언어별 크롤러(Go, Java/Maven 등)를 일관된 현대 구조로 재정비
- 수집 데이터를 신규 데이터 플랫폼으로 변환·적재하는 transformer 개발
- 12개 생태계별 온보딩 가이드와 개선 이력 페이지를 짝으로 만들고, Jira 상위 작업과 하위 문서화 작업으로 완료 상태를 추적
Go 크롤러는 인덱스(index.golang.org)를 게시 이벤트 로그로 보고, 존재 여부는 proxy.golang.org로 판정하는 구조. 자세한 V2 이벤트 그레인/스키마는 repo-note ai/repo-notes/crawler-lib-golang.md 참고.
3대규모 누락 데이터 심층 분석
Go 크롤러에서 대규모 누락이 관측되어 원인을 유형별로 파고들었다. 대표 원인은 모듈 경로 식별자의 대소문자 차이로 인한 비교 누락이었다.
- Go 모듈 경로는 대소문자를 구분하지만, 다운스트림 비교/저장 계층이
ai_ci(대소문자 무시)라 AOC2022 와 aoc2022 가 같은 키로 충돌 → 케이스가 다른 모듈이 덮어써지거나 누락.
- 수정 방향: V2 큐(list) 식별자 컬럼을
utf8mb4_0900_as_cs로 두고, 다운스트림 version/product도 case-sensitive 테이블(gatheringdb)로 라우팅. 상세는 repo-note의 "gatheringdb case-sensitive migration".
- 그 외 패턴: proxy-only(pkg.go.dev 404), declared-diff, alias_git, subpath 등 "Missing 패턴 카탈로그" 참고.
- 전수 조사 범위는 12개 언어 크롤러의 누락이며, 7종 결함 유형(seq=0 고정 / 증분 미동작 / 증분 누락 / product_key 인코딩 오류 / organization 누락 / release_date 누락 / LICENSE 컬럼 혼용)으로 분류했다. Java는 누락률 16.99%를 확인하고 재수집을 완료했다.
- 일일 점검: NPM 3,825,366 패키지 중 누락 890개를 약 104분 검사로 식별하는 루틴을 운영한다. 목표 누락률은 0%.
4온보딩 포인트
- 크롤러 현대화는 레지스트리 추적 → rate limit 기반 수집 전략 → 구조 통일 → transformer 이관 순서로 본다.
- "없는 데이터"는 진짜 없는 게 아니라 대소문자·alias·subpath·proxy-only 같은 식별/판정 문제일 때가 많다 — 먼저 패턴 카탈로그를 의심.
- 존재 판정은 항상
proxy.golang.org 기준. pkg.go.dev 404는 부재의 근거가 아니다.
- 연계: 데이터 플랫폼/파이프라인 표준화, 오브젝트 스토리지 전환은 각각 별도 문서.
- 문서화 결과물은 “현재 구조를 읽는 온보딩”과 “왜 고쳤는지 보는 개선 이력”을 분리해서 본다. 신규 인원은 온보딩 → 개선 이력 → 실제 repo 순서로 따라가면 된다.
5공개(포트폴리오)와의 차이
공개 버전(human/portfolio/items/crawler-modernization.html)은 내부 식별자(repo id crawler-lib-golang, 내부 테이블명 TB_*·gatheringdb, 컬렉션 ai_ci/as_cs 콜레이션 세부, 구체 모듈 예시)를 제거하고, 문제·접근·임팩트 중심으로 일반화했다. 일반 기술/오픈소스 명칭(npm·PyPI·Maven·Go·transformer·OpenSSF·rate limit)은 공개에도 유지. 이 내부 문서는 본인 참고/온보딩용.
🕷 라이브러리 크롤러 시리즈 ③ — ① 멀티 언어 크롤러 구축 · ② 인기도 차등 수집 · ③ 크롤러 현대화