LLM WikiAccess-protected knowledge portal

WIKI

라이브러리 누락(missing-data) 개선 작업 — repo별 정리

AI Summary Purpose 2026 06 ~ 2026 07 초 약 1.5개월 동안 진행한 라이브러리 크롤러 누락 개선 작업을 라이브러리 repo별로 표로 정리. 2026 07 live Jira/Confluence audit confirmed this was also completed as a 12 ecosystem documentation package onboarding guide + improvement histor

경로ai/wiki/projects/library-missing-improvements.md
카테고리Project
태그#backfill #crawler #data-quality #improvements #library #missing #missing-data #mysql #portfolio #project #projects #report #security #wiki

# 라이브러리 누락(missing-data) 개선 작업 — repo별 정리

AI Summary

Purpose:

Key points:

Relevant when:

Linked documents:

Open Questions


공통 패턴 (모든 repo 공유)

패턴내용
finder 도구 세트~/labrador/tool/<eco>_missing_products — raw diff → registry 실검증 → missing_real.tsv + excluded.tsv + summary.md, 날짜 디렉터리(YYYY-MM-DD/) resumable
excluded 자기치유gone-404 / zero-version / row-skip을 *_excluded.txt에 축적, 다음 실행 시 registry로 재검증해 부활분 자동 해제
PROCESSED 작업큐go식 상태머신 0 대기 / 20~24 처리중 / 30~34(또는 30~38) 재시도 ladder / 1 완료 / 5 not_found / 3 no-version
retry ladder(backoff)재시도를 run 간격으로 분산(15m/1h/6h/24h 등), 소진 시 terminal 상태로 포기 — 무한 재시도/조용한 누락 방지
로그레벨 정책실제 유실/영구누락 지점만 error, transient(재시도 가능)·행별 폴백·저수준 DB는 warning
DB 타깃 규칙수집=211.115.125.165:43316(165)만. 과거 shared .env가 164를 가리켜 오적재한 사고 후 ai/workspace/crawler-db-target.md로 못박음
스키마 split 주의product=labradordb인 생태계(npm/pypi/php/ruby/swift/maven)와 전용 gatheringdb 테이블 생태계(go/conan/vcpkg/hunter/spm) 혼동 시 "0건 누락" 오판

repo별 개선

crawler-lib-golang (Go modules)

시기문제 / 원인개선결과커밋·상태
06-18워커 전원 queue-claim 락 타임아웃 스팸. 죽은 홀더의 named lock이 wait_timeout 8h 동안 미해제indexer↔worker 인터리브 데몬화(빈 큐=idle sleep, main만 index), GO_IDLE_SLEEP_SECONDS락 물림 회피 구조feature/go-crawler-indexer-loop(당시 미머지)
06-18"61.7만 누락(gpnf)" 과대보고 — index path를 PRODUCT_KEY처럼 단순비교analyze_gpnf.py로 전수 분해(A/B/C/D/E 버킷)진짜 없음 0, 대부분 declared_diff/subpath/case/큐 backlog정량 확인
06-18~19pending 366,798이 큐 대기로만 남아 gone 판정 불가proxy.golang.org 실검증 + backfill_pending.py(dataCrawlingV2 재현)신규 version 1,565,267 수집, product +294,792(1.92M→2.22M), gpnf 해소 39.9%→99.3%. DB write 버그 3종 수정(prepared stmt / DESC 65KB 절단 / epoch time None), LATEST_VERSION 전체정렬 최신 보정백필 완료
06-22실제 누락 1,369(LIST_V2 밖 proxy-exists)은 pending 백필로 못 잡음backfill_missing_real.py로 직접수집collected 1,348 + alias, unresolved/err 0완료
07-01대문자 포함 버전(-SNAPSHOT/-RC1 등)의 .mod/.info fetch가 escape 누락으로 404 → LIST_V2 PROCESSED=0 영구 정체 = 조용한 누락 45,508건component.py 3개 proxy fetch에 escape_go_module_proxy_path(version) 적용 + 회귀 테스트대문자 버전 45K 재큐(터미널 상태 리셋)crawler 54cf534 (push)
07-01전역 GET_LOCK claim이 워커 직렬화 → starvation_claimV2BatchSELECT … FOR UPDATE SKIP LOCKED로 재작성disjoint 병렬 claim, 스팸 제거crawler 83882ac (push)
07-01제외목록 정의 혼선golang_excluded.tsv = "index path ≠ product_key"만 담도록 재정의 + finalize_lists.py 영구화236,506 + proxy_gone완료

repo-note: ai/repo-notes/crawler-lib-golang.md. 상태머신: 0 pending / 1 complete / 5 not_found / 6 alias / 20~29 processing / 30~38 retry / 39 exhausted.

crawler-lib-java (Maven Central)

시기문제 / 원인개선결과커밋·상태
06 초Java(Spring/MyBatis) 구현의 omission 이력 + 유지난이Python 재작성(발견=인덱스 소비+스켈레톤, 보강=POM 메타 분리, index-helper)재작성 완료branch → master
06-16not_found 146건 원인 = collect가 버전을 maven-metadata.xml 하나에만 의존(404/플러그인 메타면 통째 스킵) + 비표준 파일명 404디렉터리 리스팅 폴백(fetch_versions_from_listing) + .pom/.sha1 파일명 리스팅 재시도102 product 복구(A 97/B 43 gone/…). upsert 클로버 방지 안전절차(thin은 INSERT IGNORE)tool 미커밋
06-16version 단위 누락 미측정 + SHA1 결손 47.5%extract_maven_missing_versions.py(1,045,271 누락) + backfill_sha1_from_index.py(로컬 인덱스 캐시, HTTP 0, AND SHA1_VALUE IS NULL 가드)버전 백필 + SHA1 보정진행/완료
06-23manageNewAddedVersion이 어떤 예외든 PROCESSED=1로 마킹 → name/license/deps 빈 채 영구 누락(메인 omission). antcloud류 transient 무한재시도crawlVersion transient raise 제거 → version+sha1로 pending(90) 반환, run당 pending 재수집 1패스 ladder(90→91~97→98)무한재시도 제거, 누락 pending 전환master b37eea3
06-23아카이브 루프가 POM 네트워크에 막혀 누락 가능스켈레톤-only 아카이브 루프(network 0, version 스켈레톤 90 + product compare-and-set) + insertAllProductsFromArchive 1052 모호컬럼 수정구조적으로 아카이브 누락 불가master 264a650, e4c19d5
06-24단일 스레드 POM 보강 ~500/hr, 백로그 1.26M+ (수개월)indexer↔meta-worker 분리 + CRC32 샤딩(main_all/main_worker, 89=claim)분산 드레인 설계(코드 병합)feature/maven-metaworker-split

repo-note: ai/repo-notes/crawler-lib-java.md. 배포 경로는 단일 프로세스 run()(90/91~97/98), 샤딩(89)은 별도.

crawler-lib-dotnet (NuGet)

시기문제 / 원인개선결과커밋·상태
06-17LIST pending(PROCESSED=0)이 10일간 안 줆. all-or-nothing 페이지 + leaf fetch가 재시도 없는 requests.get 1회 → leaf 1건 transient 실패마다 페이지 전체 requeuegetJsonRequests(retries=3, backoff) — transient만 2/4/6s 재시도, 404/410 즉시 Nonestuck 24개 중 일시성분 해소(도커 검증)tool/crawler 수정
06-18version 단위 누락 미측정extract_nuget_missing_versions.py(catalog page inline 활용, leaf fetch 불필요) + version 대소문자 버그 수정(대문자 버전 거짓누락 제거)보정 누락 351,314 / 68,448 패키지tool 미커밋
06-18backfill_nuget_versions.py 안전 2단계(file→done seed→누락분만 both)상세완료 351,304 / err 0 (~34h)완료
06-23증분이 기존 버전을 재수집기존 버전 재수집 → resync로 분리증분 부하 감소master 324b277
W26배치 insert가 1행 불량에 전체 롤백_insertChunked 행별 폴백손실 최소화master a1aafbc

audit: catalog universe 817,073 vs DB → 진짜 누락 24.

crawler-lib-php (Packagist / Composer)

시기문제 / 원인개선결과커밋·상태
06 초누락 조사 + product/version finder 부재missing investigation + finder + extract_composer_missing_versions.py(p2/{name}.json 전수)version 누락 718,431 / 91,322 패키지 측정tool 미커밋
06-16~17165 백필 + LATEST_VERSION stable 보정(dev를 latest로 넣던 것 → stable 최신)pkg 90,649 / version 2.33M 적재, LATEST 보정 11,878완료. ⚠ 164 오타깃 사고 정정 → 165 규칙 확립
06-23~07-01feed-ahead-of-meta: Packagist 피드가 버전 게시 전에 크롤 → 200·zero-version을 완료(1)로 굳혀 증분이 다시 안 봄 → 영구 누락zero-version 재시도 ladder(0→30→31→32→33→34→35 포기, 대기 1h/5h/10h/16h/24h) util/ladder.py재발 방지 + 8건 백필master 9d5cf76
07-01all-dev 패키지에서 dependabot 브랜치가 버전으로 적재(노이즈)util/dev_versions.py로 default-branch dev만 유지docuseal 등 노이즈 정리master 5a6792d

audit: list.json 451,876 vs DB → 진짜 누락 9,490(가장 큰 갭).

crawler-lib-ruby (RubyGems)

시기문제 / 원인개선결과커밋·상태
06-09list PROCESSED를 항상 1 하드코딩(피드=즉시크롤, 컬럼 死) → 재시도/backlog 관리 불가go식 작업큐 전환(ruby_status.py: 0/20~24/30~34/1/5/3), enqueue/claim/reclaim/advance재시도·backlog 관리 가능master 6d9a0f4
06-09libraries.io 의존 + eval 파싱 깨짐 + JVM 버전정렬 의존 + LICENSE_IDS varchar(32) 초과 거부라이선스 체인 재구성(rubygems→licensee→github, libraries.io 제거), eval→json.loads/ast, JVM→순수파이썬 versionSort, fitLicenseIds(32자 맞춤)유실 지점 제거master f474dc5
06-09신규버전 0건 gem이 오판→재시도 고착성공판정을 list 기록이 아닌 version 행 존재로 변경오판 해소master 0f435d2
06-09일 1회 스케줄3시간 간격 8회/일지연 감소master 3086907
06-16version 단위 누락finder + 백필version 68,755 upsert, LATEST 보정 77완료

audit: /names 193,954 vs DB → 진짜 누락 1(shmactor).

crawler-lib-swift (CocoaPods)

시기문제 / 원인개선결과커밋·상태
06-09누락 682 = version/product 전무인데 Specs엔 존재 = 크롤러 버그. ① 매 실행 Specs 전체 재clone + 단발 git pull(재시도 없음) → 부분/타임아웃 실패 시 최근 pod 누락 ② 전체 단일 try/except(1개 예외로 회차 중단) ③ product는 최신버전에서만 생성rm -rf 제거 → 체크아웃 유지·증분 pull + 3회 재시도 ② per-pod try/except 격리 ③ version 있는데 product 없으면 보강 (포맷 불변)685 pod 백필(version 2,338, 685/685 product)cocoapods.py만 변경
06-09finder 부재swift_missing_products(all_pods.txt universe) + backfill collector + excluded누락 685 → 백필tool 미커밋

audit: all_pods.txt 102,509 vs DB → 진짜 누락 3.

labrador-scrapers / spm_scraper (Swift Package Index)

시기문제 / 원인개선결과커밋·상태
06-24 (W26)누락 포인트 미분석 + 고아 product누락 체크 도구 + 버전 백필 + 태그유무 분류 + 고아 복구재탐지 21건 분류→백필DAT-3254
06-24?after= 페이지네이션 조용한 절단(throttle 시 버전 누락) + 증분 부재누락방안 수정 + 증분 크롤링 도입리뷰 반영 3건64ed39c
06-24RELEASE_DATE가 버전 무관하게 동일버전별 실제 git 태그 일시로 수정정확한 릴리스일3e74f36
07-01swiftpackageindex.com SSL CERTIFICATE_VERIFY_FAILED(cloudscraper가 커스텀 SSLContext에서 certifi 미탑재)공용 httpClient(certifi 명시) 재사용으로 detail_parser fetch 대체SSL 오류 해소(배포 대기)scrapers 8d700ce
07-01스케줄이 매일 전체 resync → SSL 에러 최대 노출증분(월~토)/전체(일) DAG 분리, 증분 기본 on부하·에러 최소화platform 46e876f
07-01증분이 product LAST_UPDATED(churn)로 판단 → 절대 skip 안 됨(전체 재수집)LIST 테이블(TB_COMP_LIB_SPM_LIST) 기반 증분 부활(PROCESSED=1 skip) + clone stall(--filter=blob:none, timeout) + 중복키(1062) upsert 수정증분 정상화scrapers fe4a9a6
07-01증분 전환 회귀: Vulnerability crawler __init__ TypeError(self, target_db, **kwargs) 시그니처 수정회귀 해소scrapers 67d3736

audit: PackageList 11,166 vs DB → 진짜 누락 47(일부 tagless). ⚠ tagless repo는 version PK가 VERSION NOT NULL이라 영구 사각지대.

labrador-scrapers / npm_crawler

시기문제 / 원인개선결과커밋·상태
06-09finder/excluded 부재npm_missing_products finder + backfill collector + npm_excluded.txt노이즈 제거 후 actionable 62tool 미커밋
06-29scoped(@scope/name) 패키지 대량 누락 162,563(99.94%)원인 진단·크롤러 수정·백필대량 백필W26 기록
07-01"누락" CSV 13건 = 실제 누락 0. tryversion의 top-level name 오염(tryveraasion)을 그대로 저장 = NAME 오염 크롤러 버그(광역)getVersionVo NAME 소스를 top-level name → 정규 슬러그(product["path"])로 변경(TDD)이름기준 누락 false positive 원천 제거scrapers 7527094
06-23feed-ahead-of-metapypi와 공용 ladder 구현재발 방지(아래 pypi 참조)

DB: PRODUCT_KEY=AES-CBC(key=IV=NPMNPMNPMNPMNPMN). PROCESSED 5(stuck) 재검증 미스케줄 이슈 존재.

labrador-scrapers / pypi_crawler

시기문제 / 원인개선결과커밋·상태
06-23feed-ahead-of-meta(신규 패키지가 메타 전파 전 크롤)npm과 함께 retry ladder(0/30~33) 구현 + Docker 검증재발 방지미커밋→커밋
06-24[total summary] 로그 ×2 중복 + SQLAlchemy echo 소음전용 로거/print()로 재해결 + echo 억제모니터링 파싱 일관성W26

참고: npm/pypi는 증분만+PROCESSED=5 재검증 미스케줄 → 404→5 누락 실누적(npm 162,879 / pypi 120,892, 최근30일 재검증 1.7%/0.3%).

labrador-scrapers / conan · vcpkg · lib_hunter_crawler (C/C++)

시기문제 / 원인개선결과커밋·상태
06-23vcpkg 증분이 신규버전 누락(git-log 반영 안 됨)증분 omission 수정(setup_iterator RAW LEFT JOIN VERSION 미수집분)43/2,989 신규버전 누락 해소39a8d35
06-23conan 스키마가 vcpkg와 불일치conan 테이블을 vcpkg 포맷으로 정렬(cutover)통일대기
06-23C/C++ 누락 도구 부재conan/vcpkg/hunter 누락 탐지+백필 도구 신설 + 운영DB 백필전수감사 누락 0완료
07-01conan "누락" 25건 = PRODUCT_CONAN엔 있으나 공용 TB_COMP_LIB_PRODUCT 미전파전파 진단·백필25건 처리W27

audit: conan 0 / hunter 0 / vcpkg 0 (완전 동기화). ⚠ conan LATEST_VERSION 역전(version SORT_ORDER=0=최신 vs product MAX(SORT_ORDER)=오래된 것) 코드 확인.

labrador-scrapers / comp_lib_vuln_processor (누락 개선 연관)

시기문제 / 원인개선결과커밋·상태
07-01go product가 gatheringdb 전용 테이블로 이관됐는데 vuln processor는 옛 labradordb.TB_COMP_LIB_PRODUCT에 씀 → 신규 go product가 취약점 enrichment 못 받음단일 리졸버 resolve_comp_lib_product_table 도입(golang→PRODUCT_GOLANG 등)go vuln 라우팅 정정scrapers 05a76da
07-02golang PRODUCT_KEY(as_cs) ↔ vuln(ai_ci) JOIN 1267 collation 오류로 DAG pod 죽음JOIN에 COLLATE utf8mb4_0900_as_cs 통일(collation.py)1267 해소(라이브 검증)scrapers 1322f9a

전수감사 요약 (product 단위, 2026-06-24 기준)

상세는 ai/wiki/projects/library-missing-product-audit.md.

생태계product 총수진짜 누락(real_missing)
golang1.93M1,369 (수집완료)
composer451,8769,490 (최대 갭)
maven838,1551,689
spm11,16647
nuget817,07324
swift(cocoapods)102,5093
rubygems193,9541
conan / hunter / vcpkg1,929 / 547 / —0 / 0 / 0