← 기술 목록으로
GoJava / MavennpmPyPIRubyGemsComposerCocoaPodsNuGettransformerOpenSSF
0작업자의 메모
크롤러 문제는 한두 개 버그를 고쳐도 금방 다시 돌아옵니다. 언어별로 구현 방식이 다르고 누락 원인이 기록되지 않으면 새 사람이 들어와도 같은 조사를 반복하게 됩니다.
그래서 누락률과 결함 유형을 먼저 정리하고 V2 구조와 transformer로 옮겼습니다. 이후 12개 생태계별로 온보딩 가이드와 개선 이력 문서를 짝으로 남겨, “크롤러가 돈다”보다 “왜 누락됐고 어떻게 다시 막는지 설명할 수 있다”에 초점을 맞췄습니다.
1배경
제품 데이터의 기반은 언어별 오픈소스 라이브러리(패키지) 수집 크롤러입니다. Go, Java/Maven, npm, PyPI, RubyGems, Composer, CocoaPods, NuGet처럼 언어·패키지 매니저마다 별도로 발전해 온 크롤러들이 구조와 동작 방식이 제각각이라, 유지보수와 신규 소스 편입이 어려웠습니다.
- 언어별 크롤러가 제각각의 구조로 운영 → 일관성·운영 인계가 어려움
- 수집 데이터를 신규 데이터 플랫폼으로 옮겨야 하는 이관 과제가 동시에 존재
- 레지스트리가 끊임없이 변하므로 신규·변경 패키지 추적과 수집 정확도가 핵심
2접근
① 레지스트리 추적전체 패키지 모니터링 연구로 신규·변경 추적
→
② 수집 전략패키지 매니저 API rate limit 조사 후 전략 수립
→
③ 크롤러 현대화언어별 크롤러를 일관된 현대 구조로 재정비
→
④ 플랫폼 이관transformer로 신규 데이터 플랫폼에 적재
- 레지스트리 전체 패키지 모니터링 연구: npm Replicate Registry, PyPI Simple Index 등을 활용해 신규·변경 패키지를 추적하는 방식을 연구.
- 수집 전략 수립: 패키지 매니저 API의
rate limit을 조사해 누락 없이 안정적으로 수집할 전략을 정의.
- 언어별 개선 범위 정리: Java/Maven, Go, RubyGems, Composer, CocoaPods, NuGet, npm, PyPI, Swift Package Index, C++ 계열처럼 개선·이관 대상이 되는 크롤러를 같은 기준으로 비교할 수 있게 묶음화.
- 온보딩·개선 이력 문서화: 12개 생태계 각각에 대해 “현재 구조를 설명하는 온보딩”과 “왜 고쳤는지 남기는 개선 이력”을 분리해, 코드 수정 결과가 운영 지식으로 남도록 정리.
- transformer 개발: 수집한 데이터를 신규 데이터 플랫폼 형식으로 변환·적재하는 변환기를 개발.
3수집 정확도 개선
Go 크롤러에서 대규모 누락 데이터가 관측되어 원인을 심층 분석했습니다. 핵심 원인 중 하나는 모듈 경로 식별자의 대소문자 차이로 인한 비교 누락이었습니다.
- Go 모듈 경로는 대소문자를 구분하는데, 비교 과정에서 대소문자가 다른 모듈이 동일하게 취급되어 일부 데이터가 누락.
- 12개 언어 크롤러의 누락을 전수 조사하고 결함을 7종 유형으로 분류 — seq 값 0 고정, 증분 수집 미동작, 증분 수집 누락, product_key 인코딩 오류, organization 누락, release_date 누락, LICENSE 컬럼 혼용.
- Java 크롤러는 누락률 16.99%를 확인한 뒤 누락분 수집을 완료해 정상화. 전 언어에서 목표 누락률 0%를 기준으로 점검.
- NPM은 전체 약 3,825,366개 패키지 대비 누락 890개를 약 104분 검사로 식별하는 일일 점검 체계를 운영.
4임팩트
일관된 구조 — 멀티 언어 크롤러를 일관된 현대 구조로 재정비
이관 기반 — 수집 데이터의 신규 데이터 플랫폼 이관 기반 마련
정확도 향상 — 대소문자 등 누락 원인을 잡아 수집 정확도 개선
지속 추적 — 레지스트리 변화·rate limit을 반영한 수집 전략 확립
지식 이전 — 12개 생태계 온보딩·개선 이력 문서로 운영자가 누락 원인과 재발 방지 구조를 바로 따라갈 수 있게 정리
일일 누락 점검 — NPM 등 대규모 레지스트리의 누락을 매일 검사하는 점검 체계로 목표 누락률 0% 관리
운영 관측성 — product/version insert·update를 분리해 배치별 신규 유입과 갱신량을 로그로 확인할 수 있는 기반 마련
5역할
데이터 엔지니어링 리드로서 레지스트리 추적 연구 → 수집 전략 수립 → 크롤러 현대화 → 플랫폼 이관 기반 마련까지 데이터 수집 파이프라인을 단독으로 설계·구현·운영했습니다. 언어별로 흩어져 있던 크롤러를 일관된 현대 구조로 정리하고 수집 정확도와 이관 가능성을 함께 끌어올렸습니다.
연계 작업(데이터 플랫폼·파이프라인 표준화, 배치 수집량 로그)은 별도 항목과 내부 온보딩 문서로 정리.
🕷 라이브러리 크롤러 시리즈 ③ — ① 멀티 언어 크롤러 구축 · ② 인기도 기반 차등 수집