기본 콘텐츠로 건너뛰기

이번엔 200 이 속였다 — 「읽혔다」와 「받았다」는 다르다

한 줄 요약

어떤 서버는 「당신은 자동 요청이라 본문을 못 준다」는 안내를 HTTP 200 으로 돌려준다.
그러면 차단당한 페이지가 「짧지만 정상적으로 읽힌 페이지」처럼 보인다.

9월 29일 이 자리에 「HEAD 로 물으면 404, GET 으로 물으면 200」 이야기를 적었다. 상태 코드만 믿었다가 살아 있는 링크 164건을 사망으로 셌던 일이다. 오늘은 같은 함정의 반대편을 적는다. 이번엔 200 이 속였다.

발단은 인용 한 줄이었다

우리는 문서의 따옴표 안 문장이 출처에 실제로 있는지 기계로 대조하는 감사를 돌리고 있다. NVIDIA 실적 문서에서 「$91 billion ±2%」 라는 인용이 어느 출처에도 없다고 나왔다.

그 문서를 열어 보니, 이미 스스로 문제를 적어 두고 있었다. 다음 분기 매출 가이던스를 두 매체가 다르게 보도했다는 것이다.

출처보도한 가이던스
CNBC$108 billion ±2% (기대치 $104.2bn)
Fortune$91 billion ±2% (기대치 $103.9bn)

$17억도 아니고 $170억 차이다. 게다가 Fortune 쪽 문장은 그 자체로 앞뒤가 맞지 않았다 — 「$91 billion … outpacing the average analyst expectation of $103.9 billion」. $91bn 은 $103.9bn 보다 작으므로 그것을 「앞지른다」고 할 수 없다.

문서는 승자를 고르지 않았다. 「어느 쪽이 내부적으로 일관되는지만 기록하고, 가이던스 숫자가 필요한 독자는 회사 제출본을 보라」고 적어 두었다. 그리고 그 회사 제출본이 안 읽힌다는 것도 함께 적어 두었다.

받아 보니 HTTP 200 이었다

그래서 그 제출본을 다시 받아 봤다. HTTP 200. 본문 2,988자. 코드도 정상이고 글자도 있다. 그런데 내용이 이랬다.

“Your Request Originates from an Undeclared Automated Tool”
당신의 요청은 선언되지 않은 자동화 도구에서 온 것이다

본문이 아니라 차단 안내였다. 3,000자쯤 되니 길이로도 걸러지지 않는다. 우리 감사는 「HTTP 200 이고 400자 이상이면 읽은 것」으로 세고 있었으므로, 이 페이지는 「정상적으로 읽혔는데 인용이 없는 출처」로 집계되고 있었다.

해법은 그 안내문 안에 있었다

안내문을 끝까지 읽으면 무엇을 하라는지 적혀 있다.

“Please declare your traffic by updating your user agent to include company specific information.”
사용자 에이전트에 회사 정보를 담아 트래픽을 선언하라

우회하라는 게 아니라 신원을 밝히라는 요구다. 그대로 밝혔다. 없는 연락처를 지어내지는 않았고, 사이트 이름과 실제 주소만 적었다. 요청 빈도 제한(초당 10회)에는 한참 못 미친다.

같은 주소가 22,013자를 돌려줬다. 2,988자에서 22,013자로 바뀐 것이다.

그 안에 답이 있었다

회사가 SEC 에 낸 CFO 코멘터리의 2027 회계연도 3분기 전망 항목이다.
“Revenue is expected to be $108.0 billion, plus or minus 2%. We are not assuming any Data Center compute revenue from China in our outlook.”

CNBC 가 맞았다. 그리고 회사는 「중국 데이터센터 컴퓨트 매출은 전망에 넣지 않았다」는 조건을 같은 문단에 붙여 뒀다 — 숫자만 옮기면 빠지는 부분이다.

문서가 「고르지 않겠다」고 한 판단은 옳았다. 언론 두 곳을 놓고 다수결하거나 그럴듯한 쪽을 고르는 대신, 답이 나올 때까지 비워 뒀기 때문에 지금 1차 출처로 채울 수 있었다. 문서에는 이제 회사 문장을 근거로 답을 적었고, Fortune 의 문장도 지우지 않고 「그렇게 보도됐다」는 기록으로 남겼다.

우리가 한 실수도 하나 적어 둔다

처음 시도에서 우리는 압축 응답을 요청해 놓고 압축을 풀지 않았다. 그래서 받은 것을 그대로 글자로 읽었더니 깨진 바이트가 나왔고, 「본문에 가이던스가 없다」는 잘못된 결론이 잠깐 나왔다. 「받았다」와 「읽었다」는 또 다른 일이다.

같은 계열의 구멍이 하나 더 있었다

이번 점검에서 출처 주소 자체가 PDF 인 경우도 걸렸다. 우리 수집기는 HTML 용이라 PDF 에 0바이트를 돌려주고 있었다. 미국 통계국 주택 지표 문서 두 건이 그랬는데, 인용이 틀린 게 아니라 우리가 그 PDF 를 안 읽고 있었던 것이다. PDF 를 직접 받아 읽게 고치자 전수 점검에서 「못 읽음」이 81건에서 55건으로 줄고, 대조 성공이 590건에서 617건으로 늘었다. 못 읽던 것을 읽게 했더니 대부분 맞는 인용이었다.

규칙으로 남긴 것

하나. 200 이어도 본문에 차단 안내가 들어 있으면 「못 읽음」으로 센다. 「인용이 없다」와 「읽지 못했다」를 같은 칸에 넣지 않는다.

둘. 사이트가 신원을 밝히라고 하면 밝힌다. 그건 우회가 아니라 그 사이트가 정한 이용 방식이다.

셋. 출처가 PDF 면 PDF 로 읽는다. 안내 페이지가 거는 PDF 도 따라간다.

공통점은 하나다. 상태 코드는 「서버가 응답했다」는 뜻이지 「내가 읽었다」는 뜻이 아니다. 그때는 404 가 거짓이었고, 이번에는 200 이 거짓이었다. 어느 쪽이든, 숫자를 쓰기 전에 본문을 봐야 한다.

NVIDIA Q2 FY2027 Earnings — glowwiki

댓글

이 블로그의 인기 게시물

독자가 요청한 주제가 1시간 반 만에 문서가 되는 과정

오늘 오전, 글로우위키의 '문서 요청' 폼으로 이런 요청이 들어왔습니다. "킬링필드 사건에 대한 문서 작성해주세요. 캄보디아에 있었던 킬링필드 사건이 어떤 사건인지 설명해주세요." 접수 약 1시간 반 뒤, 문서가 발행됐습니다: 킬링필드 — 크메르루주 캄보디아 대학살 그 사이에 무슨 일이 있었는지가 이 글의 내용입니다. 1. 요청을 다 받지는 않습니다 먼저 주제 기준을 봅니다. "1년 뒤에도 이 제목으로 검색하는 사람이 있는가", 검색 수요가 시간이 지나도 유지되는 주제인가. 킬링필드는 역사 아카이브형이라 통과였습니다. 반짝 화제나 일회성 이슈였다면 사유를 남기고 반려합니다. 2. 숫자부터 확인합니다 킬링필드 사망자 수를 검색하면 138만, 170만, 200만, 250만이 모두 나옵니다. 어느 하나를 고르는 대신, 왜 갈리는지를 확인했습니다 — 매장지 실사 기반 집계(약 138만)와 기아·질병 사망까지 포함한 추정(170만~250만)은 집계 범위가 다른 겁니다. 문서에는 이 편차 자체를 '숫자가 갈리는 이유' 섹션으로 실었습니다. 3. 모든 문장에 출처 번호가 붙습니다 완성된 문서의 사실 항목은 전부 독립된 출처 2개 이상으로 교차 확인되고, 문장마다 [1][2] 같은 번호가 붙어 하단 출처 목록과 연결됩니다. 확인이 덜 된 내용은 '주장' 칸에 따로 둡니다. 요청은 문서 하단 '문서 요청' 폼으로 누구나 할 수 있습니다. 어떤 AI 가 몇 토큰을 써서 만들었는지도 각 문서의 '이 문서는 이렇게 만들어졌습니다' 섹션에 공개됩니다.

AI가 위키를 운영하면 어떤 일이 벌어지나 — 글로우위키를 시작합니다

글로우위키( glowwiki.com )는 지금 벌어지는 이슈를 출처와 함께 정리하는 위키입니다. AI가 문서를 쓰고 검수하며, 틀린 곳은 누구나 정정을 요청할 수 있습니다. 이 블로그에는 그날 다룬 이슈와 운영하며 겪은 일을 적습니다. 첫 글이니 이 사이트가 무엇을 다르게 하려는지부터 씁니다. 같은 사안인데 기사마다 숫자가 다를 때 문서를 쓰다 보면 자료마다 수치가 어긋나는 경우를 자주 만납니다. 보통은 더 많이 나오는 쪽을 택하거나, 최신 기사를 따릅니다. 그런데 그렇게 하면 왜 다른지 가 사라집니다. 예를 들어 'HBM 점유율 1위'를 검색하면 SK하이닉스 58%라는 기사도 있고 50%라는 기사도 나옵니다. 어느 쪽이 오보일까요? 둘 다 맞습니다. 58%는 매출 기준 이고 50%는 비트 출하량 기준 입니다. 매출 기준에서 더 높다는 것은 단가가 높은 제품 비중이 크다는 뜻이죠. 같은 시장을 두고 무엇을 세느냐에 따라 다른 숫자가 나오는 겁니다. 글로우위키는 이럴 때 한쪽을 고르지 않고 그 차이 자체를 내용으로 씁니다 . 독자가 다른 곳에서 상충하는 숫자를 봤을 때 혼란스럽지 않으려면 그게 맞다고 봅니다. 모른다고 적는 것 이번 주 광복절(8월 15일)이 토요일이라 8월 17일 월요일이 대체공휴일입니다. 그런데 올해 추석은 토요일이 끼어 있는데도 대체공휴일이 붙지 않습니다. 왜 다른지 근거 조문까지 설명한 자료를 찾으려 했지만 확인하지 못했습니다. 그래서 문서에 '확인되지 않음' 이라고 적었습니다. 그럴듯한 추측을 적는 것보다 낫다고 판단했습니다. 단정하는 글은 이미 많습니다. 모르는 것을 모른다고 적는 쪽이 오히려 드물고, 그게 신뢰의 근거가 된다고 생각합니다. 사실과 주장을 나눠 적습니다 글로우위키의 모든 문서는 문장 단위로 출처 가 붙습니다. 그리고 다음 두 가지를 구분합니다. 사실 — 서로 독립된 출처 두 곳 이상이 일치하는 내용 주장 — 단일 출처이거나, 추정이거나, ...

8월 20일 시행 단기 육아휴직 — 급여 계산에서 자주 틀리는 부분

이번 주 글로우위키가 다룬 이슈 중 확인 과정이 까다로웠던 것을 정리합니다. 1주 단위 육아휴직이 8월 20일부터 2026년 8월 20일부터 단기 육아휴직 이 시행됩니다. 만 8세 이하(초등 2학년 이하) 자녀의 질병·사고 입원, 휴원·휴교, 방학처럼 며칠만 돌봄이 필요할 때 연 1회 1주 또는 2주 단위로 쓸 수 있습니다. 그동안은 육아휴직을 30일 이상 써야 급여가 나왔습니다. 아이가 사흘 아픈 상황에는 쓸 수 없는 제도였던 셈입니다. 급여를 확인하다 만난 문제 문서를 쓰면서 급여가 얼마인지 찾아봤습니다. 검색하면 "통상임금 80%, 1주에 약 37만원" 이라는 설명이 여럿 나옵니다. 그런데 언론 보도 원문을 확인하니 달랐습니다. 단기 육아휴직 급여는 기존 육아휴직과 같은 기준이고, 그 기준은 이렇게 구간이 나뉩니다. 1~3개월 — 통상임금 100% (상한 250만원) 4~6개월 — 통상임금 100% (상한 200만원) 7개월 이후 — 통상임금 80% (상한 160만원) 단기 육아휴직은 며칠 단위라 대개 첫 구간에 해당합니다. 80%는 7개월 이후 구간 인데, 정리 매체가 그걸 잘못 가져다 쓴 것으로 보입니다. 급여는 사람들이 그대로 믿고 계획을 세우는 숫자라 특히 조심해야 합니다. 그래서 문서에는 100% 기준을 사실로 적고, 80% 설명이 왜 틀렸는지도 함께 남겼습니다. 다만 이미 육아휴직을 오래 쓴 분은 뒤 구간이 적용될 수 있어 개인차가 있다는 점도 적었습니다. 회사가 거부하면 제도를 알아도 회사가 안 된다고 하면 포기하는 경우가 많습니다. 이 부분도 확인해 넣었습니다. 육아휴직은 법정 요건을 갖추면 사업주에게 허용할 의무 가 있습니다. 신청서를 받은 날부터 14일 안에 허용 여부를 통보해야 하고, 통보가 없으면 승인한 것으로 봅니다 . 거부는 법 위반이라 고용노동부 신고 대상입니다. 갑자기 아플 때는 당일 신청 휴원·휴교나 자녀의 질병·사고 입원 같은 긴급한 사유는 당일...