대부분의 웹 데이터 작업에서 가장 저렴한 크롤링은 이미 누군가 수행해 놓은 것이다. Common Crawl은 매달 공개 웹의 상당 부분을 무료로 공개하며, AI 모델 학습에 사용되는 많은 텍스트 데이터셋의 기반이 된다. 하지만 이는 특정 소스 목록이 아니라 범위를 위해 구축된 것이며, 어디까지 커버하는지 아는 것이 팀의 몇 주를 절약해 준다.
이 가이드는 Common Crawl에 포함된 것, 포함되지 않은 것, 필요한 페이지가 커버되는지 확인하는 방법, 그리고 직접 크롤링을 수행할 가치가 있는 경우를 다룬다.
제공되는 것
Common Crawl은 연구자, 기업, 개인에게 무료로 인터넷 사본을 제공하는 것을 목표로 하는 미국의 비영리 단체다. 2026년 10월 5일부터 18일 사이에 수집된 가장 최근 크롤링인 CC-MAIN-2026-43의 사실은 다음과 같다:
| 페이지 | 21억 6천만 |
| 등록된 도메인 | 3,430만 |
| 호스트 | 4,140만 |
| 이전 크롤링에서 보이지 않은 URL | 8억 3,010만 |
| 압축 해제된 콘텐츠 | 371.19 TiB |
| 주기 | 월 1회 정도 |
| 형식 | WARC(원시 응답), WAT(메타데이터), WET(일반 텍스트) |
| 접근 방식 | us-east-1의 공개 AWS 버킷, HTTPS 다운로드, URL 인덱스 |
언어 구성은 넓지만 편중되어 있다. 해당 크롤링에서 감지된 HTML 페이지 중 영어가 42.6%를 차지했고, 러시아어가 6.3%, 독일어가 5.8%로 뒤를 이었다.
포함되지 않은 것
다음 제한 사항들은 Common Crawl 자체 문서에서 나온 것이며, 대부분의 구축 또는 재사용 결정을 좌우한다.
- 표본일 뿐이다. Common Crawl은 일반적으로 웹사이트 전체가 아니라 “무작위로 선택된 일부”를 아카이브한다고 밝히고 있다. 모든 제품 페이지나 모든 기사가 포함될 것이라 기대해서는 안 된다.
- JavaScript가 없다. FAQ에 따르면 JavaScript는 실행되지 않으며 쿠키도 사용되지 않으므로, 스크립트가 실행된 후에만 나타나는 콘텐츠는 누락된다.
- 로그인이나 페이월이 없다. 페이월 뒤로 들어가거나 어떤 웹사이트에도 로그인하지 않는다고 명시되어 있다.
- 거부를 존중한다. CCBot은 먼저 robots.txt를 확인하고 crawl-delay를 따른다. 10월 크롤링에서는 4.85%의 요청이 robots.txt 또는 403에 의해 거부되었고, 18.47%는 건너뛰어졌다. 웹의 얼마나 많은 부분이 봇 차단 뒤에 있는지에 대한 우리의 분석이 이 수치를 맥락 속에서 보여준다.
- 단일 관측 지점. 소수의 공개된 주소 집합에서 크롤링하므로, 각 페이지에 대해 하나의 시점만 얻게 된다. 국가, 언어, 기기에 따라 달라지는 페이지는 한 가지 버전으로만 나타난다.
- 스냅샷이다. 페이지는 수집 날짜 당시의 모습으로 나타나며, 이는 몇 주 전 것일 수 있다.
결정 전에 커버리지를 확인하라
가장 빠른 테스트는 인덱스에게 원하는 소스가 있는지 물어보는 것이다. 아래 스크립트는 가장 최근 크롤링을 찾아 URL 패턴에 대한 캡처를 요청한다. Common Crawl의 요청대로 자신의 연결에서 한 번에 하나씩 요청을 보낸다. 대량 조회의 경우 AWS의 Parquet URL 인덱스를 대신 사용하라. 이 스크립트는 Python 3.9 이상에서 requests와 함께 동작한다.
from __future__ import annotations
import json
import requests
INDEX = "https://index.commoncrawl.org"
HEADERS = {"User-Agent": "coverage-check/1.0 (contact: data-team@example.com)"}
def latest_crawl():
"""The newest crawl ID, from Common Crawl's own list."""
return requests.get(f"{INDEX}/collinfo.json", headers=HEADERS, timeout=60).json()[0]["id"]
def captures(crawl, url_pattern, limit=1000):
"""Captures of matching URLs in one crawl. One request, no proxies: the index asks for that."""
r = requests.get(f"{INDEX}/{crawl}-index", headers=HEADERS, timeout=120,
params={"url": url_pattern, "output": "json", "limit": limit})
if r.status_code == 404: # no captures at all
return []
r.raise_for_status()
return [json.loads(line) for line in r.text.splitlines()]
if __name__ == "__main__":
crawl = latest_crawl()
rows = captures(crawl, "en.wikipedia.org/wiki/*")
statuses = {}
for row in rows:
statuses[row["status"]] = statuses.get(row["status"], 0) + 1
print(crawl, "captures returned:", len(rows), "by status:", dict(sorted(statuses.items())))
print("first:", rows[0]["url"], rows[0]["timestamp"]) if rows else print("none")
영어 위키백과에 대한 패턴으로, 1,000개 결과로 제한한 2026년 11월 6일의 출력 결과:
CC-MAIN-2026-43 captures returned: 1000 by status: {'200': 949, '301': 15, '404': 30, '429': 6}
first: https://en.wikipedia.org/wiki/!!! 20261017084408
여기서 두 가지가 바로 드러난다. 큰 사이트에 대한 커버리지는 실제로 존재하지만 부분적이므로, 자신의 패턴에 대해 얻는 결과를 직접 세어보아야 한다. 그리고 캡처는 Common Crawl이 받은 상태를 그대로 가지고 있는데, 여기서는 30개가 404였고 6개가 429였으므로 캡처가 항상 콘텐츠를 의미하지는 않는다. 무엇이든 사용하기 전에 상태로 필터링해야 한다.
무료 크롤링으로 충분한 경우
- 광범위한 텍스트에 대한 학습 및 연구. 언어 모델링, 분류기, 웹 규모 통계는 특정 페이지보다 범위를 필요로 한다. 이것이 Common Crawl이 가장 잘하는 일이며, 공개 웹에서 학습 데이터셋 구축하기에 대한 우리의 가이드는 여전히 필요한 필터링과 중복 제거를 다룬다.
- 발견. 어떤 도메인이 특정 주제를 언급하는지 찾거나, 링크를 매핑하거나, 사이트 규모를 추정하는 작업은 URL 인덱스로 저렴하게 할 수 있다.
- 과거 데이터 비교. 수년 전으로 거슬러 올라가는 월간 스냅샷은 스스로 재현하기 어렵다.
직접 크롤링이 필요한 경우
- 특정 페이지가 완전히 필요한 경우. 표본은 그중 일부를 놓칠 것이며, 어떤 것을 놓쳤는지 알 수 없다.
- 최신 데이터가 필요한 경우. 가격, 재고, 순위는 매일 변한다. 월간 스냅샷은 과거 기록일 뿐이다.
- 콘텐츠에 JavaScript가 필요한 경우. 많은 최신 페이지는 브라우저에서만 데이터를 렌더링한다.
- 로컬 시점이 필요한 경우. 가격, 검색 결과, 광고는 국가마다 다르다. 하나의 관측 지점에서의 크롤링은 하나의 답만 준다. 각 시장을 방문자가 보는 그대로 수집하는 것이 레지덴셜 프록시의 용도다.
- 출처를 증명해야 하는 경우. 직접 수행한 크롤링은 각 페이지를 어떻게, 언제, 어디서 가져왔는지 정확히 기록할 수 있게 해준다.
많은 팀이 두 가지를 결합한다. 범위와 발견을 위해서는 Common Crawl을, 가장 중요한 소스에는 자체 크롤러를 사용하는 식이다.
읽어볼 가치가 있는 약관
Common Crawl은 자체 약관을 가볍게 유지하지만, 그 내용은 중요하다. 이용 약관에 따르면 크롤링된 콘텐츠는 출처가 된 사이트의 약관을 따를 수 있으며, 사용자는 저작권 및 기타 권리를 존중하는 데 동의해야 하고, 상업적 사용 전에는 법률 자문을 받을 것을 권장한다. 사용자는 또한 해당 콘텐츠를 사용하여 AI 시스템을 개발, 학습, 배포함으로써 발생하는 주장에 대한 책임도 지게 된다. 2025년부터 Common Crawl은 법적 옵트아웃 요청 등록부도 공개하고 있으며, 영향을 받는 URL은 이후 크롤링과 도구에서 제외한다. 데이터를 재사용한다고 해서 이러한 문제에서 벗어나는 것은 아니므로, 사용한 내용에 대한 기록을 보관해야 한다.
결론
Common Crawl은 범위, 역사, 또는 저렴한 첫 조사가 필요할 때 적합한 출발점이다. 특정 페이지, 최신 데이터, JavaScript 콘텐츠, 또는 로컬 시점이 필요할 때는 더 이상 충분하지 않다. 먼저 인덱스로 커버리지를 확인하고, 상태별로 캡처를 필터링하고, 약관을 읽고, 무료 표본으로 부족한 부분만 직접 크롤링하라.
출처 및 참고 자료
- Common Crawl, FAQ: commoncrawl.org/faq
- Common Crawl, 2026년 10월 크롤링 아카이브: commoncrawl.org
- Common Crawl, 이용 약관(최종 수정일 2024년 3월 7일): commoncrawl.org/terms-of-use
- Common Crawl, 시작하기: commoncrawl.org/get-started
- Common Crawl, URL 인덱스: commoncrawl.org/url-index
- Common Crawl 통계, 크롤링 규모, 언어 및 크롤러 지표: commoncrawl.github.io
- Common Crawl, 옵트아웃 등록부(2025년 9월 17일): commoncrawl.org
- Common Crawl, 기록을 바로잡기(2025년 11월 4일): commoncrawl.org