WHOIS는 사라졌고, 나는 이를 대체하는 API를 만들었습니다
Source: Dev.to
Background
사이드 프로젝트에서 도메인 등록 데이터를 필요로 했습니다. 처음엔 WHOIS를 사용했지만, 레지스트라마다 출력 형식이 달라 표준이 없었고 파싱 코드가 계속 깨졌습니다.
Problems with WHOSQL
- WHOIS는 더 이상 사용되지 않습니다.
- ICANN은 RDAP(Registration Data Access Protocol)를 대체 기술로 추진하고 있습니다.
- RDAP는 JSON을 반환하고 HTTPS를 통해 동작하며, 대부분의 레지스트리가 이미 전환했습니다.
RDAP Overview
RDAP는 도메인, IP, ASN 데이터에 대한 표준화된 JSON 인터페이스를 제공합니다. 하지만 RDAP를 직접 사용하기는 여전히 번거롭습니다:
-
단일 서버가 없음 – 각 TLD마다 자체 RDAP 서버가 있습니다. 어느 서버에 질의할지 결정하려면 IANA 부트스트랩 레지스트리를 참조해야 합니다.
-
도메인에 대한 2단계 조회 –
.com·.net등에서는 레지스트리가 기본 데이터만 저장합니다. 레지스트라(예: GoDaddy, Cloudflare)는 별도 서버에 나머지 데이터를 보관하고 있어 두 번의 요청과 병합이 필요합니다. -
vCardArray 형식 – 연락처 정보가 중첩된 vCard 구조로 저장됩니다. 예:
["vcard", [ ["version", {}, "text", "4.0"], ["fn", {}, "text", "MarkMonitor Inc."], ["tel", {"type": "voice"}, "uri", "tel:+1.2086851750"], ["email", {}, "text", "abusecomplaints@markmonitor.com"] ]]
약 1,200개의 서로 다른 서버에서 이를 파싱하는 것은 오류가 발생하기 쉽습니다.
My Solution: RDAP API
복잡성을 추상화한 통합 RDAP API를 만들었습니다. 모든 TLD에 대해 일관된 JSON을 반환하는 단일 엔드포인트를 제공합니다:
{
"domain": "google.com",
"registrar": { "name": "MarkMonitor Inc.", "iana_id": "292" },
"dates": {
"registered": "1997-09-15T04:00:00Z",
"expires": "2028-09-14T04:00:00Z"
},
"nameservers": ["ns1.google.com", "ns2.google.com"]
}
Features
- 부트스트랩 처리 – 어떤 TLD든 올바른 RDAP 서버를 자동으로 찾아냅니다.
- 레지스트라 연동 – 레지스트리와 레지스트라 데이터를 하나의 응답으로 병합합니다.
- vCardArray 파싱 – 연락처 데이터를 사용하기 쉬운 필드로 변환합니다.
- 요율 제한 관리 – RDAP 제한 내에서 동작하도록 내장된 스로틀링을 제공합니다.
- IP 및 ASN 조회 지원.
- 대량 조회 – 한 요청당 최대 10개 조회 가능.
- 무료 조회 도구 – 홈페이지에 계정 없이 도메인, IP, ASN을 조회할 수 있는 툴을 제공합니다.
SDKs
여러 언어용 클라이언트 라이브러리를 공개했습니다. 아래는 Python 예시입니다:
from rdapapi import RdapApi
client = RdapApi("YOUR_API_KEY")
result = client.domains.lookup("google.com", follow=True)
print(result.registrar.name) # MarkMonitor Inc.
Pricing & Documentation
- API는 월 $9부터 시작하는 SaaS 형태이며 무료 체험을 제공합니다.
- 전체 문서는 사이트에서 확인할 수 있습니다(링크: Docs here).
Community Question
아직도 프로덕션에서 포트 43 WHOIS를 사용하고 계신가요? 레지스트라마다 다른 형식을 어떻게 처리하고 계신가요?