Common Crawl 인덱스 조회 중 응답을 받지 못하는 경우가 많으며, UTC 기준 오전 4시가 최악입니다
요약
작성자는 Cloudflare Worker를 이용해 Common Crawl 인덱스 조회 결과를 모니터링한 경험을 공유하며, 특히 UTC 기준 오전 3시부터 오전 6시 사이의 실패율이 높다는 통계적 분석을 제시했습니다. 주요 오류 코드(503, 504 등)와 시간대별 패턴을 분석하고, 시스템 장애 시 재시도 전략에 대한 교훈을 얻었습니다.
핵심 포인트
- Common Crawl 인덱스 조회는 Cloudflare Worker를 통해 매일 진행됨.
- UTC 오전 3~6시는 실패율이 높아 가장 취약한 시간대로 파악됨.
- 단순히 짧은 간격으로 재시도하는 것보다 몇 시간 후의 재시도가 효과적임.
- 실패 기록 방식(오류 vs. 포함되지 않음)에 대한 이해가 중요함.
지난 5월 15일부터 저는 Cloudflare Worker를 이용해 Common Crawl 인덱스를 매일 확인하고 있습니다. 제 사이트의 약 12개 URL이 현재 크롤링에 포함되어 있는지 여부를 조회하는 것입니다. 이는 간단하고 지루한 점검입니다. 컬렉션 목록을 가져오는 요청 한 번과, URL당 CDX 조회 한 번으로 구성되며, 각 결과는 표의 한 행에 기록됩니다.
하지만 실제 응답보다 실패 사례가 더 흥미로웠습니다.
수치 분석
총 1,889건의 조회에서 173개의 스냅샷이 URL별 결과를 제공했습니다. 이 중 605건은 아예 답변을 받지 못했습니다:
- HTTP 503: 344회
- HTTP 504: 103회
- HTTP 521: 80회
- 내 타임아웃으로 중단: 52회
- HTTP 502, HTTP 500, HTTP 520: 각각 18회, 7회, 1회
이는 전체 조회 건수의 32%에 해당합니다. 173개 스냅샷 중 11개 스냅샷에서는 모든 조회가 실패했습니다.
시간대별로 보면 더욱 불균형합니다. 예약된 실행은 UTC 기준 오전 4시에 이루어집니다. UTC 기준 오전 3시부터 오전 6시 사이에 발생한 조회는 총 1,339건 중 491건이 실패하여 약 37%를 차지했습니다. 다른 시간대에 발생한 조회는 550건 중 114건이 실패하여 약 21%였습니다.
저는 이 분할에 너무 큰 의미를 부여하고 싶지는 않습니다. 대부분의 비(非)정규 시간 스냅샷은 수동 재실행이며, 보통 아침에 실패한 것을 확인한 후에 재실행을 시작하기 때문에, 이미 상황이 나아졌을 때인 경우가 많습니다. 따라서 선택 효과가 내재되어 있습니다. 하지만 이 추세는 5개월 동안 지속되었습니다.
지금까지의 월 중 가장 심각했던 달은 10월입니다. 총 132건 중 79건이 실패했습니다.
지난 세 번의 아침
10월 10일과 11일에는 조회 자체가 진행되지 않았습니다. 컬렉션 목록을 요청한 것이 521 오류를 반환했고, 이 호출은 재시도가 없었기 때문에 전체 단계가 실패하여 아무것도 기록하지 못했습니다. URL 조회는 지난 8월부터 재시도가 있었지만, 컬렉션 목록은 그렇지 않았습니다.
그래서 저는 해당 호출에 10초와 20초 간격으로 세 번의 시도를 추가했습니다. 10월 12일에는 성공적으로 진행되었습니다. 그러자 아홉 개의 URL 조회 모두 521 오류를 반환했습니다.
이전 두 날짜에는 오후에 단계를 재실행했습니다. 10월 10일에는 12개 중 12개의 조회가 답변을 받았습니다. 10월 11일에는 12개 중 10개가 답변을 받았습니다. 동일한 코드, 동일한 URL이었지만 몇 시간 후에 진행되었습니다.
이 글을 쓰는 동안 UTC 기준 약 06:10에 일반 curl 명령어로 컬렉션 목록 조회 시에는 200 응답을 받았지만, 특정 URL 조회에서는 504 응답을 받았습니다.
여기서 얻은 교훈
몇 초 간격으로 대기하며 재시도하는 것은 요청이 끊겼을 때 도움이 됩니다. 하지만 몇 시간 동안 다운된 인덱스에는 아무런 도움도 되지 않습니다. 만약 상위 시스템(upstream)에 문제가 있는 시간대가 있다면, 해결책은 20초 후 세 번째 시도를 하는 것이 아니라 몇 시간 후에 두 번째 시도를 하는 것입니다. 이것이 이 단계에서 필요한 다음 변경 사항입니다.
제가 일찍 처리해서 다행이라고 생각하는 또 다른 점은 실패한 조회(lookup)가 '포함되지 않음(not included)'으로 기록되는 것이 아니라 오류(error)로 저장된다는 것입니다. 포함률(inclusion rate)은 실제로 답변을 받은 URL만을 기준으로 계산되며, 너무 적게 답변이 오면 숫자를 보여주는 대신 공백으로 유지됩니다. 10월 11일의 경우, 이는 '총 10개 중 7개의 조회된 URL이 크롤에 포함됨'과 '총 12개 중 7개의 URL이 크롤에 포함됨' 사이의 차이를 만듭니다. 이 두 가지 중 오직 하나만이 사실입니다. 오류가 '포함되지 않음'으로 합산되었다면, 10월 수치는 마치 제 사이트가 Common Crawl에서 탈락하는 것처럼 보였겠지만, 실제로는 인덱스가 전화를 받지 않은 것뿐이었습니다.
만약 Common Crawl 인덱스를 주기적으로 조회한다면, 그들이 무엇을 말했는지 보기 전에 실제로 몇 개의 조회가 돌아왔는지를 확인해 보는 것이 가치가 있습니다.
이 수치들 뒤에 있는 실행 스냅샷(run snapshots)은 제 사이트의 리서치 대시보드에서 공개적으로 확인할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기