수정 완료 약 5분

한 매체가 닷새 동안 매일 다른 이유로 실패했다. 원인은 하나였다

VentureBeat 피드가 나흘은 429, 닷샛날은 SSL 타임아웃으로 죽었다. 증상은 매일 달랐지만 원인은 하나였다. 사이트 전체가 봇 검문(자바스크립트 챌린지) 뒤로 들어갔고, 피드 파서로는 뚫을 수 없었다. 증상을 쫓았으면 헛다리를 짚었을 것이다.

이 글은 뉴스 요약이 아니라 이 사이트를 만들면서 있었던 일에 대한 기록입니다.

9월 4일부터 VentureBeat 피드가 안 들어왔다. 그런데 실패 이유가 매일 달랐다. 며칠은 서버가 429를 줬다가, 마지막 날은 연결 자체가 안 섰다.

매일 다른 에러

날짜아카이브가 남긴 실패 이유
9월 4~7일HTTP 429 (요청이 너무 많다)
9월 8일SSL 핸드셰이크 타임아웃 (연결이 안 선다)
같은 매체, 다섯 날, 두 가지 증상.

429는 "요청이 너무 잦다", SSL 타임아웃은 "연결 자체가 안 선다"다. 표면만 보면 전혀 다른 문제다. 하나는 우리가 너무 자주 불렀나 싶고, 하나는 망 문제인가 싶다. 앞엣것은 호출 간격을 늘려 보게 하고, 뒤엣것은 재시도를 넣고 싶어진다.

원인은 하나였다

로컬에서 깨끗한 IP에 진짜 크롬 UA를 줘도 첫 요청부터 429와 X-Vercel-Mitigated: challenge가 왔다. 홈페이지도, /feed/도, 예전 카테고리 피드도 전부. 사이트 전체가 Vercel Attack Challenge Mode, 즉 자바스크립트 봇 검문 뒤로 들어간 것이다.

자바스크립트 챌린지라 feedparser로는 UA든 재시도든 헤더든 무엇을 바꿔도 못 뚫는다. 429든 SSL 타임아웃이든, 검문이 응답을 어떻게 돌려주느냐의 차이였을 뿐 벽은 같았다.

이 저장소에서 겪은 계열과 같다. 마크테크포스트의 클라우드플레어 검문, openai의 데이터센터 IP 차단. allowlist에 있어도, 도메인이 맞아도, 사이트가 데이터센터에서 오는 요청을 막기로 하면 코드로는 못 뚫는다.

대체 피드를 고르는 기준

매체를 바꿔야 했다. 아무거나 넣지 않고 실제 파서로 확인했다. 고른 곳은 SiliconANGLE AI(category/ai/feed)다. Server가 nginx라 검문 헤더가 없고, 하드 AI 뉴스(랩·펀딩·기술) 밀도가 높으며, 매일 발행된다. 파서로 200, 30건, 타임존 정상을 확인했다.

떨어진 곳도 있다. ZDNet은 404, Microsoft AI는 410에 클라우드플레어 검문이 앞에 있었다.

새 호스트 siliconangle.com은 클라우드 네트워크 allowlist에 들어가야 수집된다. 안 들어가면 다음 무인 실행이 403으로 조용히 실패한다. 이 저장소가 반복해서 당한 곳이라, 도메인을 건드릴 때마다 먼저 본다.

남는 것

며칠에 걸친 실패를 날마다의 에러 코드로 따로 보면 매일 다른 사건 같다. 묶어서 보면 하나다. 그래서 이 저장소는 피드 실패의 이유를 아카이브에 남기게 해 뒀다. 이유가 남으니 나흘의 429와 닷샛날의 타임아웃이 한 줄로 이어졌다.

상태 코드는 무엇이 막혔는지는 말해 주지만 누가 왜 막았는지는 아니다. 이 저장소의 또 다른 기록(GitHub 403)이 같은 말을 한다. 여기서도 답은 상태 코드가 아니라 X-Vercel-Mitigated 헤더 한 줄에 있었다.

← 기록 전체

이 사이트가 무엇을 어떻게 고르는지는 소개에, 매일의 수집·발행 수치는 데이터에 공개돼 있습니다.