CAPTCHA를 즐기는 사람은 아무도 없습니다. 자신이 사람임을 증명하려고 신호등과 소화전을 눈을 가늘게 뜨고 들여다보는 일은 모든 정직한 방문자에게 부과되는 세금이며, 그 퍼즐이 광고 네트워크로 되돌려 보내는 데이터는 그 자체로 또 다른 문제입니다. Cloudflare Turnstile은 이 모든 것을, 방문자가 사람임을 확인하는 똑똑하고 대체로 보이지 않는 검사로 대체합니다. 퍼즐도 없고, 추적도 없으며, 비용도 들지 않습니다. 2026년에 이것은 폼을 봇으로부터 보호하는 가장 깔끔한 방법입니다.
이 가이드는 Turnstile이 무엇인지, 왜 대부분의 사이트에서 reCAPTCHA를 능가하는지, 그리고 많은 튜토리얼이 건너뛰는 매우 중요한 서버 측 검증 단계를 포함하여 어떤 폼에든 정확히 어떻게 추가하는지를 차근차근 살펴봅니다.
요약
- Turnstile은 시각적 퍼즐이 없는, Cloudflare의 무료이며 개인정보 친화적인 CAPTCHA 대안입니다
- 무료이며 넉넉한 한도를 제공하고, 이미 Cloudflare에 있는 사이트뿐 아니라 어떤 웹사이트에서도 작동합니다
- 설정은 두 부분으로 이루어집니다: 폼의 위젯과 절대 건너뛰면 안 되는 서버 측 검증 호출입니다
- 서로 다른 폼에 맞도록 managed, non-interactive, invisible 위젯 모드를 제공합니다
- 문의 폼, 가입, 로그인, 댓글창에서 reCAPTCHA의 드롭인 대체입니다
Cloudflare Turnstile이란 무엇인가
Cloudflare Turnstile 은 백그라운드에서 실행되는 일련의 가볍고 방해되지 않는 브라우저 챌린지를 사용하여 방문자가 사람인지 확인하는 CAPTCHA 대체재입니다. 사용자에게 퍼즐을 풀라고 요구하는 대신, 브라우저에서 오는 신호를 분석하고, 대부분의 경우 방문자를 조용히 확인합니다. 상호작용이 필요한 경우에도 보통 단일 체크박스이며, 결코 이미지 그리드가 아닙니다.
무엇보다 Turnstile은 개인정보를 존중하도록 만들어졌습니다. 광고를 판매하기 위해 사용자를 프로파일링하지 않으며, 웹 전반에서 개인을 추적하는 데 의존하지도 않습니다. 방문자를 데이터 상품으로 만들지 않고도 봇 보호를 얻을 수 있으며, 이는 GDPR을 의식하는 사이트에 점점 더 중요해지고 있습니다.
또한 어떤 사이트에서도 작동합니다. Turnstile을 사용하기 위해 도메인을 Cloudflare 프록시로 통과시킬 필요가 없습니다. 위젯과 검증 API는 어디서든 작동합니다.
왜 reCAPTCHA를 대체하는가
전환에 대한 논거는 간단합니다:
- 더 나은 사용자 경험. 정당한 방문자에게 퍼즐이 없어 폼 이탈이 줄어듭니다.
- 개인정보. Turnstile은 지배적인 대안과 달리 광고를 위해 사용자를 추적하지 않도록 설계되었습니다.
- 무료이며 넉넉함. Turnstile은 무료로 사용할 수 있으며, 한도는 대다수 사이트에 충분히 높습니다.
- 어디서나 작동. DNS를 Cloudflare에 두어야 한다는 제약이 없습니다.
- 간단한 통합. 스크립트 태그 하나, 위젯 하나, 그리고 한 번의 서버 측 검사입니다.
대부분의 문의 폼, 가입, 댓글 시스템에서는 전통적인 CAPTCHA의 사용성 비용을 계속 치를 이유가 거의 없습니다.
1단계: Turnstile 위젯 만들기
Cloudflare 대시보드에서 Turnstile을 열고 새 사이트를 추가합니다. 이름과 위젯이 실행될 호스트 이름을 입력합니다. Cloudflare는 두 개의 키를 제공합니다:
- HTML에 들어가는 site key(공개)
- 서버에 남아 검증에 사용되는 secret key(비공개)
위젯 모드도 선택합니다:
| 모드 | 동작 |
|---|---|
| Managed | Cloudflare가 위험도에 따라 체크박스 표시 여부를 결정합니다(권장 기본값) |
| Non-interactive | 체크박스 없이 조용히 실행됩니다 |
| Invisible | 완전히 숨겨져 전적으로 백그라운드에서 실행됩니다 |
managed 모드는 대부분의 폼에 합리적인 출발점입니다.
2단계: 위젯을 폼에 추가하기
Turnstile 스크립트를 포함하고 위젯 요소를 폼에 넣습니다. YOUR_SITE_KEY를 대시보드의 site key로 바꾸세요:
1<form action="/submit" method="POST">
2 <input type="email" name="email" required />
3
4 <!-- Turnstile widget -->
5 <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
6
7 <button type="submit">Send</button>
8</form>
9
10<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
위젯이 실행되면 일회용 토큰을 담은 cf-turnstile-response라는 숨김 필드를 폼에 추가합니다. 바로 이 토큰을 다음 단계에서 서버가 검증합니다.
3단계: 서버에서 검증하기 (이 단계를 건너뛰지 마세요)
이것이 실제로 보호를 제공하는 단계이며, 튜토리얼이 가장 자주 빠뜨리는 단계입니다. 위젯만으로는 아무것도 증명하지 못합니다. 공격자는 폼을 직접 제출할 수 있습니다. 제출을 신뢰하기 전에 폼에서 토큰을 가져와 Cloudflare의 siteverify 엔드포인트에 대해 서버 측에서 검증해야 합니다.
토큰과 secret key를 https://challenges.cloudflare.com/turnstile/v0/siteverify로 보냅니다:
1// Example: Cloudflare Worker or any server-side handler
2async function verifyTurnstile(token, ip, secret) {
3 const formData = new FormData();
4 formData.append("secret", secret);
5 formData.append("response", token);
6 if (ip) formData.append("remoteip", ip);
7
8 const result = await fetch(
9 "https://challenges.cloudflare.com/turnstile/v0/siteverify",
10 { method: "POST", body: formData }
11 );
12
13 const outcome = await result.json();
14 return outcome.success === true;
15}
outcome.success가 true일 때만 폼 동작(이메일 발송, 계정 생성, 댓글 게시)을 진행하세요. false이면 제출을 거부합니다. 클라이언트 측 코드에 secret key를 절대 노출하지 마세요.
개발에 유용한 정보: Cloudflare는 항상 통과하거나, 항상 차단하거나, 항상 인터랙티브 챌린지를 강제하는 테스트 키 를 제공하므로, 출시 전에 모든 경로를 테스트할 수 있습니다.
Cloudflare Turnstile의 일반적인 사용 사례
Turnstile은 봇이 악용할 수 있는 어디에나 들어맞습니다:
- 스팸 제출을 막는 문의 폼
- 가짜 계정 생성을 차단하는 가입 및 등록(Cloudflare Pages 사용자 시스템 과 잘 어울립니다)
- 크리덴셜 스터핑 공격을 늦추는 로그인 폼
- 진짜 독자를 성가시게 하지 않으면서 스팸을 줄이는 댓글창
- 목록을 깨끗하게 유지하는 뉴스레터 가입
사이트 전반에 걸쳐 서버 측 검증을 제대로 포함하여 봇 보호를 올바르게 설정하고 싶다면, 그것은 제 웹사이트 보안 서비스 에서 다루는 내용의 일부입니다.
핵심 요점
- Turnstile은 시각적 퍼즐이 없는 무료이며 개인정보 친화적인 CAPTCHA 대체재입니다
- DNS가 Cloudflare에 있는 사이트뿐 아니라 어떤 웹사이트에서도 작동합니다
- 통합은 폼의 위젯과 필수적인 서버 측 검증 호출로 이루어집니다
- managed 모드가 최선의 기본값입니다. non-interactive와 invisible 모드는 특정 요구에 맞게 존재합니다
- 토큰은 항상 서버 측에서 검증하세요. 위젯만으로는 실질적인 보호가 되지 않습니다
- 폼, 가입, 로그인, 댓글에서 reCAPTCHA의 깔끔한 드롭인 대체입니다
자주 묻는 질문
Cloudflare Turnstile은 무료인가요? 네. Turnstile은 무료로 사용할 수 있으며, 한도는 대다수 웹사이트에 충분히 넉넉합니다. 표준 위젯과 검증 흐름에는 요금이 부과되지 않습니다.
Turnstile을 사용하려면 사이트가 Cloudflare에 있어야 하나요? 아니요. Turnstile은 DNS나 호스팅이 어디에 있든 어떤 웹사이트에서도 작동합니다. 위젯을 만들고 site key와 secret key를 얻기 위해 Cloudflare 계정만 있으면 됩니다.
Turnstile은 reCAPTCHA의 좋은 대체재인가요? 대부분의 사이트에는 그렇습니다. 퍼즐 없는 더 나은 사용자 경험을 제공하고, 광고를 위해 사용자를 추적하기보다 개인정보를 존중하도록 설계되었으며, 무료입니다. 동일한 사용 사례인 문의 폼, 가입, 로그인, 댓글을 모두 다룹니다.
토큰을 서버에서 검증해야 하나요? 네, 항상입니다. 클라이언트 측 위젯만으로는 봇이 폼을 직접 제출할 수 있기 때문에 보호되지 않습니다. 토큰을 secret key와 함께 Cloudflare의 siteverify 엔드포인트로 보내고, success를 반환하는 제출만 신뢰해야 합니다.
Turnstile은 어떤 위젯 모드를 제공하나요? 세 가지입니다: managed(Cloudflare가 위험도에 따라 체크박스 표시 여부를 결정), non-interactive(조용하며 체크박스 없음), invisible(완전히 숨김). managed 모드가 대부분의 폼에 권장되는 기본값입니다.
출시 전에 Turnstile을 테스트할 수 있나요? 네. Cloudflare는 항상 통과하거나, 항상 차단하거나, 항상 인터랙티브 챌린지를 강제하는 테스트 키를 제공하므로, 실제 키를 배포하기 전에 개발 단계에서 각 결과 경로를 검증할 수 있습니다.
댓글