
평판 API 체험판을 붙여 보니 데모가 잘 돌았습니다. 회의에서 "다음 주부터 로그인에 붙이자"는 말이 나옵니다. 그런데 몇 가지 질문에는 아무도 답을 못 합니다. 사용자 IP가 어느 나라 서버로 가는지, 무료 키를 서비스에 써도 되는지, 그 회사 API가 3초 동안 응답하지 않으면 로그인이 멈추는지, 고객이 "왜 저만 막혔나요"라고 물으면 뭐라고 답할지. 이번 글은 도입 전에 물어야 할 여덟 가지 질문입니다.

위 줄 세 장은 흔히 "도입 체크포인트"로 소개되는 것입니다. 아래 줄 다섯 장은 실제로 붙여 보면 나중에 터지는 것입니다. 주황 테두리는 도구를 바꿔도 내 설계로 해결해야 하는 질문입니다. 장애 때 동작과 검증 방법은 어느 회사를 골라도 내 몫으로 남습니다.
이 글의 순서는 그림의 번호와 같습니다. 질문마다 판매사에 물을 것과 내가 정할 것을 나눠 적었습니다.
흔한 체크포인트는 "실시간 피드가 있나"입니다. 맞는 질문이지만 반쪽입니다. 갱신이 잦으면 새 공격 IP를 빨리 알지만, 잘못 오른 항목도 빨리 퍼집니다. 정말 물어야 할 것은 "얼마나 빨리 들어오나"와 함께 "얼마나 빨리 빠지나"입니다.

그림은 설명용 모형입니다. 어느 회사의 실제 공식도 아닙니다. 가로축은 날짜, 세로축은 위험 점수입니다. 3일째에 공격자가 떠나고 그 IP를 다른 사람이 받았다고 합시다. 감쇠가 없는 목록(레드 선)은 계속 "나쁨"이라서 새 주인이 피해를 봅니다. 감쇠가 있는 점수(그린 선)는 신고가 끊기면 내려갑니다.
문서로 확인할 수 있는 단서는 이렇습니다.
| 솔루션 | 갱신·감쇠와 관련해 문서에 있는 것 |
|---|---|
| AbuseIPDB | 조회 때 maxAgeInDays(1~365, 기본 30)로 "며칠 전 신고까지 볼지"를 고릅니다. FAQ는 모든 신고의 무게가 시간에 따라 줄고 매일 다시 계산한다고 설명합니다 |
| Cisco Talos | 평판 센터 화면 데이터는 3시간마다 갱신된다고 밝힙니다 |
| MaxMind | Anonymous IP는 매일, City·Country 등은 평일에 통째 새 파일이 나옵니다(04편). GeoLite 약관은 새 판이 나오면 30일 안에 옛 판 사용을 멈추라고 합니다 |
| VirusTotal | last_analysis_stats는 "마지막 분석" 기준입니다. 분석 시점을 함께 봐야 합니다 |
판매사에 물을 것
내가 정할 것
IP 하나 뒤에 사람이 여럿 있는 경우가 흔합니다. 통신사 CGNAT(통신사가 공인 IP 하나를 여러 가입자에게 나눠 주는 방식, RFC 6598의 100.64.0.0/10 대역을 안쪽에 씀), 회사·학교 NAT, 공용 와이파이가 그렇습니다. 앞 시리즈 실험실에서는 CGNAT 주소 두 개 뒤에 정상 사용자 50명이 있었고, IP 기준 규칙 하나가 그 50명을 한꺼번에 걸 뻔했습니다(방어선 2-②).

왼쪽은 문제, 오른쪽은 솔루션이 주는 단서입니다. 평판은 주소에 붙습니다. 공격자 한 명 때문에 오른 점수가 같은 주소의 모든 사람에게 적용됩니다. 오른쪽 상자들은 "이 주소는 여럿이 쓴다", "이 주소는 확인된 정상 대역이다"를 알려 주는 필드입니다.
| 단서 | 문서상 뜻 | 주의 |
|---|---|---|
AbuseIPDB usageType | 사용 유형(데이터센터, 통신사 등) | 등록 정보 기반입니다 |
AbuseIPDB isWhitelisted | 자체 허용 목록에 있는지 | 문서가 "판단 근거로 쓰지 말라"고 합니다. 허용 목록이 많은 IP에 관대하기 때문입니다 |
IPQS allow_public_access_points | 공용 접속 지점(회사·학교 등) 처리를 바꾸는 요청 변수 | 06편 |
IPQS strictness | 높일수록 더 엄격하고 오탐이 늘 수 있음. 문서는 0이나 1을 권함 | 06편 |
IPQS shared_connection | 동시에 여러 사용자가 쓰는 연결(엔터프라이즈 항목) | 06편 |
MaxMind is_hosting_provider 등 | "사람 집이 아닐 가능성"을 주는 성격 플래그 | 나쁨이 아니라 성격입니다 |
| 이의 제기 | Talos는 IP·도메인 소유자가 평판 티켓을 낼 수 있다고 밝힙니다 | 내 고객이 아니라 IP 주인이 내는 절차입니다 |
판매사에 물을 것
내가 정할 것

세 칸은 데이터가 언제 내 서버에 오는지가 다릅니다. 로컬 DB와 피드는 미리 받아 두고, API는 물을 때 받습니다. 그래서 아래 줄의 성질이 갈립니다. 사용자 IP가 밖으로 나가는 것은 API 형태뿐입니다.
| 형태 | 예 | 지연 | 신선도 | 사용자 IP가 나가나 |
|---|---|---|---|---|
| 로컬 DB 파일 | MaxMind mmdb(GeoIP2·GeoLite) | 내 메모리 조회 | 파일 갱신 주기만큼 | 나가지 않음 |
| 요청마다 API | AbuseIPDB CHECK, IPQS, VirusTotal, Criminal IP | 외부 왕복 | 조회 시점 | 나감 |
| 피드·목록 | AbuseIPDB BLACKLIST(무료 하루 5번) | 내 저장소 조회 | 받는 주기만큼 | 나가지 않음(목록을 받기만) |
| 제품 연동 | Talos(Cisco 장비·서비스에 들어감) | 장비 안 | 장비 갱신 | 제품에 따라 다름 |
판매사에 물을 것
내가 정할 것
이 절은 법률 자문이 아닙니다. 글쓴이가 법 조문과 공개 자료를 읽고 정리한 것입니다. 실제 도입 전에는 회사의 개인정보 보호 책임자나 법률 전문가에게 확인하세요.
개인정보 보호법 제2조 제1호 나목은 개인정보에 이런 정보를 넣습니다. "해당 정보만으로는 특정 개인을 알아볼 수 없더라도 다른 정보와 쉽게 결합하여 알아볼 수 있는 정보." 이어서 쉽게 결합할 수 있는지는 "다른 정보의 입수 가능성 등 개인을 알아보는 데 소요되는 시간, 비용, 기술 등을 합리적으로 고려"한다고 적습니다.
IP 주소 하나만 보면 사람을 알 수 없습니다. 그런데 평판을 조회하는 서비스는 보통 그 IP를 로그인한 계정, 주문, 세션과 함께 로그에 남깁니다. 그러면 내 회사 안에서는 IP를 계정과 쉽게 묶을 수 있습니다. 그래서 실무에서는 서비스 로그 속 사용자 IP를 개인정보로 보고 다루는 편이 안전합니다. 개인정보보호위원회는 2025-07-15에 「개인정보 처리 통합 안내서」를 냈습니다. IP 주소를 어떻게 보는지 그 원문 문장은 이 글에서 확인하지 못했습니다(확인 필요).

위쪽 길은 로컬 DB입니다. 사용자 IP는 내 서버 밖으로 나가지 않고, 평판 회사로부터는 파일만 받습니다. 아래쪽 길은 외부 API입니다. 요청마다 사용자 IP(때로는 user agent, 이메일까지)가 평판 회사로 갑니다. 그 회사 서버가 국외에 있으면 오른쪽 확인 상자를 따져야 합니다.
개인정보 보호법 제28조의8(2023-03-14 신설)은 개인정보를 국외로 "제공(조회되는 경우를 포함한다)·처리위탁·보관"하는 것을 "이전"이라 부르고, 원칙적으로 막은 뒤 예외를 둡니다. 예외 중 하나가 정보주체와의 계약 체결·이행에 필요한 처리위탁·보관이고, 이때는 이전 항목, 이전 국가·시기·방법, 받는 자, 이용 목적·보유 기간, 거부 방법 등을 개인정보 처리방침에 공개하거나 전자우편 등으로 알리는 방식을 둡니다. 국내 업체에 맡겨도 처리 위탁(제26조)이면 위탁 업무와 수탁자를 공개해야 합니다.
평판 API 호출이 "제공"인지 "처리위탁"인지, 어느 예외에 들어가는지는 계약 구조와 그 회사가 받은 IP를 어떻게 쓰는지(자기 데이터로 쌓는지)에 따라 달라질 수 있습니다. 이것이 판매사에 꼭 물어야 하는 이유입니다.
조회 자체가 공개되는 경우도 있습니다. VirusTotal 문서는 API로 제출하거나 조회한 지표(IoC)가 VirusTotal 데이터셋에 들어가 커뮤니티가 볼 수 있다고 적고, 민감·개인 식별 정보를 담은 지표는 조회하지 말라고 합니다(07편). 고객 IP를 VirusTotal에 묻는 것은 그 IP를 공개 데이터셋에 넣는 일이 될 수 있습니다.
판매사에 물을 것
내가 정할 것
체험판이 잘 돈다고 서비스에 써도 되는 것은 아닙니다. 공식 문서로 확인한 것만 모았습니다.
| 솔루션 | 문서에서 확인한 한도·조건 |
|---|---|
| VirusTotal 공개 API | 하루 500회, 분당 4회. 상업 제품·서비스에 쓰면 안 된다. 한도를 피하려고 계정을 여러 개 만들면 안 된다 |
| AbuseIPDB 약관 | 무료 요금제는 상업 목적 사용 금지(Basic 이상에서 가능). 사전 승인 없는 재배포·재판매 금지 |
| AbuseIPDB 무료 | 하루 check 1,000회, blacklist 5회. 넘으면 HTTP 429와 Retry-After 헤더 |
| MaxMind GeoLite | 무료, 계정·라이선스 키 필요. 사용 표시(attribution) 의무, 새 판이 나오면 30일 안에 옛 판 사용 중지, 특정 개인·가구·주소를 알아내는 데 쓰지 말 것. 무료 GeoLite City는 상업 용도에 권하지 않는다고 적혀 있습니다(04편) |
| IPQS | 개요·요금 페이지에 "1,000 Free Lookups" 안내가 있습니다. 월 단위인지 등 조건은 확인 필요(06편) |
| Criminal IP | 무료 회원 IP 조회 월 50회, 호출마다 크레딧 차감(요금표, 09편) |
| Cisco Talos | 공개 조회 화면이 있고, 공개 대량 조회 API는 개요 문서에 나오지 않았습니다 |
VirusTotal 공개 API와 AbuseIPDB 무료 키는 사람이 손으로 찾아보기에는 좋지만, 운영 서비스의 로그인 경로에 붙이는 순간 약관 위반입니다. 서비스에 쓰려면 유료 요금제나 프리미엄 라이선스를 봐야 합니다. 무료 한도도 작습니다. Criminal IP 무료 월 50회는 작은 서비스의 몇 분치 로그인입니다.
판매사에 물을 것
내가 정할 것

왼쪽은 실패의 모양, 오른쪽은 고를 수 있는 동작입니다. 실패는 "응답 없음"만이 아닙니다. 429 한도 초과, 5xx 오류, 그리고 조용한 실패인 오래된 DB 파일도 있습니다. 오래된 파일은 오류를 내지 않고 틀린 답을 줍니다.
대부분의 화면은 "통과시키되 한 단계 조심"이 맞습니다. 13편에서 외부 소스 하나를 멈춰 놓고 fail-open과 fail-closed를 같은 트래픽으로 비교했습니다. 측정값은 그 편에 있습니다.
판매사에 물을 것
내가 정할 것
점수 하나만 오는 서비스는 고객 문의에 답하기 어렵습니다. "위험 87점이라서요"는 답이 아닙니다. 이유 필드가 있으면 "이 주소가 최근 30일 동안 공격 신고 12건을 받았습니다"처럼 말할 수 있습니다.
| 솔루션 | 이유로 쓸 수 있는 필드(문서 기준) |
|---|---|
| MaxMind Anonymous IP | is_anonymous_vpn, is_hosting_provider, is_public_proxy, is_residential_proxy, is_tor_exit_node |
| AbuseIPDB | totalReports, 신고 카테고리, usageType, maxAgeInDays 기간 |
| IPQS | proxy, vpn, tor, recent_abuse, bot_status, connection_type, 점수 구간(75·85·90의 뜻이 문서에 있음) |
| VirusTotal | last_analysis_results의 엔진별 category·result |
| Criminal IP | inbound·outbound 단계, issues(VPN·클라우드·스캐너 등) 근거 묶음 |
| Cisco Talos | 이메일·웹 평판 등급과 그 뜻풀이(조회 화면). 정확한 SBRS 숫자는 Cisco 고객만 봅니다 |
내가 정할 것
{"level":"review","reasons":[...]} 모양인 이유입니다.판매사의 정확도 숫자는 판매사의 고객 트래픽 기준입니다. 내 서비스의 사용자 분포(모바일 비율, 해외 사용자, 회사 고객)는 다릅니다. 그래서 마지막 질문은 판매사가 아니라 나에게 하는 질문입니다. "붙이기 전에 무엇으로 재 볼 것인가."
14편에서 이름표 붙은 가짜 트래픽으로 이 측정을 해 봅니다.

표의 칸은 문서에서 확인한 단서만 짧게 적었습니다(04~09편 기준). 좋고 나쁨의 점수가 아닙니다. 빨간 칸은 도입 전에 꼭 짚을 위험, 회색 칸은 공개 문서로 답이 덜 된 칸이고, 그 칸이 곧 판매사에 물을 질문입니다. ⑥과 ⑧은 어느 솔루션이든 "내 설계"로 같습니다.
| 질문 | MaxMind | AbuseIPDB | IPQS | VirusTotal | Talos | Criminal IP |
|---|---|---|---|---|---|---|
| ① 갱신·감쇠 | Anonymous IP 매일 새 파일 | maxAgeInDays 1~365, 매일 재계산 | 조회 시점 계산, recent_abuse는 지난 며칠 | 마지막 분석 시점 | 화면 3시간 갱신 | 포트는 최근 60일, 피드 1시간 |
| ② 공유 IP | 성격 플래그 | usageType, 허용 목록 | shared_connection, allow_public_access_points | 엔진마다 다름, 벤더에 정정 요청 | 소유자 이의 제기 | is_mobile 등 issues |
| ③ 제공 형태 | 로컬 mmdb, 웹 서비스 | API, 목록 | API | API | 제품 연동, 조회 화면 | API, 방향별 피드 |
| ④ IP가 나가나 | 로컬이면 안 나감 | 나감 | 나감(키·IP가 URL에) | 나감, 조회가 공개 데이터셋에 | 제품에 따라 | 나감(피드는 안 나감) |
| ⑤ 약관·한도 | 사용 표시 의무 | 무료 1,000/일, 상업 금지 | 1,000 Free Lookups(조건 확인 필요) | 공개 API 상업 금지 | 대량 API 안 보임 | 무료 월 50회 |
| ⑥ 장애 때 | 내 설계 | 내 설계 | 내 설계 | 내 설계 | 내 설계 | 내 설계 |
| ⑦ 이유 필드 | 플래그 6개 | 신고 수·카테고리 | 플래그 여럿, 점수 구간 뜻 | 엔진별 결과 | 등급 뜻풀이 | 방향별 단계, issues |
| ⑧ 검증 | 섀도 모드 | 섀도 모드 | 섀도 모드 | 섀도 모드 | 섀도 모드 | 섀도 모드 |
모든 링크는 2026-10-31에 확인했습니다.
maxAgeInDays, isWhitelisted, 429와 Retry-After, 신고 시 개인정보 제거): https://docs.abuseipdb.com/strictness, allow_public_access_points): https://www.ipqualityscore.com/documentation/proxy-detection-api/overviewshared_connection): https://www.ipqualityscore.com/documentation/proxy-detection-api/response-parameters이전 글 DMARC 집계 보고서로 내 발송 IP 지켜보기
다음 글 연동 아키텍처: 여러 소스를 하나의 판단으로
시리즈 전체 목록 IP 평판은 어떻게 만들어지고, 어떻게 써야 하나 전체 목록