Cloudflare 의 /crawl, 단일 API 호출로 전체 웹사이트 크롤링 지원
(developers.cloudflare.com)- Cloudflare가 Browser Rendering의 새로운 /crawl 엔드포인트를 공개 베타로 제공, 단 한 번의 API 호출로 전체 웹사이트를 크롤링할 수 있음
- 시작 URL을 제출하면 페이지를 자동으로 탐색하고 헤드리스 브라우저로 렌더링, 결과를 HTML, Markdown, JSON 형식으로 반환
- Workers AI 기반의 구조화된 JSON 출력, 크롤링 깊이, 페이지 수 제한, 와일드카드 패턴 등 범위 제어 기능과 증분 크롤링, 정적 모드 등 다양한 기능 제공
- robots.txt 규칙을 준수하며, 비정상적 트래픽을 방지하는 crawl-delay도 지원
- 모델 학습, RAG 파이프라인 구축, 사이트 전반의 콘텐츠 리서치 및 모니터링에 활용 가능
/crawl 엔드포인트 개요
- Cloudflare의 Browser Rendering 서비스에 새로 추가된 /crawl 엔드포인트는 단일 API 호출로 전체 웹사이트를 탐색하고 콘텐츠를 수집하는 기능 제공
- 사용자는 시작 URL을 제출하면, 시스템이 자동으로 링크를 따라가며 페이지를 렌더링하고 결과를 반환
- 반환 형식은 HTML, Markdown, 구조화된 JSON 중 선택 가능
- 이 기능은 공개 베타(open beta) 상태로 제공되며, Workers Free 및 Paid 플랜 모두에서 사용 가능
- 크롤 작업은 비동기(asynchronous) 방식으로 수행됨
- URL을 제출하면 job ID를 받으며, 이후 처리 완료 시점에 결과를 조회할 수 있음
- 페이지는 순차적으로 처리되며, 완료된 결과를 단계적으로 확인 가능
주요 기능
-
다중 출력 형식 지원
- HTML, Markdown, JSON 등 다양한 형식으로 결과 반환
- JSON 형식은 Workers AI를 통해 구조화된 데이터로 제공
-
크롤 범위 제어(crawl scope controls)
- 크롤 깊이(depth), 페이지 수 제한, URL 패턴 포함/제외 설정 가능
-
자동 페이지 탐색(automatic page discovery)
- 사이트맵(sitemap), 페이지 링크, 또는 두 가지 모두를 기반으로 URL 자동 탐색
-
증분 크롤링(incremental crawling)
-
modifiedSince와maxAge파라미터를 사용해 변경되지 않은 페이지를 건너뛰어 시간과 비용 절감
-
-
정적 모드(static mode)
-
render: false설정 시 브라우저를 실행하지 않고 정적 HTML만 가져오기, 정적 사이트의 빠른 크롤링 가능
-
-
정상적인 봇 동작(well-behaved bot)
- robots.txt의 지침을 준수하며, crawl-delay 설정도 인식
활용 및 참고 문서
- 이 엔드포인트는 모델 학습 데이터 수집, RAG 파이프라인 구축, 사이트 콘텐츠 연구 및 모니터링에 유용
- 사용자는 crawl endpoint 문서를 참고해 설정 가능
- 자신의 사이트를 크롤링 대상으로 설정할 경우, robots.txt 및 sitemap 모범 사례를 검토해야 함
사용 가능 플랜
- Workers Free 및 Paid 플랜 모두에서 사용 가능
Hacker News 의견들
-
내 경험상 Cloudflare로 보호된 페이지에서는 이게 작동하지 않음
아쉽게도, 문제를 스스로 만들고 다시 해결책을 파는 셈이 됨- Azure의 bot protection만 통과하면 괜찮을지도 모름
-
Cloudflare가 프록시를 사용하는 웹사이트의 미리 스크랩된 버전을 호스팅하지 않는 게 의외임
예를 들어 https://www.example.com/cdn-cgi/cached-contents.json 같은 형태로 제공할 수도 있을 텐데, 이미 캐시에 콘텐츠가 있으니까 굳이 스크래핑 서비스나 API를 거칠 필요가 없다고 생각함
물론 그렇게 하지 않는 이유도 있겠지만, 기본 옵션으로 제공하지 않는 게 놀라움- 이런 캐시 덤프를 공개하는 건 원본의 프라이버시와 저작권 가정을 완전히 깨뜨림
접근 제어를 걸 수도 있겠지만, 그건 결국 아무도 원하지 않은 복잡한 CDN API를 새로 만드는 셈이고, 법적 문제도 생김
“편리한 JSON”에서 “AI 스크래퍼에게 사이트 전체를 넘기는” 건 한 끗 차이임 - JSON 변환은 CPU를 쓰고, 결과를 저장하면 캐시 공간이 두 배로 늘어남
요청이 있을 때만 변환하면 원본 요청을 줄이면서도 캐시 효율을 유지할 수 있음
내가 CDN에서 일할 때는 캐시 히트율을 높이기 위해 ‘second hit caching’을 썼음 — 두 번째 요청이 들어올 때만 캐시에 저장하는 방식임 - 완전히 같은 건 아니지만, Cloudflare는 이미 비슷한 기능을 제공 중임
Markdown for Agents 기능을 켜면, AI 시스템이text/markdown을 요청할 때 HTML을 실시간으로 Markdown으로 변환해줌 - 사실 내부적으로는 이미 이런 식으로 공개 콘텐츠를 캐시 기반으로 제공하고 있을 가능성도 있음
- 단, 이런 방식은 단순한 사이트에는 통하겠지만, SPA 같은 복잡한 사이트는 여전히 브라우저 렌더링이 필요한 스크래핑 서비스가 필요함
- 이런 캐시 덤프를 공개하는 건 원본의 프라이버시와 저작권 가정을 완전히 깨뜨림
-
Cloudflare가 스크래핑 방어책을 팔면서 동시에 스크래핑 서비스를 파는 게 마치 조직폭력배 같음
인터넷 전반에 걸친 영향력 덕분에 가능한 일임- 그렇지 않음. 공식 문서에 설명되어 있음
- 무료 DNS는 전체의 일부일 뿐이고, 진짜 힘은 캐싱·라우팅·DDoS 방어 서비스에 있음
DNS는 데이터 수집과 ‘착한 이미지’용임 - 단순히 스크래핑 방어를 판 게 아니라, 웹 기반 DDoS 방어를 판 것임
- Cloudflare는 퍼블리셔와 AI 기업 사이의 중개자 역할을 하려는 듯함
퍼블리셔가 Cloudflare 뒤에 있고, AI 기업이 데이터를 원하면 Cloudflare를 통해 유료로 접근하게 만드는 구조임
일반 사용자가 아니라, AI 기업이 주요 고객층임 -
/crawl엔드포인트는robots.txt를 존중함
즉, 크롤링 금지된 URL은 응답에"status": "disallowed"로 표시됨
-
구조화된 crawl endpoint를 노출하는 건
robots.txt나sitemap의 자연스러운 진화처럼 느껴짐
더 많은 사이트가 이런 기계 판독용 진입점을 제공하면, 인덱싱이 훨씬 효율적일 것임
지금은 크롤러들이 같은 구조를 계속 재탐색하느라 낭비가 많음- REST를 계속 썼다면 인덱싱 낭비가 훨씬 줄었을 것 같음
나는 API를 사람 중심으로 설계하고, LLM 제공자가 그 위에서 최적화하도록 하는 쪽을 선호함 - 사실 semantic HTML이 이미 그 역할을 하고 있음
HTML과 DOM은 본질적으로 기계가 읽기 위한 구조임
새로운 걸 발명할 필요 없이, 기존 기술을 제대로 활용하면 됨 - 비효율적인 크롤링으로 이득을 보는 건 anti-bot 솔루션 업체뿐임
- 하지만 이런 구조는 공급망 공격을 악화시킬 수도 있음
사람에게는 정상 페이지를, 봇에게는 다른 페이지를 보여주는 식으로 악용될 수 있음 - 결국 크롤러와 사람에게 다른 콘텐츠를 보여주는 건 근본적인 문제를 낳음
- REST를 계속 썼다면 인덱싱 낭비가 훨씬 줄었을 것 같음
-
웹 아카이빙 용도로 쓸 수 있었을 텐데, WARC 포맷 지원이 없는 게 아쉬움
기자나 연구자에게 유용했을 것임 -
원본 서버는 여전히 Cloudflare의 Browser Rendering 요청을 감지하고 차단할 수 있음
CF-Worker헤더로 구분 가능하고, WAF 규칙이나 미들웨어에서 필터링 가능함
다만 이 요청들은 Cloudflare ASN 13335에서 오며 낮은 bot score를 가지므로, 단순한 점수 기반 방어는 통하지 않음
결국 애플리케이션 레벨의 속도 제한과 행위 분석이 더 효과적임
구조적 충돌은 존재하지만, 검색엔진이 웹마스터 도구를 제공하는 것과 비슷한 상황임- 그들은
robots.txt를 따르니, 그게 가장 간단한 방법임
- 그들은
-
이 크롤러가 bot 차단 로직 앞에서 동작하는지 뒤에서 동작하는지 궁금했음
- 앞단에서 동작함 — 공식 문서 참고
-
내 사이트의 잘 크롤된 버전을 제공할 수 있으면 좋겠다고 생각했음
사이트 관리자에게 그런 기능을 제공하면, 크롤러들이 단순히 전송 비용만 내고 접근할 수 있을 텐데
직접 내 사이트를 대상으로 크롤 잡을 돌리고,static.서브도메인으로 제공하는 식으로 구현할 수도 있을 듯함- 하지만 그게 어떤 용도인지 잘 모르겠음
사이트가 정적이라면 그냥 HTML로 렌더링해서 호스팅하면 되고, 동적이라면 스냅샷이 무슨 의미가 있을지 의문임
캐싱을 추가하는 게 더 나은 접근일 수도 있음
- 하지만 그게 어떤 용도인지 잘 모르겠음
-
Cloudflare는 요즘 멋진 기능들을 다 가져가는 느낌임
AWS는 뭐 하고 있는지 궁금함 -
이번 기능은 정말 인상적임
Cloudflare가 미래의 방향으로 미리 움직이고 있음