VPN 데이터셋의 한 행이 무엇을 나타내는지 물으면 기업, 리스너, 공개 출구 주소, 도달 가능성 결과라는 답이 불어납니다. 각각은 정당하며, 라벨 없이 섞으면 정밀하게 들리지만 아무 의미도 없는 합계가 됩니다. 단위는 설계 결정이며 첫 집계 전에 정해야 합니다. 공개된 VPN 통계의 혼란 대부분은 그 단계를 건너뛰는 데서 생깁니다.

행은 주장이지 사물이 아니다

모든 행은 세계에 대해 무언가를 주장하며, 그 주장에는 주어가 있습니다. 주어를 명명하는 것이 그 행을 다른 행과 비교 가능하게 만듭니다.

공급자 행은 한 조직이 서비스를 제공한다고 주장합니다. 종단점 행은 특정 주소와 포트가 프로토콜을 말한다고 주장합니다. 출구 행은 트래픽이 어느 시점에 한 주소에서 나갔다고 주장합니다. 측정 행은 어딘가의 탐침이 결과를 관측했다고 주장합니다. 네 주어, 네 스키마, 그리고 구별자 없이 그것들을 섞은 데이터셋은 전혀 집계할 수 없습니다.

구별자는 스키마에서 가장 값싼 부분이며 가장 자주 빠지는 부분입니다.

세기 전에 단위를 고르십시오

실제로 가진 질문에 답하는 단위를 고르십시오. 종단점을 세면 리스너가 몇 개 공지되었는지 답하고, 공급자를 세면 몇 개 조직이 참여했는지 답하며, 출구 주소를 세면 겉으로 보이는 출발점이 몇 개인지 답합니다.

이 숫자들은 서로 바꿀 수 없고 차이는 큽니다. 한 공급자가 수천 개 주소를 운영할 수 있고, 한 주소가 서로 다른 서비스를 위해 여러 프로토콜 리스너를 수용할 수 있습니다. 따라서 주소의 수는 공급자 수의 상한도 하한도 아닙니다. 숫자를 말할 때마다 같은 문장에서 단위를 밝히십시오. 단위 없는 숫자는 소수점이 붙은 의견입니다.

UnitThe row assertsWhat a count of it means
ProviderAn organisation offers a serviceHow many operators appear
EndpointAn address and port speak a protocolHow many listeners were advertised
Exit addressTraffic left from an addressHow many apparent origins exist
ObservationA probe saw a resultHow many tests ran, not how many servers

공개 디렉터리는 그 서비스에서 공지된 참가자를 제공합니다. 그것은 세계의 모든 상업적, 조직적, 사적 배치의 목록이 아니며, 그렇게 취급하면 모든 파생 통계가 부풀려집니다.

출처는 스키마에 속한다

출처가 없는 행은 다시 확인할 수 없습니다. 원본 레코드, 시간대를 포함한 수집 시각, 관측 방법, 마지막 목격 상태를 기록하십시오.

공지된 속성과 관측된 속성은 무게가 다르므로 분리해 두십시오. 디렉터리의 국가 라벨은 공지된 주장이며 서버의 물리적 위치에 대한 증거가 아닙니다. IP 할당은 네트워크 블록을 식별할 뿐 그 안의 모든 임차인을 식별하지 않으며, 그 위의 애플리케이션의 현재 운영자도 아닙니다. 두 개의 열과 하나의 주석이 매번 하나의 통합 필드를 이깁니다.

{"endpoint": "203.0.113.10:1194/udp", "unit": "endpoint", "advertised_country": "NL",
 "observed_at": "2026-11-03T02:15:00Z", "method": "udp_probe", "last_seen": "2026-11-03"}

JSON 한 줄이면 스키마가 구체화되고 설명 문단보다 논하기 쉽습니다. 타임스탬프에 시간대가 있고 방법이 암시되지 않고 명명된다는 점에 주목하십시오.

질문에 따라 중복을 제거하십시오

중복은 단위에 달려 있습니다. 두 개의 프로토콜 리스너를 가진 같은 주소는 하나의 종단점 쌍이자 두 개의 서비스이며, 조용히 합치면 집계가 달라집니다.

질문이 묻는 수준에서 중복을 제거하고, 유지된 각 행에 몇 개의 원시 행이 접혔는지 기록하십시오. 그 비율 자체가 발견인데, 큰 접힘은 보통 원본이 리스너별로 레코드를 공개한다는 뜻입니다. 주소를 많이 운영하는 공급자는 반대 패턴을 냅니다. 둘 다 옳으며, 기록된 비율만이 독자가 둘을 구별하게 합니다.

그다음 원시 행을 보관하십시오. 중복이 제거된 표는 하나의 뷰이며, 원시 입력에서 다시 만들 수 있다는 점이 결과를 재현 가능하게 합니다.

커버리지 선언을 공개하십시오

출처를 어떻게 골랐는지, 어떤 지역이나 네트워크를 다루는지, 무엇을 의도적으로 포함하지 않았는지 밝히십시오.

사설 기업 종단점과 공지되지 않은 배치는 공개 목록에 결코 나타나지 않으므로, 디렉터리에 없다는 것은 그 디렉터리가 싣지 않았다는 것만 증명합니다. 공개 전에 출처 약관과 재배포 허가를 확인하고, 한 번도 필요하지 않았던 필드는 제거하십시오. 종단점 연구가 가입자 신원, 자격 증명, 브라우징 기록을 요구하는 경우는 드뭅니다. 그것을 공개하는 것은 다른 근거의 다른 프로젝트가 됩니다.

wc -l vpn-endpoints.jsonl
jq -r '.unit' vpn-endpoints.jsonl | sort | uniq -c
jq -r '.advertised_country' vpn-endpoints.jsonl | sort | uniq -c | sort -rn | head

그 세 명령은 행 수, 단위별 분포, 공지된 국가별 커버리지 개요를 줍니다. 모집단이 바뀌면 날짜가 붙은 스냅숏을 남기고, 낡은 것과 확인된 부재를 구별하십시오. 모집단이 분명한 경계 있는 데이터셋이 인터넷의 모든 VPN을 담는다는 근거 없는 주장보다 낫습니다.

관련 글