AI 기반 서비스

Today
-
Total
-
← 목록으로

IP Search 데이터 수집 - 전 세계 26만 IP 블록과의 싸움

이창연•2025년 12월 27일•IP Search

IP Search 데이터 수집 - 전 세계 26만 IP 블록과의 싸움

한국 데이터는 쉬웠다

공공데이터포털에 WHOIS OpenAPI가 있다. 잘 정리된 JSON으로 응답이 온다.

APNIC에서 한국 IP 블록 목록을 가져오고, 각 블록에 대해 API를 호출하면 끝.

총 블록: 2,408개
수집 완료: 2,148개
상세정보 미제공: 260개
IP 커버리지: 1억 290만 개 (92%)

하루 만에 한국 데이터 수집 완료.

글로벌은 다른 문제

5개 RIR 각각 WHOIS 서버가 있다:

  • APNIC (아시아-태평양): whois.apnic.net
  • RIPE (유럽): whois.ripe.net
  • ARIN (북미): whois.arin.net
  • LACNIC (남미): whois.lacnic.net
  • AFRINIC (아프리카): whois.afrinic.net

총 블록 수: 257,938개

각 서버마다 rate limit이 있다. 너무 빠르게 요청하면 차단.

병렬 수집 전략

5개 RIR을 병렬로 수집하면 속도가 5배.

[Worker 1] → APNIC (53,748 블록)
[Worker 2] → RIPE (98,277 블록)
[Worker 3] → ARIN (79,573 블록)
[Worker 4] → LACNIC (20,477 블록)
[Worker 5] → AFRINIC (5,863 블록)

각 워커가 초당 1건씩 요청. 전체 예상 시간: 약 14시간.

WHOIS 응답 파싱의 고통

각 RIR마다 응답 형식이 다르다. APNIC은 이렇고:

inetnum:        1.0.0.0 - 1.0.0.255
netname:        APNIC-LABS
descr:          APNIC Labs
country:        AU

ARIN은 이렇다:

NetRange:       1.0.0.0 - 1.0.0.255
CIDR:           1.0.0.0/24
NetName:        LVLT-ORG-1-0
OrgName:        Level 3 Parent, LLC

각 RIR별로 파서를 따로 만들어야 했다. Claude Code가 대부분 해줬지만, 엣지 케이스는 수동으로 수정했다.

저장 구조

기존 한국 스키마에 필드 추가:

ALTER TABLE ip_ranges
ADD COLUMN rir VARCHAR(10),      -- APNIC, RIPE, ARIN, LACNIC, AFRINIC
ADD COLUMN country_code CHAR(2); -- KR, US, JP, etc.

인덱스도 추가:

CREATE INDEX idx_ip_ranges_country ON ip_ranges(country_code);
CREATE INDEX idx_ip_ranges_rir ON ip_ranges(rir);

수집 자동화

매일 새 블록 체크, 매월 전체 갱신 예정:

# 매일 0시 10분: 신규 블록
10 0 * * * /path/to/collector --mode=incremental

# 매월 1일 3시: 전체 갱신
0 3 1 * * /path/to/collector --mode=refresh

현재 상태

한국 데이터: 완료 글로벌 데이터: 수집 중

2025년 1월 초에 글로벌 버전 런칭 예정. 전 세계 IP를 검색할 수 있게 된다.

예상 결과

수집 완료 후:

  • 전 세계 IP → 기관 검색
  • 기관 → IP 대역 역검색
  • 국가별 필터링
  • 4개 언어 지원 (한/영/일/중)

"Google이 보유한 IP는 몇 개?" 같은 질문에 답할 수 있게 된다.