같은 주소에 HEAD 로 물으면 404, GET 으로 물으면 200 을 주는 서버가 많다.
이걸 모르면 살아 있는 링크를 「사라졌다」고 세게 된다.
출처 링크가 죽는 건 흔한 일이다. 그런데 얼마나 죽었는지 세는 일이 생각보다 까다롭다. 우리가 문서 530건의 출처를 전수 점검하면서 실제로 겪은 것을 적는다. 결론부터 말하면, 우리 첫 측정이 틀렸다.
왜 굳이 세어 봤나
한 문서의 출처 하나가 404 인 것을 우연히 발견했다. 한 건만일 리 없다고 보고 전수 점검을 했다. 대상은 서로 다른 주소 2,395개였다.
점검 방식은 흔한 방법을 썼다. HEAD 요청이다. HEAD 는 본문을 받지 않고 응답 코드만 확인하므로, 수천 개를 훑을 때 서버에도 우리에게도 부담이 적다. 링크 검사 도구가 대개 이렇게 한다.
그럴듯한 결과가 나왔다
1차 결과는 404 가 164건이었다. 그리고 한국어 문서에 유난히 몰려 있었다 — 404 가 있는 문서 117건 중 92건. 해석이 바로 떠올랐다. 「국내 언론사가 기사를 잘 내리는구나.」
이 해석은 편했고, 그래서 위험했다. 이미 알고 있다고 느끼는 설명이 데이터와 맞아떨어질 때가 가장 조심할 때다.
한 건을 실제로 열어 봤더니
「출처 세 건이 전부 죽은 문서」가 딱 하나 나왔다. 어떻게 고칠지 보려고 그 출처들을 다시 받았다. 세 건 모두 HTTP 200 이었고, 본문이 7,427자·8,714자로 멀쩡했다.
표본 아홉 건을 HEAD 와 GET 양쪽으로 찍어 봤다. 아홉 건 전부 HEAD=404, GET=200 이었다.
원인은 우리 코드였다. HEAD 가 405(허용되지 않는 메서드)나 501 을 줄 때만 GET 으로 다시 묻게 해 두었는데, HEAD 에 404 를 돌려주는 서버는 그 예외에 걸리지 않는다. 여러 기사형 CMS 가 그렇게 동작한다. 그리고 그 CMS 를 쓰는 곳이 국내에 많았다 — 「한국어 편중」은 링크 로트가 아니라 서버 구현의 분포였다.
고쳐서 다시 센 숫자
규칙을 「HEAD 응답이 2xx 가 아니면 반드시 GET 으로 다시 본다」로 바꿨다.
| 항목 | 1차(HEAD 만) | 정정 |
|---|---|---|
| 정상(200) | 2,019 | 2,231 / 2,395 |
| 404(사망) | 164 | 21 |
| 403(차단) | 113 | 67 |
| 한국어 비중 | 92/117 | 4/22 |
「모든 출처가 죽은 문서」는 1건에서 0건이 됐다. 편중도 사라졌다.
403 은 사망이 아니다
남은 67건의 403 은 차단이다. 기사가 사라진 게 아니라 우리 쪽에서 안 열리는 것이다. 「오늘 200 이 하나도 없는 문서」 3건은 전부 403 이고 404 는 0건이었다. 이 둘을 같은 칸에 넣으면 독자에게 거짓말이 된다.
그리고 링크가 아니라 문서가 낡은 경우
실제로 죽은 21건을 들여다보다 두 가지를 더 알게 됐다.
하나. 사라진 게 정상인 주소가 있다. NASA 우주망원경 문서의 죽은 링크는 「발사 카운트다운」 페이지였다. 카운트다운이 끝나면 그 페이지는 없어진다. 링크 로트가 아니다. 그런데 확인해 보니 그 문서 제목이 아직 「발사 준비 중」이었다 — 발사 한 달 뒤였다. 죽은 링크가 알려준 건 링크 문제가 아니라 문서가 주제를 못 따라갔다는 사실이었다.
둘. 교체하려다 내용 오류를 찾기도 한다. 일본은행 관련 죽은 링크를 대체하려고 원문 공표문(2013년 1월 22일)을 찾아 읽었다. 우리 문서는 2% 목표가 「총합지수를 기준으로」 정의된다고 썼는데, 공표문에도 일본은행 해설 페이지에도 「총합」이라는 말이 없었다. 기계적으로 세어 둘 다 0회였다. 흔히 그렇게 말하지만 성명 자체는 계열을 명시하지 않는다. 문구를 원문 표현으로 고치고 정정 기록을 남겼다.
남겨 둔 것
죽은 출처를 지우지는 않았다. 주소가 사라진 것과 인용이 틀린 것은 다른 일이다. 인용은 그 출처가 읽히던 때 대조해 둔 것이므로, 문장은 그대로 두고 출처 목록에 「링크 소멸」 표시와 확인 날짜를 붙였다. 표시 문구도 「인용이 틀렸다」가 아니라 「지금은 확인할 수 없다」로 썼다.
대체를 못 찾은 것도 있다. 발행처 색인까지 404 인 경우가 있었고, 색인은 열리지만 해당 기사를 못 찾은 경우도 있었다. 어디까지 찾아봤는지를 문서에 적어 두었다.
링크를 점검할 사람에게
세 가지만 남긴다.
첫째, HEAD 결과만 믿지 말 것. 2xx 가 아니면 GET 으로 한 번 더 물어야 한다. 우리는 이 한 줄 때문에 143건을 잘못 셌다.
둘째, 404·403·연결실패를 한 칸에 넣지 말 것. 사라진 것, 막힌 것, 못 닿은 것은 다른 상태다.
셋째, 그럴듯한 설명이 먼저 떠오르면 한 건을 직접 열어 볼 것. 우리를 구한 건 통계가 아니라 「그 문서 하나를 실제로 어떻게 고칠까」 하고 파일을 열어 본 일이었다.
「링크 소멸」 표시가 붙은 문서의 예 — glowwiki
관련: Roman 우주망원경 — 죽은 카운트다운 링크가 알려준 것
더 보기: Glowwiki
댓글
댓글 쓰기