안전장치 세 개가 같은 방식으로 뒤집혔다. 셋 다 에러를 내지 않았다
한 매체가 너무 많이 실리지 않게, 같은 사건이 두 번 실리지 않게, 뉴스가 아닌 글이 섞이지 않게. 규칙 셋이 지난 한 달 동안 차례로 반대가 됐습니다. 고장이 아니라 적힌 대로 동작한 결과였고, 그 순간 아무 소리도 나지 않았습니다.
이 글은 뉴스 요약이 아니라 이 사이트를 만들면서 있었던 일에 대한 기록입니다.
이 사이트는 매일 아침 8시에 사람 없이 돕니다. 피드 열두 곳에서 하루치 기사를 모아 점수를 매기고 열 건을 골라 한국어와 영어로 씁니다. 그 사이에 규칙 몇 개가 걸려 있습니다. 한 매체가 너무 많이 실리지 않게, 같은 사건이 두 번 실리지 않게, 뉴스가 아닌 글이 섞이지 않게 막는 규칙입니다.
지난 한 달 동안 그 셋이 차례로 반대가 되는 것을 봤습니다. 셋 다 고장 난 게 아니라 적힌 대로 동작했고, 셋 다 그 순간에 아무 소리도 내지 않았습니다.
첫째, 한 곳이 너무 많이 실리지 않게
한 매체는 하루에 세 건까지만 실립니다. 독자가 한 언론사의 1면이 아니라 여러 곳을 가로지른 단면을 받게 하려는 규칙입니다.
그런데 이 규칙에는 뒷문이 있습니다. 점수 순으로 훑어서 열 자리를 못 채우면 상한을 없애고 같은 목록을 한 번 더 훑습니다. 열 건을 약속해놓고 아홉 건을 싣는 것은 눈에 보이는 실패라서, 자리를 비워두느니 상한을 접기로 한 겁니다.
7월 31일에 그 뒷문이 열렸습니다. 그날 아침 피드 다섯 개가 403을 돌려줬습니다. 뉴스가 적어서가 아니었습니다. 자동 실행이 바깥으로 나갈 때 거치는 허용 목록에 주소가 조금 어긋나 있었어요. 목록에는 wired.com이 적혀 있었는데 실제 피드 주소는 www.wired.com이었습니다. 호스트 이름은 한 글자만 달라도 통과하지 못합니다.
그날 아홉 건 중 여덟 건이 테크크런치에서 나왔습니다. 28일을 세어보니 이런 날이 네 번 있었고, 네 번 모두 매체가 두세 곳뿐이었습니다.
문제는 이게 아무렇게도 안 보인다는 겁니다. 그날 편은 열 건이거나 아홉 건이고, 화면은 똑같이 그려지고, 상한이 접혔다는 기록은 어디에도 남지 않습니다.
둘째, 같은 사건이 두 번 실리지 않게
고른 열 건 가운데 같은 사건을 다룬 것이 있으면 짝지어 알려줍니다. 자동으로 지우지는 않습니다. 예전에 자동으로 묶었다가 서로 상관없는 구글 기사 다섯 건이 하나로 묶여 네 건이 조용히 버려진 적이 있어서, 그 뒤로는 알려만 주고 판단은 원문을 읽는 사람이 합니다.
8월 20일에 그 경고가 열두 줄 나왔습니다. 그날 열 건 중 구글이 넷, 오픈AI가 넷이었기 때문입니다. 같은 회사 기사가 넷이면 짝은 여섯 개가 됩니다. 기사가 하나 늘 때마다 짝은 그보다 빠르게 늘어납니다.
열두 줄 중 열 줄은 아무 상관이 없었습니다. 파산한 항공사의 직원 데이터를 구글이 샀다는 기사와 구글이 학생용 학습 도구를 냈다는 기사가 "같은 사건일 수 있다"고 나란히 붙어 있었어요.
이 경고는 원문을 읽는 사람이 확인하라고 만든 것입니다. 그런데 열두 줄이면 아무도 안 봅니다. 막으려던 것을 못 막게 된 게 아니라, 너무 많이 말해서 아무 말도 안 하게 된 겁니다.
셋째, 뉴스가 아닌 글이 섞이지 않게
어떤 피드는 뉴스만 주지 않습니다. 오픈AI 공식 피드에는 회사 소식과 고객 사례가 기사와 같이 옵니다. 그래서 항목에 붙은 분류를 보고 뉴스가 아닌 것을 걸러냅니다. 분류가 아예 없는 항목도 걸러냅니다. 세어보니 분류 없는 글은 전부 고객 사례였거든요.
이 규칙에도 뒷문이 있는데 방향이 반대입니다. 앞의 둘이 지킬 수 없으면 풀어버리는 쪽이었다면, 이건 조여버리는 쪽입니다. 피드가 어느 날 분류를 안 붙이기 시작하면 그 피드의 그날 항목이 하나도 남김없이 걸러집니다. 잘못된 글이 새는 게 아니라 멀쩡한 글이 통째로 사라지는 쪽으로 틀립니다.
셋의 공통점
셋 다 평소에는 제 일을 합니다. 셋 다 한계에 닿으면 반대로 움직입니다. 그리고 셋 다 그 순간에 아무 소리도 내지 않습니다.
마지막이 제일 나쁩니다. 고장은 알아챌 수 있습니다. 로그에 빨간 줄이 남고 페이지가 안 뜨니까요. 이건 그렇지 않습니다. 실행은 종료 코드 0으로 끝나고, 사이트는 평소처럼 만들어지고, 메일도 제시간에 나갑니다. 규칙이 접혔다는 사실만 아무 데도 안 적힙니다.
둘은 고쳤고 하나는 안 고쳤다
고친 두 개는 규칙 자체를 바꾸지 않았습니다. 침묵만 없앴습니다.
같은 사건 경고는 진짜일 확률이 높은 순으로 세워 위에서 세 줄만 보여주고, 몇 줄을 잘랐는지 함께 적습니다. 조용히 자르면 "오늘은 세 줄뿐이었다"로 읽히니까요. 분류 필터는 어떤 피드의 항목이 100퍼센트 걸러지면 경고를 냅니다. 그 숫자는 오늘 하루 그 피드가 전부 홍보 글이었다는 뜻보다, 피드가 분류를 안 주기 시작했다는 뜻일 확률이 훨씬 높습니다.
상한은 아직 그대로입니다. 여기서 막힌 것은 코드가 아니라 판단입니다. 정말로 뉴스가 적은 날에 무엇이 옳은지 모르겠습니다. 다섯 곳에서 여덟 건을 싣는 쪽이 두 곳에서 열 건을 싣는 쪽보다 나을 수 있고, 그건 버그가 아니라 이 사이트가 무엇을 약속하느냐의 문제입니다. 매일 열 건인지, 여러 곳을 가로지른 열 건인지요.
다만 이제는 어느 쪽인지 셀 수 있습니다. 8월 20일부터 응답하지 않은 피드의 이름이 매일 기록에 남기 시작했습니다. 세상이 조용해서 모자란 날과 우리 설정이 틀려서 모자란 날을 갈라볼 수 있게 됐어요. 몇 주 쌓아놓고 그걸 보고 정하려 합니다.
앞의 두 기록과 같은 순서를 지킵니다. 고치기 전에 먼저 씁니다. 그래야 위의 숫자를 나중에 그대로 재현할 수 있습니다. 무엇이 달라졌는지는 이 페이지에 덧붙입니다.