몇 년 전에 붙여둔 reCAPTCHA는 지금도 화면에 잘 떠 있고, 서버 로그에도 검증 성공이 계속 찍힙니다. 그런데 어느 달부터 가입자 목록에 이상한 계정이 하루 수십 개씩 쌓입니다. 코드를 건드린 적도, 에러가 난 적도 없습니다.

캡차가 고장 난 것이 아닙니다. 구글이 무료 한도를 크게 줄였고, 그 한도를 넘긴 사이트에서 reCAPTCHA는 막는 대신 통과시키는 쪽으로 동작합니다. 문제는 이 전환이 아무 소리 없이 일어난다는 점입니다.

무료 한도가 월 100만 건에서 조직 합산 1만 건으로 줄었습니다

구글 클라우드 공식 과금 문서에 적힌 무료 등급은 "조직당 월 1만 건"입니다. 그리고 이 한도는 조직 아래의 모든 계정과 모든 사이트 사용량을 합산한다고 못 박고 있습니다. 사이트 키마다 따로 세어 주지 않습니다.

이전 기준은 reCAPTCHA FAQ에 적힌 대로 초당 1,000건, 월 100만 건이었습니다. 사이트 하나당 100만 건이던 것이 회사 전체 1만 건이 된 셈입니다. 월 1만 건은 하루 약 333건이고, 로그인과 회원가입과 문의 폼에 모두 캡차를 붙인 회사라면 월초 며칠 만에 닿는 숫자입니다.

한도를 넘으면 차단이 아니라 점수 0.9로 전부 통과시킵니다

구글 마이그레이션 문서의 문장이 핵심입니다. 한도를 넘긴 SiteVerify 요청은 fail open 처리되어 success를 true로 돌려주고, 점수는 0.9로 고정된다고 적혀 있습니다. 응답 안에 한도를 초과했다는 에러 메시지가 함께 들어갈 뿐입니다.

대부분의 사이트는 점수 0.5를 통과 기준으로 씁니다. 한도를 넘긴 순간부터 모든 요청이 0.9로 돌아오니, 봇이든 사람이든 예외 없이 통과합니다.

결제 계정을 등록해 둔 프로젝트는 한도를 넘겨도 정상 채점되고 요금만 붙습니다. 결제를 붙이지 않은 프로젝트만 이 상태에 빠집니다. 즉 지갑을 열지 않은 사이트가 조용히 무방비가 됩니다.

v3를 쓰는 사이트는 화면에도 로그에도 표시가 남지 않습니다

공식 FAQ 기준으로 v2는 한도를 넘기면 사용자 화면에 "This site is exceeding reCAPTCHA quota"라는 문구가 뜹니다. 반대로 v3는 사용자에게 보이는 표시가 없다고 명시돼 있습니다. 겉으로 드러나는 증상은 늘어난 스팸 가입뿐입니다.

서버 쪽도 비슷합니다. 결제 없이 신형 API를 직접 호출하는 코드는 429 한도 초과 오류를 받아 곧바로 알아챕니다. 그러나 예전 방식대로 siteverify만 부르는 사이트는 정상 응답을 받습니다. success와 score만 보고 에러 메시지 필드를 버리는 코드라면 아무 일도 없는 것처럼 보입니다.

봇이 많은 사이트일수록 더 빨리 무너진다고 봅니다. 봇의 시도도 한도를 그대로 깎아 먹기 때문입니다. 공격이 몰리면 한도가 먼저 닳고, 닳은 다음부터는 그 공격이 전부 통과합니다.

우리 사이트가 이미 뚫렸는지 먼저 확인하세요

개발사에 문의하기 전에 며칠치 로그만 열어봐도 판단이 섭니다. 다섯 가지를 확인하세요.

  • 최근 캡차 점수가 0.9 하나로만 찍히는지
  • siteverify 응답의 에러 메시지 필드를 로그에 남기고 있는지
  • 구글 클라우드 콘솔의 이번 달 사용량이 1만 건에 닿았는지
  • 한 조직 아래 여러 사이트와 앱이 같은 한도를 나눠 쓰는지
  • 가입 반려나 실패 건수가 어느 시점부터 0에 가까워졌는지

점수가 0.9로만 나온다면 사실상 확정입니다. 정상 상태라면 점수는 0.1부터 0.9까지 흩어져 나옵니다.

대부분의 사이트는 결제 계정만 붙이면 끝납니다

공식 과금표는 세 구간입니다. 첫 1만 건은 무료, 1만 건 초과 10만 건까지는 월 8달러 정액, 10만 건을 넘는 분량은 1,000건당 1달러입니다. 하루 3,300건까지 쓰는 사이트가 월 8달러로 끝난다는 뜻입니다.

코드는 한 줄도 고치지 않습니다. 구글은 마이그레이션 이후에도 기존 키가 코드 변경 없이 계속 동작한다고 밝히고 있습니다. 캡차를 교체하는 개발 비용과 회귀 위험을 생각하면, 월 8달러로 해결되는 상황에서 굳이 갈아탈 이유는 없습니다.

Turnstile은 검증 요청을 세지 않고 위젯 수로 제한합니다

클라우드플레어 공식 플랜 문서 기준으로 Turnstile 무료 플랜은 검증 요청이 무제한입니다. 대신 계정당 위젯 20개, 위젯 하나당 호스트네임 10개, 분석 데이터 보관 7일이라는 제한이 붙습니다. 엔터프라이즈는 위젯 무제한에 호스트네임 200개, 보관 30일입니다.

작업은 두 군데입니다. 화면의 위젯 코드를 바꾸고, 서버 검증 주소를 클라우드플레어의 siteverify 주소로 바꾸면 됩니다. 다만 Turnstile 응답에는 점수가 없고 성공과 실패만 있습니다. 점수 임계값으로 등급을 나누던 코드가 있다면 통과와 차단 두 갈래로 다시 짜야 합니다.

hCaptcha는 무료 요금제가 있지만 점수 기능은 상위 요금제입니다

hCaptcha 공식 요금 페이지 기준으로 Basic은 0달러이고 월 한도 표기가 없습니다. Pro는 월 결제 139달러, 연 결제 시 월 99달러이며 월 10만 건이 포함되고 초과분은 1,000건당 0.99달러입니다.

같은 페이지에서 위험 점수와 상세 분석은 엔터프라이즈 기능으로 표기돼 있습니다. reCAPTCHA v3처럼 점수로 처리를 나누던 구조를 그대로 옮기려면 무료 요금제로는 부족합니다. 사람인지 아닌지만 가리면 되는 문의 폼이라면 무료로 충분합니다.

네이버 캡차는 성격이 다른 선택지입니다

네이버 클라우드 플랫폼은 캡차를 이미지와 음성 두 종류의 API 상품으로 제공하는 종량제 서비스입니다. 다만 이 글을 쓰는 시점에 공식 상품·요금 페이지가 열리지 않아 건당 금액과 무료 제공량은 확인하지 못했습니다. 금액은 반드시 네이버 클라우드 콘솔의 요금 계산기에서 직접 확인하세요.

이 선택지의 이유는 가격이 아니라 국내 사업자라는 점입니다. 개인정보 처리 위탁 문서에 해외 사업자를 적기 어려운 공공·금융 사업이라면 여기서 결론이 납니다. 반대로 그런 제약이 없다면 무료로 무제한인 Turnstile을 두고 종량제를 고를 이유는 약합니다.

선택지별 비용과 작업량은 이렇게 갈립니다

선택지비용작업량
reCAPTCHA + 결제 등록월 10만 건까지 8달러코드 변경 없음, 결제 계정 등록만
Cloudflare Turnstile무료, 검증 요청 무제한위젯·검증 주소 교체, 점수 분기 제거
hCaptchaBasic 무료 / Pro 연결제 월 99달러위젯·검증 주소 교체, 점수는 상위 요금제
네이버 캡차종량제(금액 미확인)화면과 검증 흐름 직접 구현

표를 그대로 읽으면 판단은 단순합니다. 월 사용량이 10만 건 이하면 결제 등록이 가장 싸고 빠릅니다. 결제 수단을 물리기 싫거나 트래픽이 큰 서비스라면 Turnstile이 답입니다.

이럴 때는 갈아타지 않는 편이 낫습니다

Turnstile 무료 플랜은 위젯 20개, 위젯당 호스트네임 10개입니다. 고객사 도메인을 수백 개 붙이는 임대형 서비스라면 무료 플랜으로 감당되지 않습니다. 이 경우에는 결제를 붙인 reCAPTCHA나 엔터프라이즈 계약이 현실적입니다.

캡차를 바꾼다고 스팸 가입이 전부 사라지지도 않습니다. 캡차는 자동 가입을 걸러낼 뿐이고, 사람이 손으로 만드는 계정은 막지 못합니다. 이메일 인증과 가입 속도 제한을 함께 걸어야 합니다.

근거가 되는 원문은 구글 클라우드 과금 문서Turnstile 플랜 문서에서 직접 확인하실 수 있습니다. 비슷한 운영 사고 사례는 운영 노트에 모아 두었고, 교체 작업이 필요하시면 Codeforest로 문의하세요.

결론: 로그의 점수부터 확인하고, 대부분은 결제만 붙이세요

이번 변화의 무서운 점은 캡차가 멈추지 않는다는 데 있습니다. 조직 합산 1만 건을 넘긴 순간부터 siteverify는 성공과 점수 0.9를 계속 돌려주고, v3 사이트에는 어떤 경고도 뜨지 않습니다. 그래서 스팸 가입이 쌓이기 전까지 아무도 모릅니다.

오늘 할 일은 두 가지입니다. 최근 점수가 0.9로만 찍히는지 로그를 확인하고, 조직 사용량이 1만 건에 닿았는지 콘솔에서 보세요. 월 10만 건 이하라면 결제 계정을 붙이는 것으로 끝내고, 그보다 크거나 해외 결제를 피해야 한다면 Turnstile을 우선 검토하세요.