우리 글을 우리 검증기에 넣었다 — 아티클 76편 중 8편이 막혔다
칼라톤의 데이터 칼럼에는 지켜야 할 규약이 문서로 적혀 있다. 본문은 2,500자 이상, 실측 수치 표는 최소 한 개, 글 끝에 집계 기준 각주, 그리고 '한계 — 이 분석이 말할 수 없는 것' 섹션은 필수. 머리에는 canonical 주소와 색인 허용 메타와 구조화 데이터(JSON-LD)가 들어가야 하고, 로또처럼 도박에 인접한 주제에는 광고 스니펫을 넣지 않는다.
이 규약에는 특이한 성격이 하나 있다. 사람이 읽는 문서가 아니라 프로그램이 읽는 조항이라는 것이다. 새 아티클이 올라오면 검증기 한 개가 변경된 파일 목록과 HTML을 받아 위 항목을 차례로 세고, 하나라도 어긋나면 그 자리에서 막는다. 통과하면 자동으로 합쳐지고 몇 분 뒤 사이트에 올라간다. 즉 이 사이트에는 "규약을 지켰는가"를 판정하는 기계가 이미 한 대 돌고 있다.
그런데 그 기계는 앞으로 올라올 글만 본다. 이미 발행된 칼럼 76편은 그 판정을 한 번도 받은 적이 없고, 상당수는 검증기가 생기기도 전에 쓰였다. 그래서 이번에는 방향을 거꾸로 돌렸다. 지금 돌고 있는 그 판정 기준을, 지금 올라가 있는 칼럼 76편에 그대로 적용했다. 질문은 단순하다. 우리는 우리 규약을 지키고 있는가.
모집단 — 76편, 43만 7천 자, 표 311개
집계 대상은 colortone.kr/articles/ 아래에 지금 올라가 있는 칼럼 전부다. 목록 페이지를 뺀 HTML 76장, 합계 2,010KB. 분량은 검증기와 똑같은 방식으로 셌다 — <script>·<style> 블록을 지우고 태그를 걷어낸 뒤 공백을 제외한 문자 수다. 76편의 합은 437,013자, 표는 311개(표 행 2,223줄, 칸 10,198개), 소제목은 618개다.
발행일을 줄 세우자마자 눈에 걸리는 것이 있다. 76편은 60개의 날짜에 흩어져 있는데, 7월의 20편이 단 네 날짜에 몰려 있다(7월 11·16·26·30일, 각각 정확히 5편). 그리고 7월 30일과 8월 15일 사이에 16일의 공백이 있고, 그 뒤 56편은 56개의 서로 다른 날짜에 하루 한 편씩 올라간다. 이 경계를 기준으로 두 시기를 갈라 보면 거의 모든 수치가 함께 움직인다.
| 구간 | 편수 | 발행 날짜 | 본문 평균 | 본문 중앙 | 최소 | 표/편 | 소제목/편 |
|---|---|---|---|---|---|---|---|
| 7월 묶음기 | 20편 | 4일 (편당 5편씩) | 3,288자 | 3,551자 | 1,880자 | 1.9개 | 5.6개 |
| 8월 이후 데일리 | 56편 | 56일 (하루 1편) | 6,630자 | 6,646자 | 4,303자 | 4.9개 | 9.0개 |
| 전체 | 76편 | 60일 | 5,750자 | 6,491자 | 1,880자 | 4.1개 | 8.1개 |
두 시기의 평균 분량은 두 배 차이(3,288자 대 6,630자)이고, 표는 2.6배다. 더 중요한 것은 최솟값이다. 데일리 구간 56편에서 가장 짧은 글이 4,303자인데, 묶음기의 가장 짧은 글은 1,880자다. 규약의 하한선 2,500자는 데일리 구간에서는 한 번도 쟁점이 되지 않는 숫자고, 묶음기에서는 절반쯤 지켜진 숫자다.
결과 ① — 막히는 것은 8편, 사유는 여덟 편 모두 하나
검증기의 차단 조항을 76편에 차례로 적용한 결과는 68편 통과, 8편 차단이다. 그리고 차단된 여덟 편의 사유는 전부 같다. 분량이다.
| 차단된 아티클 | 발행일 | 본문 | 하한선까지 | 표 |
|---|---|---|---|---|
| character-peak-round-shift | 7월 30일 | 1,880자 | −620자 | 1개 |
| character-theme-difficulty | 7월 30일 | 2,007자 | −493자 | 1개 |
| ai-league-transfer-market | 7월 30일 | 2,166자 | −334자 | 1개 |
| unmanned-league-operations | 7월 26일 | 2,172자 | −328자 | 1개 |
| humor-topic-selection | 7월 26일 | 2,207자 | −293자 | 2개 |
| matching-mbti-reality | 7월 26일 | 2,214자 | −286자 | 2개 |
| mindgame-bet-sizing | 7월 30일 | 2,223자 | −277자 | 1개 |
| trading-disposition-effect | 7월 30일 | 2,366자 | −134자 | 1개 |
여덟 편이 전부 7월 26일과 30일, 두 날짜에서 나왔다. 특히 7월 30일 묶음은 다섯 편 전부가 하한선 아래다(평균 2,128자). 7월 26일 묶음은 다섯 편 중 셋이 걸린다. 반면 그보다 앞선 7월 11일·16일 묶음 열 편은 한 편도 걸리지 않는다(평균 4,033자와 4,620자). 7월 안에서도 분량은 뒤로 갈수록 줄었다 — 4,033 → 4,620 → 2,369 → 2,128자. 하루에 다섯 편을 쓰는 리듬이 네 번째 묶음에서 한계에 닿은 모양에 가깝다.
오해를 막기 위해 적어 둔다. 이 여덟 편은 실제로 막혀 있는 것이 아니다. 검증기는 새로 올라오는 변경만 본다. 여기서 말하는 '차단'은 "이 글을 오늘 새 아티클로 제출했다면 합쳐지지 않았을 것"이라는 가정법이다. 규약이 글보다 나중에 생겼으니 당연한 결과이기도 하다. 흥미로운 쪽은 그 가정법이 어디에서만 참이 되는지다.
결과 ② — 기계가 세는 항목은 76편 전부 만점
분량을 뺀 나머지 차단 조항은 전부 통과였다. 한 칸도 비어 있지 않다.
| 검증 항목 | 충족 | 비고 |
|---|---|---|
| 실측 수치 표 1개 이상 | 76 / 76 | 최소 1개 · 최대 8개 · 평균 4.1개 |
| canonical 주소 일치 | 76 / 76 | 슬러그와 모두 일치 |
robots index, follow | 76 / 76 | 색인을 거절하는 글 0편 |
JSON-LD Article | 76 / 76 | datePublished도 76편 전부 보유 |
제목 형식 … | 칼라톤 | 76 / 76 | — |
| 슬러그 형식(소문자-하이픈) | 76 / 76 | 중복 0건 |
| 외부 CSS/JS 프레임워크 없음 | 76 / 76 | 인라인 스타일만 |
| 목록 페이지 카드 등록 | 76 / 76 | 카드 수와 파일 수 일치 |
sitemap.xml 등재 | 76 / 76 | 누락·고아 주소 0건 |
검증기가 보지 않는 공통 부품까지 세어 봐도 같다. 방문 분석 태그, og 제목·이미지, 설명 메타, 사업자 정보가 담긴 푸터는 76편 전부에 있고, '함께 보기' 블록도 76편 전부에 있다(링크 4~7개, 합계 401개, 편당 평균 5.3개). 구조와 등록에 관한 규약은 76편에서 예외가 0건이다.
이것은 자랑이 아니라 설명이 필요한 결과다. 머리 메타·카드·사이트맵이 100%인 이유는 이 항목들이 복제로 만들어지기 때문이다. 새 글은 기존 글의 head를 그대로 복사해 제목과 주소만 바꾸는 방식으로 쓰이고, 카드와 사이트맵 항목도 바로 위 글의 마크업을 복제한다. 복제는 틀리기 어렵다. 틀리기 쉬운 것은 복제할 수 없는 항목이다.
결과 ③ — 갈리는 것은 '권장'으로 남겨 둔 두 칸이다
검증기는 '한계' 섹션과 바이라인을 차단 사유가 아니라 경고로 다룬다. 없어도 합쳐진다. 그 두 칸이 76편에서 어떻게 갈렸는지가 이 감사의 핵심이다.
| 항목 | 7월 묶음기 (20편) | 8월 이후 (56편) | 전체 |
|---|---|---|---|
| '한계' 섹션 보유 | 1편 (5.0%) | 56편 (100%) | 57편 (75.0%) |
| '집계 기준' 각주 보유 | 1편 (5.0%) | 55편 (98.2%) | 56편 (73.7%) |
| 본문 2,500자 이상 | 12편 (60.0%) | 56편 (100%) | 68편 (89.5%) |
| 바이라인 형식 완전 일치 | 17편 (85.0%) | 56편 (100%) | 73편 (96.1%) |
| '함께 보기' 링크 평균 | 4.5개 | 5.6개 | 5.3개 |
필수 항목이 아닌 두 칸에서 두 시기가 5%와 100%로 갈린다. 7월 20편 중 '한계' 섹션과 집계 기준 각주를 가진 글은 단 한 편(AI 심판은 팔이 안으로 굽는가)뿐이고, 8월 15일 이후 56편은 예외 없이 둘 다 달고 있다. 유일한 어긋남은 8월 18일 글 한 편으로, 각주 상자는 있지만 제목이 '집계 기준'이 아니라 '알려드립니다'다 — 형식의 불일치이지 각주의 부재는 아니다.
'한계' 섹션의 제목 문구도 세어 봤다. 57편의 소제목은 네 가지뿐이고, 모두 같은 틀이다 — "이 분석이 말할 수 없는 것" 48편, "이 집계가" 6편, "이 감사가" 2편, "이 검증이" 1편. 규약에 적힌 문구를 그대로 쓴 편이 48편(84.2%)이고, 나머지 9편은 글의 성격에 맞춰 한 단어만 바꿨다.
경고 항목이 5%에서 100%로 뛴 경계는 분량 하한선이 지켜진 경계와 정확히 같은 날짜다. 한 가지 규약만 늦게 지켜진 것이 아니라, 규약 전체가 같은 시점부터 지켜졌다는 뜻이다. 문서가 글을 고친 것이 아니라, 글 쓰는 방식이 바뀌면서 문서가 따라 적힌 흔적에 가깝다.
결과 ④ — 묶음과 데일리, 리듬이 남긴 지문
두 시기의 차이는 분량과 규약 준수만이 아니다. 발행 요일 분포가 거의 결정적이다. 7월 묶음기 20편은 목요일 10편·토요일 5편·일요일 5편으로 사흘에 몰려 있고, 8월 이후 56편은 월·화·수·목·금에 정확히 11편씩 나뉘며 주말은 단 한 편(구간의 첫 글인 8월 15일 토요일)이다. 평일 하루 한 편이라는 리듬이 55편에서 한 칸도 어긋나지 않았다.
주제의 분포도 함께 움직인다. 슬러그 앞머리로 가르면 76편은 인물 생성 25편 · 유머 24편 · 리포트 메타 9편 · 커플매칭 6편 · 홀짝 3편 · 트레이딩 3편 · 로또 2편에 나머지 4편이다. 리포트 자체를 대상으로 삼는 '리포트 메타' 계열 9편은 전부 9월 이후에 나왔다 — 외부의 시즌 기록이 아니라 우리가 만든 지면 자체를 자료로 쓰는 글이 뒤늦게 생긴 갈래라는 뜻이고, 오늘 이 글도 그 갈래에 속한다.
결과 ⑤ — 베끼라고 지정된 세 편 중 둘은 지금 기준에 미달이다
규약 문서에는 형식을 익히라고 이름을 박아 둔 참조 아티클이 세 편 있다. 그 세 편을 오늘의 판정에 넣으면 결과가 묘해진다.
| 참조로 지정된 아티클 | 본문 | 표 | '한계' | 집계 기준 | 오늘 판정 |
|---|---|---|---|---|---|
| humor-judge-bias | 5,444자 | 4개 | 있음 | 있음 | 통과 |
| lotto-hot-numbers-myth | 3,720자 | 2개 | 없음 | 없음 | 통과(경고 2건) |
| trading-disposition-effect | 2,366자 | 1개 | 없음 | 없음 | 차단 |
세 편 중 규약의 모든 항목을 채우는 것은 한 편뿐이다. 한 편은 분량만 통과하고 권장 두 칸이 비어 있으며, 한 편은 분량 하한선에 134자 미달로 차단된다. 형식을 배우라고 지정된 교본이 정작 그 형식의 체크리스트를 통과하지 못하는 구도다.
세 편이 지정된 이유를 데이터로 짐작할 수는 있다. 이들은 서로 다른 것을 보여 준다. 첫 편은 '한계'와 각주를 포함한 완전한 골격을, 두 번째는 광고를 넣지 않는 글의 머리 모양을, 세 번째는 짧고 단단한 단일 표 칼럼의 구성을 보여 준다. 다만 그 역할 분담이 문서에 적혀 있지 않아서, 읽는 쪽에서는 세 편 모두가 모범이라고 받아들이게 된다.
결과 ⑥ — 광고 금지는 두 편 다 지켰고, canonical은 두 가지로 쓴다
가장 민감한 규약부터. 도박·성인 인접 주제에 광고 스니펫을 넣지 않는다는 조항은 예외 없이 지켜졌다. 76편 중 광고 로더가 없는 글은 정확히 두 편이고, 그 두 편은 금지 대상으로 걸러지는 로또 주제 두 편과 완전히 같은 집합이다. 두 편은 스니펫 자리에 같은 주석 한 줄을 남겨 두었다 — "로또(도박 관련 제한 카테고리) 주제 글이므로 광고를 로드하지 않음". 빠뜨린 것이 아니라 비워 둔 것임을 글 자체가 말하고 있다.
반대로, 판정에는 걸리지 않지만 두 가지로 갈린 칸이 하나 있다. canonical 주소의 .html 확장자다. 59편은 …/articles/슬러그.html로, 17편은 확장자 없이 …/articles/슬러그로 적는다. 검증기가 둘 다 허용하도록 쓰여 있어 어느 쪽도 사고가 아니지만, 같은 글의 정규 주소를 두 가지 모양으로 선언하는 코퍼스라는 사실은 남는다. 시기와도 깔끔하게 대응하지 않는다 — 7월 20편은 20편 모두 확장자가 있고, 8월 이후 56편에서는 39편이 있고 17편이 없다. 중간에 바뀌었다가 되돌아온 모양이다.
한계 — 이 분석이 말할 수 없는 것
첫째, 이 글이 센 것은 형식뿐이다. 2,500자를 넘겼는지, 표가 있는지, '한계'라는 제목의 섹션이 있는지는 기계가 셀 수 있다. 그 표의 숫자가 맞는지, '한계' 섹션이 실제로 그 글의 약점을 짚었는지는 세지 못한다. 어떤 글이 긴 본문과 다섯 개의 표와 성실한 각주를 갖추고도 틀린 수치를 담을 수 있고, 2,366자짜리 글이 정확할 수 있다. 여기서 '통과'는 품질 판정이 아니라 체크리스트 판정이다.
둘째, 두 시기의 비교는 통제된 대조가 아니다. 7월의 20편과 8월 이후의 56편은 쓰는 방식만 다른 것이 아니라 주제도, 자료의 종류도, 분량의 목표도 다르다. 묶음기의 짧은 글들은 더 넓은 주제를 짧게 소개하는 성격이 강하고 데일리 구간의 글은 좁은 질문을 끝까지 파는 형태다. 따라서 "데일리가 규약을 더 잘 지킨다"는 문장은 인과가 아니라 동시 발생의 기술이다.
셋째, 발행일은 각 글의 JSON-LD datePublished를 그대로 썼다. 76편 모두 본문 바이라인의 날짜와 일치하는 것은 확인했지만, 두 날짜가 같은 곳에서 나왔을 가능성이 있어 실제 작성·수정 시점의 독립적인 증거는 아니다. 발행 뒤 고쳐진 글이 있다면 그 수정은 이 집계에 날짜 없이 섞여 있다.
넷째, 분량 측정은 검증기의 셈법을 그대로 따랐기 때문에 표 안의 글자와 집계 기준 각주까지 본문에 포함된다. 표를 많이 싣는 글은 서술이 같아도 글자 수가 커진다. 실제로 데일리 구간은 표가 편당 4.9개로 묶음기의 2.6배이므로, 두 시기의 분량 차이 중 일부는 서술량이 아니라 표의 양이다. 다만 묶음기에서 차단된 여덟 편은 표를 하나나 둘만 싣고도 하한선에 미달했으므로 결론의 방향은 바뀌지 않는다.
다섯째, 이 글은 발행된 것만 센다. 자료를 구하지 못해 쓰이지 않은 주제, 중간에 폐기된 초안, 규약에 걸려 합쳐지지 않은 제출은 디스크에 없으므로 집계에 없다. 분모가 '쓰려고 한 글'이 아니라 '올라간 글'이라는 점을 감안해 읽어야 한다.
그래서, 무엇을 고칠 것인가
감사 결과를 세 줄로 요약하면 이렇다. 기계가 막는 항목은 76편 전부 지켜졌고, 기계가 경고만 하는 항목은 한 시점 이전까지 거의 지켜지지 않았으며, 그 시점 이후로는 전부 지켜졌다. 규약이 작동한 방식이 꽤 분명하게 보인다 — 조항을 문서에 적는 것만으로는 5%였고, 복제할 수 있는 형태로 만들고 하루 한 편의 리듬에 얹은 뒤로 100%가 됐다.
그래서 우리가 할 일은 조항을 늘리는 쪽이 아니다. 우선 참조 아티클 지정을 손봐야 한다. 교본 세 편 중 둘이 지금 기준에 미달인 상태를 그대로 두면, 형식을 익히라는 지시와 형식을 검사하는 기계가 서로 다른 말을 하게 된다. 세 편을 유지하려면 각 편이 무엇의 예시인지(완전한 골격 / 광고 없는 머리 / 단일 표 구성)를 문서에 적어 두는 편이 정확하다.
둘째로 canonical의 두 가지 표기는 한쪽으로 모을 값이다. 59대 17의 분포는 어느 쪽이 '원래 방식'인지조차 말해 주지 못한다. 셋째로, '한계' 섹션과 집계 기준 각주는 경고에서 차단으로 올려도 지금 아무것도 막지 않는다 — 데일리 구간 56편이 이미 100%와 98.2%이기 때문이다. 규약을 강제로 올리는 가장 좋은 때는 아무도 걸리지 않을 때다.
7월의 짧은 글 여덟 편은 고치지 않을 생각이다. 발행된 글을 소급해 늘리는 것은 글을 좋게 만드는 일이 아니고, 무엇보다 그 여덟 편은 규약이 왜 생겼는지를 보여 주는 기록이다. 하루에 다섯 편을 쓰면 네 번째 묶음에서 2,128자가 된다는 사실은, 하한선 2,500자라는 숫자보다 더 많은 것을 말해 준다.
집계 기준. Frontend/public/articles/ 아래 공개 데이터 칼럼 76편(이 글과 목록 페이지 index.html을 제외한 수, 합계 2,010KB)의 HTML을 기계 파싱해 2026년 11월 2일 KST에 집계했다. 본문 자수는 이 저장소의 아티클 검증 스크립트와 동일한 방식(<script>·<style> 제거 → 태그 제거 → HTML 엔티티를 공백으로 치환 → 공백 제외 문자 수)으로 셌으므로 표 안의 글자와 각주가 포함된다. '오늘 판정'은 같은 스크립트의 차단 조항(분량 2,500자 · 표 1개 이상 · canonical 일치 · robots index, follow · JSON-LD Article · 제목 형식 · 슬러그 형식 · 광고 금지 슬러그의 스니펫 부재 · 외부 프레임워크 부재 · 목록·사이트맵 등재)을 각 편에 적용한 결과이며, 발행 당시가 아니라 현재 기준의 가정법이다. 발행일은 각 편 JSON-LD의 datePublished(76편 전부 보유, 본문 바이라인 날짜와 76편 모두 일치)를 썼고 범위는 2026-07-11 ~ 2026-10-30이다. '7월 묶음기'(20편)와 '8월 이후 데일리'(56편)의 경계는 관측된 16일 공백(7월 30일 → 8월 15일)이며 문서 개정 시점이 아니다. 파싱 실패 0건.