도입 체크리스트: 고를 때 물어야 할 여덟 가지

아프로·2026년 10월 30일

도입 체크리스트: 고를 때 물어야 할 여덟 가지 표지

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

여덟 가지 질문 한눈에

IP 평판 솔루션 도입 전에 물을 여덟 가지 질문. 위 줄은 흔히 보는 세 가지(갱신과 감쇠, 오탐과 공유 IP, 제공 형태), 아래 줄은 더 물어야 할 다섯 가지(개인정보, 요금·한도·약관, 장애 때 동작, 설명 가능성, 검증 방법)

위 줄 세 장은 흔히 "도입 체크포인트"로 소개되는 것입니다. 아래 줄 다섯 장은 실제로 붙여 보면 나중에 터지는 것입니다. 주황 테두리는 도구를 바꿔도 내 설계로 해결해야 하는 질문입니다. 장애 때 동작과 검증 방법은 어느 회사를 골라도 내 몫으로 남습니다.

이 글의 순서는 그림의 번호와 같습니다. 질문마다 판매사에 물을 것과 내가 정할 것을 나눠 적었습니다.

① 갱신 주기와 점수 감쇠

흔한 체크포인트는 "실시간 피드가 있나"입니다. 맞는 질문이지만 반쪽입니다. 갱신이 잦으면 새 공격 IP를 빨리 알지만, 잘못 오른 항목도 빨리 퍼집니다. 정말 물어야 할 것은 "얼마나 빨리 들어오나"와 함께 "얼마나 빨리 빠지나"입니다.

한 IP의 평판이 시간에 따라 바뀌는 설명용 그림. 공격자가 쓰다가 떠난 뒤 주인이 바뀌어도, 감쇠가 없는 목록은 계속 나쁨으로 남고 감쇠가 있는 점수는 내려간다

그림은 설명용 모형입니다. 어느 회사의 실제 공식도 아닙니다. 가로축은 날짜, 세로축은 위험 점수입니다. 3일째에 공격자가 떠나고 그 IP를 다른 사람이 받았다고 합시다. 감쇠가 없는 목록(레드 선)은 계속 "나쁨"이라서 새 주인이 피해를 봅니다. 감쇠가 있는 점수(그린 선)는 신고가 끊기면 내려갑니다.

문서로 확인할 수 있는 단서는 이렇습니다.

솔루션갱신·감쇠와 관련해 문서에 있는 것
AbuseIPDB조회 때 maxAgeInDays(1~365, 기본 30)로 "며칠 전 신고까지 볼지"를 고릅니다. FAQ는 모든 신고의 무게가 시간에 따라 줄고 매일 다시 계산한다고 설명합니다
Cisco Talos평판 센터 화면 데이터는 3시간마다 갱신된다고 밝힙니다
MaxMindAnonymous IP는 매일, City·Country 등은 평일에 통째 새 파일이 나옵니다(04편). GeoLite 약관은 새 판이 나오면 30일 안에 옛 판 사용을 멈추라고 합니다
VirusTotallast_analysis_stats는 "마지막 분석" 기준입니다. 분석 시점을 함께 봐야 합니다

판매사에 물을 것

  • 항목이 들어오는 경로와 걸리는 시간은 어느 정도인가.
  • 신고·관측이 끊긴 IP는 얼마 뒤 점수가 내려가나. 감쇠 기간을 조회 때 고를 수 있나.
  • 응답에 "마지막으로 본 시각" 같은 필드가 있나.

내가 정할 것

  • 캐시 TTL. 평판 결과를 오래 두면 판매사의 감쇠가 내 쪽에서 막힙니다. 13편에서 결과마다 TTL을 다르게 두는 이유입니다.

② 오탐: 공유 IP를 어떻게 다루나

IP 하나 뒤에 사람이 여럿 있는 경우가 흔합니다. 통신사 CGNAT(통신사가 공인 IP 하나를 여러 가입자에게 나눠 주는 방식, RFC 6598의 100.64.0.0/10 대역을 안쪽에 씀), 회사·학교 NAT, 공용 와이파이가 그렇습니다. 앞 시리즈 실험실에서는 CGNAT 주소 두 개 뒤에 정상 사용자 50명이 있었고, IP 기준 규칙 하나가 그 50명을 한꺼번에 걸 뻔했습니다(방어선 2-②).

CGNAT 주소 하나 뒤에 정상 사용자 여럿과 공격자 한 명이 함께 있는 그림. 평판은 주소에 붙기 때문에 그 주소를 막으면 모두 막힌다. 오른쪽에 이 문제를 줄여 주는 문서상 필드와 기능을 나열

왼쪽은 문제, 오른쪽은 솔루션이 주는 단서입니다. 평판은 주소에 붙습니다. 공격자 한 명 때문에 오른 점수가 같은 주소의 모든 사람에게 적용됩니다. 오른쪽 상자들은 "이 주소는 여럿이 쓴다", "이 주소는 확인된 정상 대역이다"를 알려 주는 필드입니다.

단서문서상 뜻주의
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 주인이 내는 절차입니다

판매사에 물을 것

  • 공유 IP·모바일 통신사 대역을 따로 표시하나.
  • 잘못 오른 항목을 누가, 어떻게, 얼마 만에 내릴 수 있나.
  • 대역 번짐(이웃 IP까지 점수가 오르는 것)이 있나. 있다면 응답에서 구분되나.

내가 정할 것

  • IP 점수만으로 막지 않습니다. 14편에서 같은 트래픽에 "점수로 차단"을 걸었더니 CGNAT 뒤 정상 사용자가 어떻게 되는지 잽니다.

③ 제공 형태: 로컬 DB·API·피드

IP 평판을 받는 세 가지 형태. 로컬 DB 파일은 내 서버 안에서 조회하고, API는 요청마다 외부로 묻고, 피드는 목록을 주기적으로 받아 내 저장소에 넣는다. 각각 지연, 신선도, 사용자 IP가 밖으로 나가는지를 비교

세 칸은 데이터가 언제 내 서버에 오는지가 다릅니다. 로컬 DB와 피드는 미리 받아 두고, API는 물을 때 받습니다. 그래서 아래 줄의 성질이 갈립니다. 사용자 IP가 밖으로 나가는 것은 API 형태뿐입니다.

형태예지연신선도사용자 IP가 나가나
로컬 DB 파일MaxMind mmdb(GeoIP2·GeoLite)내 메모리 조회파일 갱신 주기만큼나가지 않음
요청마다 APIAbuseIPDB CHECK, IPQS, VirusTotal, Criminal IP외부 왕복조회 시점나감
피드·목록AbuseIPDB BLACKLIST(무료 하루 5번)내 저장소 조회받는 주기만큼나가지 않음(목록을 받기만)
제품 연동Talos(Cisco 장비·서비스에 들어감)장비 안장비 갱신제품에 따라 다름

판매사에 물을 것

  • 같은 데이터를 파일이나 목록으로도 받을 수 있나. 받을 수 있다면 요금제는.
  • API 응답 시간 목표(SLA)가 있나.

내가 정할 것

  • 요청 경로에는 로컬 조회만 두고, API는 "로컬로 판단이 안 서는 화면"에만 붙입니다. 13편의 설계가 이렇습니다.

④ 개인정보: 사용자 IP가 밖으로 나가는가

이 절은 법률 자문이 아닙니다. 글쓴이가 법 조문과 공개 자료를 읽고 정리한 것입니다. 실제 도입 전에는 회사의 개인정보 보호 책임자나 법률 전문가에게 확인하세요.

IP 주소는 개인정보인가

개인정보 보호법 제2조 제1호 나목은 개인정보에 이런 정보를 넣습니다. "해당 정보만으로는 특정 개인을 알아볼 수 없더라도 다른 정보와 쉽게 결합하여 알아볼 수 있는 정보." 이어서 쉽게 결합할 수 있는지는 "다른 정보의 입수 가능성 등 개인을 알아보는 데 소요되는 시간, 비용, 기술 등을 합리적으로 고려"한다고 적습니다.

IP 주소 하나만 보면 사람을 알 수 없습니다. 그런데 평판을 조회하는 서비스는 보통 그 IP를 로그인한 계정, 주문, 세션과 함께 로그에 남깁니다. 그러면 내 회사 안에서는 IP를 계정과 쉽게 묶을 수 있습니다. 그래서 실무에서는 서비스 로그 속 사용자 IP를 개인정보로 보고 다루는 편이 안전합니다. 개인정보보호위원회는 2025-07-15에 「개인정보 처리 통합 안내서」를 냈습니다. IP 주소를 어떻게 보는지 그 원문 문장은 이 글에서 확인하지 못했습니다(확인 필요).

밖으로 나가는 길과 나가지 않는 길

사용자 IP가 흐르는 길. 로컬 DB를 쓰면 IP는 내 서버 안에 머물고, 외부 API를 쓰면 IP가 평판 회사의 서버로 간다. 그 서버가 국외에 있으면 국외 이전, 처리 위탁에 해당하는지 따져야 한다. 확인할 것 세 가지를 붙임

위쪽 길은 로컬 DB입니다. 사용자 IP는 내 서버 밖으로 나가지 않고, 평판 회사로부터는 파일만 받습니다. 아래쪽 길은 외부 API입니다. 요청마다 사용자 IP(때로는 user agent, 이메일까지)가 평판 회사로 갑니다. 그 회사 서버가 국외에 있으면 오른쪽 확인 상자를 따져야 합니다.

개인정보 보호법 제28조의8(2023-03-14 신설)은 개인정보를 국외로 "제공(조회되는 경우를 포함한다)·처리위탁·보관"하는 것을 "이전"이라 부르고, 원칙적으로 막은 뒤 예외를 둡니다. 예외 중 하나가 정보주체와의 계약 체결·이행에 필요한 처리위탁·보관이고, 이때는 이전 항목, 이전 국가·시기·방법, 받는 자, 이용 목적·보유 기간, 거부 방법 등을 개인정보 처리방침에 공개하거나 전자우편 등으로 알리는 방식을 둡니다. 국내 업체에 맡겨도 처리 위탁(제26조)이면 위탁 업무와 수탁자를 공개해야 합니다.

평판 API 호출이 "제공"인지 "처리위탁"인지, 어느 예외에 들어가는지는 계약 구조와 그 회사가 받은 IP를 어떻게 쓰는지(자기 데이터로 쌓는지)에 따라 달라질 수 있습니다. 이것이 판매사에 꼭 물어야 하는 이유입니다.

조회 자체가 공개되는 경우도 있습니다. VirusTotal 문서는 API로 제출하거나 조회한 지표(IoC)가 VirusTotal 데이터셋에 들어가 커뮤니티가 볼 수 있다고 적고, 민감·개인 식별 정보를 담은 지표는 조회하지 말라고 합니다(07편). 고객 IP를 VirusTotal에 묻는 것은 그 IP를 공개 데이터셋에 넣는 일이 될 수 있습니다.

판매사에 물을 것

  • 조회한 IP를 저장하나, 얼마 동안. 자기 평판 데이터(다른 고객에게 주는 점수)에 쓰나. 다른 사용자에게 보이나.
  • 서버와 데이터가 있는 나라. 개인정보 처리 관련 계약서(DPA)를 주나.
  • user agent·이메일 같은 추가 필드는 꼭 보내야 하나.

내가 정할 것

  • 필요한 화면에서만 보냅니다(예: 결제, 비밀번호 재설정). 모든 요청을 보내지 않습니다.
  • 보내는 필드를 줄입니다. IP 하나로 충분하면 user agent는 뺍니다.
  • 외부 전송 안 함 모드를 하나 둡니다. 13편 서비스는 스위치 하나로 로컬 소스만 쓰도록 만들었습니다.
  • 처리방침에 적을 문구는 담당자와 함께 정합니다.

⑤ 요금·한도·이용 약관

체험판이 잘 돈다고 서비스에 써도 되는 것은 아닙니다. 공식 문서로 확인한 것만 모았습니다.

솔루션문서에서 확인한 한도·조건
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, 빈 값, 과금).

내가 정할 것

  • 한도를 넘었을 때를 "장애"로 다룹니다. 다음 질문으로 이어집니다.

⑥ 장애 때 동작: 늦거나 실패하면 통과시키나 막나

평판 조회가 실패하는 다섯 가지 모양(느림, 한도 초과 429, 서버 오류, 연결 실패, 오래된 DB 파일)과 각각에 대해 고를 수 있는 동작(통과시키기, 막기, 캐시 쓰기, 다른 소스로 대신하기)

왼쪽은 실패의 모양, 오른쪽은 고를 수 있는 동작입니다. 실패는 "응답 없음"만이 아닙니다. 429 한도 초과, 5xx 오류, 그리고 조용한 실패인 오래된 DB 파일도 있습니다. 오래된 파일은 오류를 내지 않고 틀린 답을 줍니다.

  • 통과시키기(fail-open). 평판 없이 다음 단계로 갑니다. 서비스는 멈추지 않지만 그 사이 공격도 통과합니다.
  • 막기(fail-closed). 평판이 없으면 거절합니다. 판매사 장애가 곧 내 장애가 됩니다.
  • 캐시 쓰기. 조금 지난 결과라도 씁니다. 13편의 캐시가 이 역할도 합니다.
  • 다른 소스로 대신. 외부 API가 죽으면 로컬 DB의 성격 플래그만으로 판단합니다.

대부분의 화면은 "통과시키되 한 단계 조심"이 맞습니다. 13편에서 외부 소스 하나를 멈춰 놓고 fail-open과 fail-closed를 같은 트래픽으로 비교했습니다. 측정값은 그 편에 있습니다.

판매사에 물을 것

  • 장애 공지 채널, 과거 장애 기록, 응답 시간 목표.

내가 정할 것

  • 소스마다 시간 제한(타임아웃)과 서킷 브레이커(연속 실패하면 한동안 부르지 않는 장치).
  • 화면마다 fail-open/fail-closed를 미리 정합니다. 장애가 난 뒤 정하면 늦습니다.
  • DB 파일의 나이를 지표로 남기고 경보를 겁니다.

⑦ 설명 가능성: "왜 막혔나요"에 답할 수 있나

점수 하나만 오는 서비스는 고객 문의에 답하기 어렵습니다. "위험 87점이라서요"는 답이 아닙니다. 이유 필드가 있으면 "이 주소가 최근 30일 동안 공격 신고 12건을 받았습니다"처럼 말할 수 있습니다.

솔루션이유로 쓸 수 있는 필드(문서 기준)
MaxMind Anonymous IPis_anonymous_vpn, is_hosting_provider, is_public_proxy, is_residential_proxy, is_tor_exit_node
AbuseIPDBtotalReports, 신고 카테고리, usageType, maxAgeInDays 기간
IPQSproxy, vpn, tor, recent_abuse, bot_status, connection_type, 점수 구간(75·85·90의 뜻이 문서에 있음)
VirusTotallast_analysis_results의 엔진별 category·result
Criminal IPinbound·outbound 단계, issues(VPN·클라우드·스캐너 등) 근거 묶음
Cisco Talos이메일·웹 평판 등급과 그 뜻풀이(조회 화면). 정확한 SBRS 숫자는 Cisco 고객만 봅니다

내가 정할 것

  • 결과를 점수가 아니라 이유 목록으로 남깁니다. 13편의 공통 출력이 {"level":"review","reasons":[...]} 모양인 이유입니다.
  • 고객센터가 볼 화면에 그 이유를 그대로 보여 줍니다.

⑧ 검증 방법: 내 트래픽으로 먼저 잰다

판매사의 정확도 숫자는 판매사의 고객 트래픽 기준입니다. 내 서비스의 사용자 분포(모바일 비율, 해외 사용자, 회사 고객)는 다릅니다. 그래서 마지막 질문은 판매사가 아니라 나에게 하는 질문입니다. "붙이기 전에 무엇으로 재 볼 것인가."

  • 섀도 모드(판정은 남기되 실제 대응은 하지 않는 단계)로 2~4주 돌립니다. 섀도 모드의 원리는 방어선 1-④에 있습니다.
  • 이미 아는 정답과 맞춰 봅니다. 차지백 난 결제, 나중에 정지한 계정, 정상으로 확인된 고객.
  • 화면별로 따로 잽니다. 가입과 결제의 기준은 다릅니다.

14편에서 이름표 붙은 가짜 트래픽으로 이 측정을 해 봅니다.

솔루션 6개 × 여덟 가지 질문

솔루션 6개(MaxMind, AbuseIPDB, IPQS, VirusTotal, Cisco Talos, Criminal IP)를 여덟 가지 질문에 맞춰 문서에서 확인한 단서를 짧게 적은 비교표

표의 칸은 문서에서 확인한 단서만 짧게 적었습니다(04~09편 기준). 좋고 나쁨의 점수가 아닙니다. 빨간 칸은 도입 전에 꼭 짚을 위험, 회색 칸은 공개 문서로 답이 덜 된 칸이고, 그 칸이 곧 판매사에 물을 질문입니다. ⑥과 ⑧은 어느 솔루션이든 "내 설계"로 같습니다.

질문MaxMindAbuseIPDBIPQSVirusTotalTalosCriminal IP
① 갱신·감쇠Anonymous IP 매일 새 파일maxAgeInDays 1~365, 매일 재계산조회 시점 계산, recent_abuse는 지난 며칠마지막 분석 시점화면 3시간 갱신포트는 최근 60일, 피드 1시간
② 공유 IP성격 플래그usageType, 허용 목록shared_connection, allow_public_access_points엔진마다 다름, 벤더에 정정 요청소유자 이의 제기is_mobile 등 issues
③ 제공 형태로컬 mmdb, 웹 서비스API, 목록APIAPI제품 연동, 조회 화면API, 방향별 피드
④ IP가 나가나로컬이면 안 나감나감나감(키·IP가 URL에)나감, 조회가 공개 데이터셋에제품에 따라나감(피드는 안 나감)
⑤ 약관·한도사용 표시 의무무료 1,000/일, 상업 금지1,000 Free Lookups(조건 확인 필요)공개 API 상업 금지대량 API 안 보임무료 월 50회
⑥ 장애 때내 설계내 설계내 설계내 설계내 설계내 설계
⑦ 이유 필드플래그 6개신고 수·카테고리플래그 여럿, 점수 구간 뜻엔진별 결과등급 뜻풀이방향별 단계, issues
⑧ 검증섀도 모드섀도 모드섀도 모드섀도 모드섀도 모드섀도 모드

오탐과 한계

  • 이 체크리스트는 문서로 확인할 수 있는 것만 다룹니다. 판매사의 실제 오탐률, 국외 서버 위치, 조회 IP 보관 기간은 공개 문서에 없는 경우가 많고, 직접 물어야 합니다.
  • 법률 부분은 조문 요약입니다. IP 주소가 개인정보인지, 평판 API 호출이 국외 이전의 어느 경우인지는 사실관계에 따라 달라질 수 있습니다. 법률 자문이 아닙니다.
  • 요금·한도·약관은 자주 바뀝니다. 아래 확인 날짜 이후에는 공식 페이지를 다시 보세요.
  • 감쇠 그림은 설명용 모형입니다. 어느 회사의 공식이 아닙니다.

실무 체크

  • 판매사 미팅 전에 여덟 가지 질문을 보내고, 답이 "확인 필요"인 칸을 계약 전에 채웁니다.
  • 사용자 IP를 외부로 보내는 소스는 화면을 골라 붙이고, 외부 전송 안 함 스위치를 둡니다.
  • 무료 키를 운영 경로에 붙이기 전에 약관의 상업 이용 조항을 확인합니다.

정리

  • 갱신 주기는 "얼마나 빨리 들어오나"와 함께 "얼마나 빨리 빠지나"를 묻습니다.
  • 공유 IP 문제는 어느 솔루션도 완전히 풀지 못합니다. 성격 필드와 이의 제기 절차를 확인하고, 점수만으로 막지 않습니다.
  • 사용자 IP가 밖으로 나가는 것은 API 형태뿐입니다. 나간다면 국외 이전·처리 위탁 공개를 담당자와 확인합니다(법률 자문 아님).
  • 장애 때 동작과 검증 방법은 도구가 아니라 내 설계입니다. 다음 두 편에서 직접 만들고 잽니다.

출처와 확인 날짜

모든 링크는 2026-10-31에 확인했습니다.


이전 글 DMARC 집계 보고서로 내 발송 IP 지켜보기
다음 글 연동 아키텍처: 여러 소스를 하나의 판단으로
시리즈 전체 목록 IP 평판은 어떻게 만들어지고, 어떻게 써야 하나 전체 목록

profile
고인물 개발자(OG)

0개의 댓글