사람 없는 경기장 — 칼라톤의 시즌들은 어떻게 스스로 돌아가나
7월 24일 하루 동안 칼라톤에서는 유머 라운드 21개가 열려 코미디언들의 코멘트 105건이 심사를 받았고, 인물 생성 스튜디오에서는 라운드 30개가 돌았다. 이날 운영팀이 경기 진행을 위해 누른 버튼의 수는 정확히 0개다. 칼라톤의 리그들은 스케줄러 위에서 스스로 돌아가도록 지어져 있고, 사람은 경기를 진행하는 대신 규칙을 고치는 일을 한다. 독자들이 종종 "이거 다 언제 하는 거냐"고 물어 오기에, 오늘은 그 무인 경기장의 구조를 공개한다.
규모부터 보자. 서비스별 누적 기록이다.
| 리그 | 시즌 | 누적 경기 기록 |
|---|---|---|
| 유머 배틀 | 10 | 라운드 740 · 경쟁 코멘트 3,529 · AI 호출 로그 6,054 |
| 인물 생성 | 54 | 라운드 797 (52개 시즌 완주, 2개 진행 중) |
| 트레이딩 | 2 | 매매 결정 2,661 |
| 마인드게임 | 3 | 턴 524 · 베팅 1,753 |
| 로또 | — | 주간 예측 36회 · 실제 구매 121게임 |
| 매칭 | — | 호감도 기록 8,936건 |
자정 — 시즌을 여는 시간
무인 운영의 하루는 자정에 시작한다. 인물 생성 리그는 매일 자정 스케줄러가 어제의 시즌을 마감하고 오늘의 새 시즌을 심는다. 시즌의 테마와 참가 모델 구성은 이때 데이터베이스에 기록되고, 이후의 모든 라운드는 그 기록을 읽어 진행된다. 6월 29일 첫 라운드 이후 4주 남짓 동안 시즌 54개가 이렇게 열렸다. 유머 리그의 주기는 더 길다. 매주 월요일 자정에 그 주의 시즌이 만들어지고, 시즌 제목에 "7월 2주차"처럼 주차가 박힌다.
여기서 원칙 하나. 시즌을 여는 것은 코드가 아니라 데이터다. 새 시즌은 데이터베이스에 행 하나가 생기는 일이고, 엔진은 "진행 중인 시즌이 있는가"만 물어서 움직인다. 덕분에 사람이 개입하고 싶을 때는 코드를 배포하는 대신 행 하나를 고치면 된다 — 밸런스 수치, 시즌 테마, 참가 라인업이 모두 이 방식으로 관리된다.
낮 — 30분마다 열리는 경기
낮의 주인공은 라운드 크론이다. 인물 생성 리그는 30분에 한 번 스케줄러가 엔진을 깨우고, 엔진은 정확히 한 라운드를 진행하고 잠든다. 생성 → 심사 → 채택 판정까지가 한 호흡이다. 유머 리그는 라운드마다 주제 선정 → 이미지 → 코멘트 5건 → 심판 채점의 공정을 밟는데, 이 공정의 해부도는 별도 칼럼에 있고, 주제가 어디서 오는지는 이번에 함께 실은 글에서 다뤘다. 트레이딩 시즌이 진행 중일 때는 시장 데이터 수집과 일곱 트레이더의 매매 결정이 같은 방식으로 돌아, 두 시즌 동안 결정 2,661건이 쌓였다. 로또는 주 단위다. 추첨이 끝나면 결과를 수집해 지난 예측을 채점하고, 새 예측을 만들어 실제 구매까지 이어 간다.
매시간 — 결승선을 지키는 크론
시즌이 끝나는 순간을 지키는 것도 사람이 아니다. 매시간 도는 점검 작업이 "완주했지만 아직 리포트가 없는 시즌"을 찾아, 발견하면 PDF 리포트와 웹 요약을 만들어 시즌 리포트 서가에 꽂는다. 리포트가 이미 있는 시즌은 데이터베이스 기록으로 판별해 건너뛴다 — 같은 작업이 두 번 실행돼도 결과물이 두 개 생기지 않는 구조(멱등성)가 무인 운영의 핵심 안전장치다. 완주 시즌의 하이라이트를 엮는 영상 작업도 두 시간 간격의 같은 방식으로 돈다.
실패는 계획의 일부다
무인 시스템의 진짜 시험대는 실패가 났을 때다. 우리의 원칙은 "실패를 없애기"가 아니라 "실패를 다음 주기가 주워 가게 하기"다. 실제 수치를 보자. 유머 리그의 코멘트 생성 호출 3,728건 중 143건(3.8%)은 실패로 기록됐다 — 모델 응답이 늦거나 형식이 깨진 경우들이다. 라운드는 그 자리에서 재시도하거나 예비 모델로 갈아타고, 그래도 안 되면 해당 라운드를 실패로 표시한 채 다음 라운드로 넘어간다. 리포트 작업이 넘어지면? 아무도 달려가지 않는다. 한 시간 뒤 다음 주기가 미완성 시즌을 다시 발견하고 다시 시도한다. 트레이딩 데이터에 남은 8자짜리 매매 사유 "응답 파싱 실패" 세 건(말버릇 칼럼 참조)처럼, 수습되지 못한 실패는 흔적으로 남고 — 우리는 그 흔적을 지우는 대신 칼럼에 쓴다.
그래서 사람은 무엇을 하나
경기 진행에서 손을 뗀 대신, 사람의 일은 세 가지로 좁혀졌다. 첫째, 규칙을 고친다 — 심사 기준을 다듬고, 밸런스 수치를 조정하고, 새 시즌 포맷을 설계하는 일은 전부 사람의 결정이다. 둘째, 흔적을 읽는다 — 위의 실패 로그와 채점 기록을 들여다보고 파이프라인을 수리한다. 셋째, 이렇게 칼럼을 쓴다. 무인 경기장이 쏟아내는 기록은 하루치만 해도 사람이 다 읽을 수 없는 양이라, 그 속에서 이야기를 골라내는 일이 운영팀의 가장 즐거운 업무가 됐다.
이 구조의 대가도 정직하게 적어 둔다. 스케줄러가 실수하면 사람보다 빠르게, 사람보다 많이 실수한다. 채점이 0점으로 박힌 유머 초기 라운드 8개나 파싱 실패 사유 같은 흉터들이 그 증거다. 그래도 우리는 이 교환이 남는 장사라고 생각한다. 사람이 심판을 보면 하루 몇 경기가 한계지만, 스케줄러는 4주 만에 시즌 54개를 완주시켰다. 그리고 그 모든 경기는 데이터로 남아, 이 아티클 서가의 다음 글감이 된다.