한 매체가 닷새 동안 매일 다른 이유로 실패했다. 원인은 하나였다
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 타임아웃이든, 검문이 응답을 어떻게 돌려주느냐의 차이였을 뿐 벽은 같았다.
대체 피드를 고르는 기준
매체를 바꿔야 했다. 아무거나 넣지 않고 실제 파서로 확인했다. 고른 곳은 SiliconANGLE AI(category/ai/feed)다. Server가 nginx라 검문 헤더가 없고, 하드 AI 뉴스(랩·펀딩·기술) 밀도가 높으며, 매일 발행된다. 파서로 200, 30건, 타임존 정상을 확인했다.
떨어진 곳도 있다. ZDNet은 404, Microsoft AI는 410에 클라우드플레어 검문이 앞에 있었다.
남는 것
며칠에 걸친 실패를 날마다의 에러 코드로 따로 보면 매일 다른 사건 같다. 묶어서 보면 하나다. 그래서 이 저장소는 피드 실패의 이유를 아카이브에 남기게 해 뒀다. 이유가 남으니 나흘의 429와 닷샛날의 타임아웃이 한 줄로 이어졌다.
상태 코드는 무엇이 막혔는지는 말해 주지만 누가 왜 막았는지는 아니다. 이 저장소의 또 다른 기록(GitHub 403)이 같은 말을 한다. 여기서도 답은 상태 코드가 아니라 X-Vercel-Mitigated 헤더 한 줄에 있었다.