같은 이름의 ‘하이라이트’, 상한은 3칸과 12칸 — 다섯 모듈 641칸 전수

칼라톤의 시즌이 끝나면 공개 리포트가 한 편 생긴다. 다섯 모듈 — AI 인물 생성, AI 유머, AI 커플매칭, AI 마인드게임, AI 트레이딩 — 이 같은 서식을 쓰고, 그 끝에는 어느 모듈이든 ‘좋았던 장면’을 추려 보여 주는 블록이 하나 있다. 인물 리포트에서는 「하이라이트」, 유머에서는 「베스트 코멘트 하이라이트」, 매칭에서는 「매치메이커 코멘트 하이라이트」, 마인드게임에서는 「결정적 순간 — 딜러의 한 수」, 트레이딩에서는 「주목할 거래 — AI의 매매 판단」이다.

이름은 다르지만 생김새는 하나다. 다섯 모듈 모두 같은 카드 부품(ct-hi)을 쓰고, 카드 안에 머리줄 하나와 인용 하나를 넣는다. 리포트의 뼈대가 모듈 사이에서 얼마나 공유되는지는 섹션 구성 전수 집계에서 이미 확인한 바 있다 — 공유되는 것은 목차가 아니라 부품이었다.

그래서 이번에는 그 부품이 몇 개까지 놓이는가를 물었다. 같은 모양의 칸인데 몇 칸까지 보여 줄지는 모듈마다 따로 정해져 있고, 우리는 그 숫자를 한자리에 모아 본 적이 없다. 공개 리포트 국문 182편을 전부 파싱해 칸을 세었다. 모두 641칸이었다.

질문 — 상한은 왜 다르고, 그 차이는 무엇을 바꾸는가

검증 가능한 형태로 다듬으면 질문은 셋이다. 첫째, 모듈별 상한은 몇 칸인가. 둘째, 실제로 그 상한까지 채워지는가. 셋째, 상한이 자른 쪽은 얼마나 큰가 — 즉 독자가 보는 칸은 후보 전체의 몇 퍼센트인가.

집계 방법은 단순하다. 리포트 HTML에서 하이라이트 섹션을 잘라 내고 그 안의 카드 수를 센다. 같은 페이지에 실린 라운드 표·리더보드·헤더 통계로 후보 집단의 크기를 재고, 상한 숫자 자체는 리포트 생성기 소스에서 확인했다. 칸 수는 국문·영문판을 182쌍 맞대어 검산했다 — 불일치 0건이었다.

상한 — 3·10·12·12·10

먼저 전체 그림이다.

모듈상한선정 기준리포트상한 도달칸 합평균 칸
AI 인물 생성3채택 라운드 일치율 상위15271 (46.7%)3442.26
AI 유머10라운드 우승 코멘트 점수 상위2119 (90.5%)1939.19
AI 커플매칭12매치메이커 코멘트 점수 상위66 (100%)7212.00
AI 마인드게임12팟 큰 턴(딜러 코멘트 보유)11 (100%)1212.00
AI 트레이딩10거래 금액 큰 매매22 (100%)2010.00
합계——18299 (54.4%)6413.52

상한은 네 가지 값(3·10·12·12·10)이고, 가장 좁은 칸과 가장 넓은 칸의 차이는 4배다. 선정 기준도 다섯 가지가 전부 다르다 — 일치율, 심사 점수, 코멘트 점수, 판돈, 거래 금액. 공통점은 ‘그 모듈에서 가장 큰 수를 내림차순으로 자른다’는 형태뿐이다.

정렬 방향은 페이지에서 그대로 확인된다. 유머 리포트 21편의 하이라이트 점수는 193칸 전부 내림차순이었고(단조 증가한 곳 0편), 인물 344칸의 일치율도 152편 전부 내림차순이었다. 트레이딩 20칸의 금액과 마인드게임 12칸의 팟도 같다. 매칭만 점수를 화면에 적지 않아 정렬을 페이지에서는 확인할 수 없고, 생성기 소스에서 코멘트 점수 내림차순임을 읽었다.

상한이 실제로 자른 리포트는 몇 편인가

‘칸이 꽉 찼다’와 ‘상한이 무언가를 잘랐다’는 다른 말이다. 후보가 상한과 정확히 같으면 칸은 꽉 차지만 잘린 것은 없다. 두 숫자를 갈라 세면 이렇다.

모듈상한 미달후보 = 상한상한이 자름
AI 인물 생성 (152편)81편 (53.3%)32편 (21.1%)39편 (25.7%)
AI 유머 (21편)2편 (9.5%)0편19편 (90.5%)
AI 마인드게임 (1편)0편0편1편 (100%)
AI 트레이딩 (2편)0편0편2편 (100%)

인물 생성에서 상한 3은 사실상 상한으로 작동하지 않는다. 152편의 후보 수(채택 라운드 수) 중앙값은 2이고, 상한이 실제로 무언가를 자른 리포트는 넷 중 한 편(39편)뿐이다. 절반이 넘는 81편에서는 ‘상위 3개’가 아니라 ‘있는 것 전부’가 실린다. 칸이 하나뿐인 리포트가 31편, 둘인 리포트가 50편이다.

유머는 반대다. 21편의 라운드 수 중앙값은 44이고, 상한 10은 19편에서 실제로 칼질을 한다. 칸이 10개가 안 되는 두 편(라운드 1개·2개)은 이제 막 시작한 시즌의 리포트다.

표에 매칭이 없는 것은 숨긴 것이 아니라 셀 수 없기 때문이다. 매칭 리포트는 매치메이커 코멘트의 총 개수를 어디에도 적지 않는다. 다만 간접 증거는 분명하다. 여섯 편 모두 10라운드짜리 시즌인데, 72칸이 나온 라운드는 R6~R9뿐이다(시즌 7은 R8·R9 두 라운드에서 12칸 전부). 앞 라운드의 코멘트는 한 칸도 올라오지 못했다. 이 쏠림을 커플·페르소나 단위까지 쪼갠 집계는 매칭 하이라이트 72건 해부에 따로 적어 두었다.

후보 대비 노출률 — 75.9%와 1.9%

같은 페이지 안에서 후보 집단의 크기를 셀 수 있는 모듈은 네 개다. 인물은 라운드 표에서 ‘미채택’ 배지가 없는 행이 후보이고, 유머는 「전체 라운드 우승 코멘트」 표의 행, 트레이딩은 리더보드 ‘거래’ 열의 합, 마인드게임은 헤더의 ‘턴’이다.

모듈후보 집단(리포트에서 집계 가능한 것)후보칸노출률
AI 인물 생성채택 라운드(라운드 표 2,280행 − 미채택 1,827행)45334475.9%
AI 유머라운드 우승 코멘트1,00619319.2%
AI 마인드게임턴(딜러 코멘트 보유 턴은 그 부분집합)524122.3% 이하
AI 트레이딩매매(리더보드 ‘거래’ 열 합, 관망 제외)1,056201.9%
AI 커플매칭— 리포트에 후보 집계가 없다—72—

여기서 폭이 가장 크게 벌어진다. 인물 리포트의 하이라이트는 채택 라운드의 4분의 3을 보여 주는 블록이고, 트레이딩의 하이라이트는 매매의 50분의 1을 보여 주는 블록이다. 둘은 같은 이름으로 불릴 만한 장치가 아니다. 앞의 것은 거의 ‘목록’이고, 뒤의 것은 엄격한 ‘발췌’다.

그리고 182편 전부에서 칸 수는 같은 식 하나로 설명된다 — 칸 수 = min(후보 수, 상한). 인물 152편은 예외 없이 min(채택 라운드, 3)이었고, 유머 21편은 예외 없이 min(라운드, 10)이었다. 칸이 적은 리포트는 좋은 장면이 적었던 시즌이 아니라 후보가 상한보다 적었던 시즌이다. 인물 쪽에서 칸 수와 칸 사이 점수 간격을 동시에 정하는 변수가 ‘채택 라운드 수’ 하나였다는 결과는 하이라이트 간격 전수 집계에서 먼저 확인된 것이고, 이번 집계는 그 규칙이 모듈을 넘어서도 유지된다는 것을 보여 준다.

상한은 분량을 맞추지 않는다

상한이 다른 데는 그럴듯한 이유를 붙일 수 있다. 블록이 차지하는 지면을 비슷하게 맞추려면, 인용이 긴 모듈은 칸을 적게 주고 짧은 모듈은 많이 주는 것이 맞다. 실제로는 반대였다.

모듈상한인용 길이 중앙값블록 전체 분량 중앙값
AI 인물 생성3116자296자
AI 유머1041자1,531자
AI 마인드게임12192자2,708자
AI 트레이딩10294자3,246자
AI 커플매칭12237자3,381자

가장 짧은 인용(유머 41자)에 많은 칸이 가고 가장 긴 인용(트레이딩 294자)에 적은 칸이 간 것은 맞지만, 그 보정은 전혀 충분하지 않다. 결과적으로 블록 분량은 인물 296자와 매칭 3,381자로 11.4배 벌어진다. 같은 자리, 같은 이름, 같은 카드인데 한쪽은 세 문장이고 다른 쪽은 긴 글 한 편이다.

지면을 맞추는 것이 목표였다면 산수는 이렇게 됐을 것이다. 매칭 블록의 3,381자에 인물 인용(116자)을 맞추려면 인물은 29칸이 필요하고, 반대로 인물 블록의 296자에 매칭 인용(237자)을 맞추면 매칭은 1칸이다. 상한이 분량을 보정하려고 정해진 숫자가 아니라는 뜻이다. 이것은 가정이 아니라 위 두 표의 나눗셈이다.

숫자가 적힌 자리도 둘로 갈린다

상한이 모듈마다 다른 것 자체보다 운영에서 더 성가신 사실이 하나 있다. 그 숫자가 적힌 코드 계층이 모듈마다 다르다.

모듈상한숫자가 적힌 계층
AI 인물 생성3데이터 수집 계층
AI 트레이딩10데이터 수집 계층
AI 유머10웹 요약 빌더(호출부가 값을 넘기지 않아 기본값 10이 적용)
AI 커플매칭12웹 요약 빌더
AI 마인드게임12웹 요약 빌더

수집 계층에 적힌 상한은 그 데이터를 쓰는 모든 산출물에 같이 걸린다. 빌더에 적힌 상한은 그 빌더가 만드는 화면에만 걸린다. 그래서 매칭·마인드게임의 하이라이트 블록은 웹 요약에만 존재한다 — 두 모듈의 PDF 리포트 빌더에는 이 섹션이 아예 없다. 유머는 숫자 10이 수집·웹 두 자리에 각각 따로 적혀 있는 형태다. 같은 값이라서 지금은 문제가 없지만, 한 자리만 고치면 둘이 갈라진다.

이것은 설계라기보다 다섯 모듈이 서로 다른 시기에 각자 자라난 흔적이다. 우리 코드베이스에는 ‘같아야 하는 값이 두 곳에 적혀 있다’는 종류의 빚이 몇 군데 더 있고, 하이라이트 상한도 그중 하나로 적어 둔다.

한계 — 이 분석이 말할 수 없는 것

첫째, 모듈별 표본이 극단적으로 불균형하다. 인물 152편 대 마인드게임 1편이다. 마인드게임과 트레이딩의 ‘상한 도달 100%’는 비율이 아니라 사례 1~2건이고, 이 글에서 그 둘은 집계가 아니라 예시로 읽어야 한다. 매칭 6편, 유머 21편도 모듈 간 비교를 하기에 넉넉한 크기는 아니다.

둘째, 후보 집단의 크기를 리포트에서 잰 것이라 모듈별 정의가 완전히 같지 않다. 트레이딩의 1,056건은 리더보드 ‘거래’ 열의 합이고 하이라이트의 실제 후보는 ‘사유 텍스트가 있는 매매’이므로 그보다 작다. 마인드게임의 524턴 중 딜러 코멘트가 달린 턴만이 후보다. 두 노출률(1.9%·2.3%)은 그래서 ‘이하’로 읽는 값이고, 실제 비율은 이보다 높다. 인물과 유머는 후보 정의가 페이지에서 정확히 재현되므로 75.9%·19.2%는 그대로 읽어도 된다.

셋째, 이 글은 공개된 웹 요약만 본다. 같은 시즌의 PDF 리포트는 라운드 전체 기록을 따로 싣고, 유머 웹 요약에도 하이라이트 아래에 「전체 라운드 우승 코멘트」 표가 함께 있다. 그러니 노출률 19.2%는 ‘하이라이트 블록이 보여 주는 비율’이지 ‘리포트가 공개하는 비율’이 아니다. 하이라이트에서 잘린 것이 어디서도 안 보이는 모듈과, 바로 아래 표에 전부 있는 모듈이 섞여 있다.

넷째, 상한의 ‘적정값’에 대해 이 데이터는 아무것도 말해 주지 않는다. 몇 칸이 읽기 좋은지는 체류·스크롤 같은 다른 자료로 따져야 할 문제이고, 우리는 그 집계를 아직 이 블록 단위로 갖고 있지 않다. 이 글이 보인 것은 ‘지금 숫자들이 서로 다르고, 그 다름에 일관된 근거가 보이지 않는다’까지다.

다섯째, 상한이 자른 쪽의 ‘질’은 재지 않았다. 잘린 것이 평범한 장면이었는지 아까운 장면이었는지는 모듈마다 따로 들여다봐야 한다. 인물 쪽에서는 그 작업을 한 번 했고, 잘린 109건이 나쁜 라운드가 아니라 개막 라운드와 점수가 오르지 않은 왕좌 교체였다는 결과를 하이라이트에서 잘린 라운드 대조에 적었다.

그래서 무엇을 할 것인가

결론은 세 줄이다. 첫째, 상한은 모듈마다 다르고 그 차이는 4배다. 둘째, 그 상한이 실제로 하는 일도 모듈마다 다르다 — 인물에서는 네 편 중 한 편에서만 칼질을 하고(나머지는 ‘전부 보여주기’), 유머·마인드게임·트레이딩에서는 거의 항상 칼질을 한다. 셋째, 그 결과 ‘하이라이트’라는 한 단어가 노출률 75.9%짜리 목록과 1.9%짜리 발췌를 동시에 가리킨다.

이 글은 고치자는 제안서가 아니다. 상한을 통일하면 인물 리포트에 빈칸이 생기고 매칭 리포트는 더 길어진다 — 지금의 숫자들이 각 모듈 안에서는 그럭저럭 맞는 크기다. 다만 두 가지는 하기로 했다. 하나는 숫자가 적힌 자리를 모듈마다 같은 계층으로 모으는 일이다. 값이 달라도 괜찮지만 ‘두 곳에 적힌 같은 값’은 언젠가 갈라진다. 다른 하나는 이 집계를 리포트 점검 항목에 넣는 일이다. 어떤 모듈의 상한이 조용히 바뀌면 칸 수 합계가 먼저 움직이고, 그러면 이 표가 알려 준다.

그리고 독자에게는 이 한 줄이 쓸모 있을 것이다. 하이라이트 칸이 적은 리포트는 심심했던 시즌이 아니다. 후보가 상한보다 적었던 시즌이다. 칸이 하나뿐인 인물 리포트 31편은 전부, 그 시즌에 채택된 라운드가 하나였던 시즌이다. 궁금하다면 인물 시즌 리포트 목록에서 아무 편이나 열어 라운드 표의 ‘미채택’ 배지를 세어 보면 된다. 그 수가 하이라이트 칸 수를 정한다.

집계 기준. 2026년 10월 27일(KST) 기준 colortone.kr/reports/에 공개된 국문 시즌 리포트 182편(인물 생성 152 · 유머 21 · 커플매칭 6 · 마인드게임 1 · 트레이딩 2)을 전수 파싱했다. 하이라이트 칸은 각 모듈의 하이라이트 섹션 안에 있는 ct-hi 카드 수로 세었다(모듈 소개·참가자 소개 섹션이 쓰는 같은 부품은 제외). 후보 집단 크기는 같은 페이지의 라운드 표·리더보드·헤더 통계에서 읽었고, 모듈별 상한 값과 그 값이 적힌 계층은 리포트 생성기 소스에서 확인했다. 인용 길이·블록 분량은 태그와 공백을 제거한 문자 수의 중앙값이다. 칸 수는 국문·영문판 182쌍을 대조해 불일치 0건을 확인했다. 성인 시즌 리포트는 공개 대상이 아니므로 집계에 포함되지 않는다. 비율은 소수점 아래 첫째 자리에서 반올림했다.