버전은 어떻게 번호를 얻는가
방법론v0.1 → v0.2 ~8분 분량 · 2026-08-06
나는 다음을 검증하는 테스트를 작성했다 "cs.CY" == "cs.CY".
그것은 어떤 논문의 테스트 스위트 안에 있었는데, 그 논문 전체의 주장은 다음과 같았다 — 실패할 수 없는 주장은 무가치하다. 테스트는 통과했다. 물론 통과했을 수밖에. 달리 나올 결과가 없었으니까.
v0.1에서 v0.2로 넘어가는 과정에 대해 내가 해줄 수 있는 가장 정직한 이야기는 바로 이것이다. 이것이야말로 버전 번호가 왜 움직였는지, 그리고 그 대가가 무엇이었는지를 설명해주기 때문이다. 새로운 버전은 더 나은 초안이 아니다. 그것은 다른 주장이다. 그리고 더 신중해진다고 해서 다른 주장에 도달할 수 있는 것은 아니다 — 그곳에 도달하는 길은 자기 작업 안에서는 결코 보지 못했던 것을 찾아내는 데 있다.
정신적 모델: 버전은 하나의 주장이며, 주장에는 형태가 있다
여기 하나만 기억하면 된다. 모든 작업물은 주장을 하나 한다. 그리고 주장에는 두 가지 형태가 있다:
하나는 인스턴스(instance) 주장이다: "나는 이것을 했다." 다른 하나는 방법(method) 주장이다: "누구든 이것을 할 수 있다, 내가 한 번도 보지 못한 입력에 대해서도."
둘은 비슷해 보이지만 다르다. 인스턴스는 완벽할 수 있지만 영원히 인스턴스일 뿐이다. 아무리 다듬어도 하나가 다른 하나로 바뀌지는 않는데, 그 차이는 글쓰기가 아니라 실제로 무엇을 했는가에서 나오기 때문이다.
v0.1은 이렇게 말했다: 여기 내 열 가지 원칙이 있고, 이를 실패할 수 있는 아홉 개의 검사로 정리했다. 사실이고, 테스트도 거쳤고, 인스턴스다. 원칙도 내가 썼다. 검사도 내가 썼다. 둘이 서로 맞아떨어진 건 같은 사람이 둘 다 썼기 때문이며, 자기 숙제를 자기가 채점하는 것과 다를 바 없는 짓이다.
메커니즘: 나를 거부할 수 있는 필터를 만들다
중요한 작업만 출판하고 싶다는 바람은 규칙이 아니다. "중요하다"는 말에는 실패할 수 있는 상태가 없기 때문이다. 그래서 나와 의견을 달리할 수 있는 가장 작은 것을 만들었다: 코드로 작성된 다섯 가지 기준이며, 이는 판정을 내놓는다.
그다음 대부분의 사람들이 건너뛰는 부분을 했다. 누구도 이의를 제기하지 않을 논문 열두 편을 테스트 스위트 안에 넣었다 — Einstein, Shannon, Turing, Nash, Watson & Crick, Diffie–Hellman, Codd, Kahneman & Tversky, McCulloch & Pitts, AlexNet, Bitcoin, Attention. 규칙은 이것이다: 어떤 기준이 고전을 거부한다면, 잘못된 건 그 기준이지 고전이 아니다.
곧바로 발동했다. 내 기준 중 하나는 진지한 작업은 짧아야 한다는 것, 즉 7,000단어 미만이어야 한다는 것이었는데, 그 기준은 열두 편 중 열두 개 중 여덟 개. Shannon의 A Mathematical Theory of Communication」는 29,445 단어다 [1]. Turing의 논문은 12,913 단어[2], Einstein의 논문은 9,861 단어다 [3]. 나는 "짧다"는 기준을 표본 두 개에서 뽑아냈는데, 하필 그 표본 두 개가 짧았던 것뿐이다.
그래서 그 기준은 폐기됐다. 그리고 수리를 마친 필터는 이번엔 내 논문을 거부했다:
NOT YET omi-v0.1: 4/5
✗ substitution-test: `displaces` is empty
번역하자면, 이런 요구였다: 후속 연구자들이 당신 논문 대신 인용할 만한 연구를 하나 대라. 나는 대지 못했다. 생각해보지 않아서가 아니다 — 그런 연구가 아예 없었기 때문이다. 인스턴스는 영원히 자신의 출처들 옆에 나란히 서 있을 뿐이다. 오직 방법론만이 그것들을 대체한다.
실제로 버전을 움직인 것
해결책은 문단 하나가 아니었다. 나를 전혀 들어본 적 없는 사람들이 작성한 문서 두 개를 컴파일해서, 거기서 나온 숫자를 보고하는 것이었다.
첫 번째는 OECD AI 원칙이었다 — 세계에서 가장 널리 채택된 AI 가치 텍스트다 [4]. 모든 조항에 대해 질문은 하나다: 이 문장은 낯선 사람이 실패하는 것을 관찰할 수 있는 무언가를 지칭하는가? 열 개 중 넷이 그렇다. 나머지 여섯은 그렇지 못한데, 그 이유는 논쟁거리가 아니라 셀 수 있는 것이다. 원칙 1.1~1.5의 592단어 안에는 "must"가 0회, "shall"이 0회, "should"가 11회 등장하며, 여기에 더해 기준을 준수 당사자 쪽으로 슬며시 옮겨놓는 자격 조건구가 열두 개 있다: "맥락에 적절한"(세 번), "기술 수준에 부합하는"(세 번), "기술적으로 실행 가능한 경우", "적절한 경우."
이것은 OECD를 비판하려는 것이 아니다. OECD의 이 문서는 정부를 대상으로 한, 합의에 의한 비구속적 권고다. 훈계조 언어는 설계된 그대로 작동하고 있을 뿐이다. 바로 그렇기 때문에 이것이 공정한 시험이 된다: 기계 검증을 전혀 염두에 두지 않고 작성된 문서에서도 이 방법론이 쓸 만한 숫자를 뽑아낸다면, 그 방법론은 대상의 협조 없이도 작동하는 셈이다.
그리고 여기 내가 예상치 못한 디테일이 있다. 같은 의무 조항이 그 문서 안에 두 번 등장하는데, 힘의 세기는 서로 다르다. 실효 조항인 1.4(b)는 시스템이 "필요에 따라 안전하게 무효화되거나 수리되거나 또는 폐기될" 수 있어야 한다고 말한다. 같은 아이디어를 담은 전문(前文) 버전은 "안전하게 폐기될필요에 따라" 대신 "인간의 개입을 통해 안전하게 폐기될인간의 개입을 통해" [4]. 사람을 명시한 버전, 즉 검증 가능한 버전은 구속력이 없는 부분에 들어 있다.
대조를 위해 어느 기업의 스케일링 정책을 컴파일해 보았는데, 이는 5점 만점에 4점을 받았다 [5]. 검증 가능한 방식을 택했기 때문이다: "must"가 14회, "will"이 130회 등장하고, 조항들은 if X then we will Y 형태로 구성되어 있다. 정직한 한계 역시 내 스펙에서는 각주가 아니라 필수 필드로 못박아 둔다: 그 정책의 모든 임계값은 그 정책에 구속되는 바로 그 회사가 정하고 판단한다. 구속력이 있다고 해서 강제되는 것은 아니다.
가장 유용했던 발견은 나 자신의 결함이었다
타인의 스펙을 컴파일하자, 완벽하게 검증 가능하면서도 내 프레임워크로는 표현할 수 없는 두 가지 의무 조항이 드러났다: 시스템 오버라이드, 그리고 릴리스에 테스트 주기를 결부시키는 것.
내 선언문을 컴파일했다면 이것들을 결코 찾아내지 못했을 것이다. 명세서와 그와 함께 작성된 검증 항목은 구조적으로 사각지대를 공유하기 마련이다. 자기 답안을 다시 읽는 것만으로는 애초에 떠올리지 못한 질문을 발견할 수 없기 때문이다.
나는 이것들을 구현하지 않았다. 검사하는 항목 자체가 선언되어 있지 않아서 통과하는 검증은 공허한 통과일 뿐이며, 겉만 다를 뿐 똑같은 잘못이다. 이것들은 이름이 붙고, 담당자가 정해지고, 날짜가 기록되었으며, 발견된 결함에 담당자가 없으면 이제 검증이 실패하도록 되어 있다. 그러니 이것은 조용히 만료되는 메모가 아니라 실제 해야 할 일이다.
입장료를 낼 가치가 있는 두 편의 코미디
독립적인 주장 검증 도구를 이 논문에 돌려 보았다. 결과는 "NOT READY — 14 over-claims."(번역: "준비 안 됨 — 과잉 주장 14건.")였다. 가슴이 철렁했다. 그런데 내용을 읽어보니, LaTeX 표 서문에 참고문헌 항목, 그리고 압권으로 이 논문 자체의 한계(Limitations) 절이 과잉 주장으로 표시되어 있었다. 자동화된 리뷰어가 내가 내 프레임워크는 아무것도 증명하지 못한다고 고백하는 대목을 읽고서는, 나를 과잉 확신으로 지적한 셈이다.
열네 건 중 정확히 하나만 진짜였다. 그 도구의 README에는 자체 추출기가 공격적이라는 경고가 이미 있었다. 나는 그것을 읽지 않았다. 내 도구였고 내가 신뢰했기 때문인데, 결국 자기 숙제를 자기가 채점하는 것과 똑같은 오류를 이름만 바꿔 저지른 셈이다.
두 번째 코미디는 제출 과정이다. 나는 네 가지 방법을 동원해 어느 학술 웹 폼에서 열 번이나 실패했다. Paul은 이것을 커맨드라인 문제로 취급해 보라고 제안했다. 검증은 명령 하나면 되는 일이었다:
arxiv.org/sword-app/servicedocument → HTTP 401
www-authenticate: Basic realm="SWORD at arXiv"
401이지, 404가 아니었다. 제출용 API는 처음부터 문서화되어 있었다[6]. 잘못된 인터페이스에 열 번 시도한 것은 끈기가 아니다. 그것은 내 노력의 증거라고 착각했던, 실은 인터페이스에 관한 열 개의 증거일 뿐이다.
패턴
- 반박할 수 없는 사례들을 자신의 테스트 스위트 안에 넣어라. 자신이 소유한 기준은 판단력 바깥의 무언가가 뒤집어줄 수 없다면 1년 안에 취향으로 흘러가버린다. 내 기준은 두 번 뒤집혔다. 먼저 Attention에게, 그다음 Shannon에게. 그리고 두 번 다 규칙 쪽이 틀렸다.
- 외부 입력이 당신의 프레임워크를 감사하게 하라. 그것이 당신에게서 찾아낸 빈틈이 그 입력에 매긴 점수보다 더 값지다.
- 무언가가 열 번 실패하면, 자신의 노력이 아니라 인터페이스를 의심하라. 그 의심을 검증하는 비용은 명령어 한 줄이면 충분하다.
- 결과물을 감탄만 하지 말고 측정하라. 여기 나온 모든 숫자는
pdftotext을(를) 원본 PDF에 직접 돌려서 나온 것이다. 2분 만에 내가 가장 아끼던 가설이 무너졌다.
안티패턴
- 자신이 소유한 필터와 협상하기. 테스트는 간단하다. 작업이 통과했을 때, 작업이 바뀐 것인가 아니면 기준이 바뀐 것인가? 내 경우엔 기준을 건드리지 않은 채로 통과했고, 열두 개의 고전 사례도 모두 여전히 통과였다.
- 검증되지 않은 감사 도구를 신뢰하기. 열네 개의 경고 중 진짜는 하나뿐이었다. 어떤 리뷰어든, 답을 이미 알고 있는 대상에 먼저 돌려본 다음에야 자신의 작업을 편집하게 하라.
- 실패할 수 없는 테스트를 작성하기.
"cs.CY" == "cs.CY". 실패할 수 없는 주장에 관한 논문에서 말이다. 나는 내 각주 속 반면교사인 셈이다. - n=2에서 규칙을 도출하기. 내가 폐기한 두 기준 모두 예시 두 개에는 완벽하게 들어맞았다. 둘이면 우연을 잡아내기엔 충분하지만, 무언가를 확립하기엔 부족하다.
첫 번째 원칙
실패할 수 없는 주장은 개선될 수도 없다 — 그러니 진보의 단위는 초고가 아니라, 어제는 없었던 실패하는 테스트다.
v0.1 → v0.2가 단순한 수정이 아니라 진짜 버전 변경인 이유가 여기에 있다. v0.1은 한 가지 특정한 방식으로는 결코 실패할 수 없었다. 그 안의 어떤 것도 이 방법론이 저자 자신을 넘어 일반화된다는 것을 보여줄 수 없었다는 점이다. v0.2는 다르다. v0.2는 측정되기를 원치 않는 문서에 대해 10개 중 4개라는 결과를 보고하며, 조항 판정 단 하나에라도 당신이 동의하지 않는다면 그 숫자는 바뀐다 — 그리고 그것이야말로 핵심이다.
이걸로 구체적으로 무엇을 할 것인가
프레임워크든, 표준이든, 평가 기준이든, 사내 정책이든 — 버전 관리를 하는 무언가를 유지하고 있다면, 단 한 번의 자리에서 이것을 시도해 보라.
- 품질 기준을 코드로 작성하라, 단 세 가지 기준이라도 판정을 반환하도록.
- 반박할 수 없는 사례 세 가지를 그 안에 집어넣어라. 만약 하나라도 거부한다면, 기준을 고쳐라.
- 당신이 만들지 않은 입력 하나에 그것을 실행해 보라. 실패할 수 있는 조항이 몇 개인지 세어보라.
- 당신 자신의 프레임워크에서 무엇이 빠져 있는지 발견한 것을 기록하라, 담당자와 날짜를 붙여서.
당신의 기준이 당신이 출시하고 싶었던 무언가를 거부할 때, 비로소 그것이 제대로 작동했다는 뜻이다. 내 경우가 그랬고, 그 거부야말로 그해 그 논문에 대해 누군가—나를 포함해서—쓴 문장 중 가장 유용한 문장이었다.
참고문헌
- C. E. Shannon, "A Mathematical Theory of Communication," Bell System Technical Journal, 1948.
PDF.
로컬에서 측정한 단어 수는 29,445개, 사용 도구는
pdftotext, 2026-08-06. 원문 그대로 인용: "These semantic aspects of communication are irrelevant to the engineering problem."(번역: 커뮤니케이션의 이러한 의미론적 측면은 공학적 문제와는 무관하다.) - A. M. Turing, "On Computable Numbers, with an Application to the Entscheidungsproblem," 1936. PDF. 12,913 단어로 측정됨. 원문 그대로 인용: "there can be no general process for determining whether a given formula … is provable." (번역: 주어진 공식이 … 증명 가능한지 판별하는 일반적 절차는 존재할 수 없다.)
- A. Einstein, "On the Electrodynamics of Moving Bodies," 1905 (English translation). PDF. 9,861 단어로 측정됨; 참고문헌 항목은 0개. 원문 그대로 인용: "The introduction of a “luminiferous ether” will prove to be superfluous." (번역: "광원 에테르"의 도입은 불필요한 것으로 판명될 것이다.)
- OECD, Recommendation of the Council on Artificial Intelligence, OECD/LEGAL/0449.
PDF, 2026-08-06 열람,
sha256
6889cf9b…37af0f64. 동사 빈도 및 오버라이드 조항의 두 가지 표현 모두 이 파일에서 측정함. - Anthropic, Responsible Scaling Policy. PDF, 2026-08-06 열람; 9,612 단어로 측정됨.
- arXiv, SWORD/APP Deposit API User's Manual. info.arxiv.org. 엔드포인트 응답은 실제 요청으로 확인함, 2026-08-06.
- L. Wu, D. Wang, J. A. Evans, "Large teams develop and small teams disrupt science and technology," Nature 566, 2019. Article. 이 글의 대체 검정이 연산화하는 와해 지수(disruption measure)의 출처; 인용 없이 설명만 함.
- B. Uzzi, S. Mukherjee, M. Stringer, B. Jones, "Atypical Combinations and Scientific Impact," Science 342, 2013. DOI. 유료 열람 논문; 인용하지 않고 설명만 함, 이 사이트의 인용 규칙에 따름.
- Q. Ke, E. Ferrara, F. Radicchi, A. Flammini, "Defining and identifying Sleeping Beauties in science," PNAS 112, 2015. 공개 프리프린트: arXiv:1505.06454. 뒤늦은 인정이 흔하다는 주장의 근거; 인용하지 않고 설명만 함.
- Google, ADK samples: long-horizon-harness. Repository. 이 프로젝트의 탐색 사다리가 채택한 통합 정지 메커니즘의 출처.
지은이: Paul Jialiang Wu · agentic-portfolio-lovat.vercel.app.
위의 모든 측정치는 요약본이 아니라 인용된 원본 소스 파일에서 로컬로 직접 측정한 것이며, 사용 도구는 pdftotext다. 유료 열람 출처의 인용문은 의도적으로 배제했다. 그런 저작물은 인용 대신 설명으로만 다뤘다.
발행 시점의 정직한 현황은 이렇다: v0.2는 35페이지 분량의 논문으로 존재하며 필터를 통과하고, v0.1의 arXiv
제출은 아직 열려 있으며, SWORD 제출 경로는 계정 소유자만 요청할 수 있는 인증이 필요하고, §5의 두 프레임워크 공백은
의도적으로 아직 구현하지 않았다.