AI 테스트는 통과했다. 잘못 해석한 사양을 그대로 정답으로 고정했던 사건
요약
AI가 잘못 해석한 사양을 기반으로 자동화 스크립트를 만들면서 데이터 손실이 발생한 사례를 공유합니다. 이 경험을 통해 AI 결과물을 실제 사용하기 전, '대조(Comparison)'와 '불변량(Invariant)' 측정을 의무화하는 검증 프로세스를 구축했습니다.
핵심 포인트
- AI의 해석에만 의존하지 말고 외부 기준과 비교해야 합니다.
- 스크립트 실행 전후로 '불변량'을 측정하여 데이터 손실 여부를 확인하세요.
- 대조(Comparison)와 불변량 측정을 통해 AI 결과물의 신뢰도를 높일 수 있습니다.
번역된 PowerPoint(184 슬라이드)의 폰트를 일괄로 교체하는 스크립트를 Claude Code에 만들게 했다. 처리 전에는 6,585자가 있던 굵은 글씨가 처리 후에는 2,789자로 줄어들었다. 3,796자, 58%가 사라진 셈이다. 이를 깨달은 것은 고객사에 납품하는 당일이었고, 발견한 것은 의뢰 담당자의 육안 확인 덕분이었다.
시도해 보지 않고 사용한 것은 아니다. 테스트는 통과했다. 문제는 그 테스트의 기준이 AI 자신의 해석이었다는 점이다. 이 글에서는 그 구조에 대해 이야기한다.
PowerPoint 굵은 글씨의 메커니즘(python-pptx가 상속을 해결하지 못하는 문제)에는 깊이 들어가지 않겠다. 기술적인 이야기는 다른 글로 쓸 예정이다.
검증 환경: Windows 11, Claude Code, PowerPoint (COM 경유)와 python-pptx. 사고는 2026-08이며, 글자 수는 2026-09-21에 COM으로 다시 센 값이다.
지시서의 한 줄을 AI가 잘못 해석했다
작업 지시서에는 굵은 글씨에 대해 이렇게 쓰여 있었다.
볼드: 원문의 굵은 글씨(Bold)는 재현, 서체의 semibold는 재현 불필요
PowerPoint에서 문자를 굵게 보이게 하는 방법은 두 가지가 있다.
| 방법 | 방식 | 파일에 남는 것 |
|---|---|---|
| ① 굵은 글씨 버튼 | 일반 서체 상태에서 'B'를 누름 | '굵게 하기'라는 지정 |
| ② 굵은 서체 | 처음부터 굵은 서체를 선택함 | 서체의 이름 (예: Segoe UI Semibold) |
지시서 전반부는 ①에 대한 이야기이고, 후반부는 ②의 이야기를 하고 있다. ②는 서체 이름을 일반 서체로 대체하는 것만으로 충분하고, ①에는 손댈 필요가 없다.
Claude는 이를
원인을 조사하던 때. 사고가 발생한 지 약 4주가 지나, 이 결함의 원인을 찾기 위해 Claude와 분석을 진행했습니다. 그 과정에서 Claude는 누락된 두 부분에 대해 '처리 전부터 볼드체 버튼이 눌려 있지 않았다'고 결론 내렸습니다. 제가 처리 전 파일을 열어 보고 실제로 눌러져 있는 것을 확인하고 물었더니, Claude가 이렇게 대답했습니다.
제가 본 것은 run에 직접 쓰인 b 속성만이었고, 표 스타일과 플레이스홀더로부터의 상속을 해결하지 못했던 것입니다.
이는 되돌리는 처리에서 누락이 발생한 것과 같은 방식으로 원인을 조사했다는 의미입니다. 그전까지 분석으로 제시했던 수치도 같은 방식으로 센 것이었습니다. COM에서 다시 계산해 보니, 처리 전 볼드체는 6,372자가 아니라 6,585자였고, 사라진 글자 수는 3,930자에서 3,796자로 바뀌었습니다.
세 경우 모두 차이점을 표로 보여준 것은 외부 기준이었습니다. 의뢰처 담당자의 눈과 화면에서 'B'가 눌려 있는 것을 본 저의 눈이었습니다.
효과적인 것은 외부 기준
이 사고 이후, Claude Code에 읽히는 CLAUDE.md에 다음 지침을 작성했습니다. 결과물을 수정하는 스크립트는 실제 데이터에 사용하기 전에 다음 중 하나를 반드시 한 번 통과시킵니다.
- 대조(突き合わせ): 기존 수단(매크로, 수작업 결과, 지난 납품물)이 있다면, 동일한 입력으로 양쪽을 실행하여 각각 비교합니다.
- 불변량(不変量): 비교할 대상이 없다면, '변해서는 안 되는 값'을 정하고 처리 전후에 측정합니다.
통과하면 그 결과를 golden으로 지정하여 회귀 테스트를 진행합니다. 이 순서를 거꾸로 하면 잘못된 해석이 그대로 golden이 됩니다.
이번 스크립트에도 이 사고 이후 이를 적용했습니다. 원래 기존 매크로를 분석하여 동일한 처리를 재현하는 형태로 만들었지만, 매크로의 출력과는 대조하지 않았습니다. 수정 후 대조하고 결과가 일치함을 확인합니다. 불변량으로는 볼드체 글자 수를 사용하며, PowerPoint 본체의 실제 상태에서 측정하는 검사를 폰트 처리 후에 자동으로 실행합니다.
볼드체: 6,585 → 2,789 (-3,796) ← 예상치 못한 감소. 여기서 중단
이 검사로 사고 당시의 처리 전후 파일에서 6,585 → 2,789를 재현할 수 있다는 것과, 되돌린 버전에서 누락된 두 부분을 포착할 수 있다는 것을 확인했습니다. 지우는 처리, 되돌리는 처리, 확인하는 처리는 같은 방식으로 맞추었습니다.
외부 기준으로 확인한다고 해도 매번 테스트를 다시 하는 것은 아닙니다. 대조는 새로운 스크립트를 만들거나 처리 해석을 바꿀 때 한 번만 합니다. 매회 실행에서 출력되는 것은 불변량의 한 줄이며, 줄어들면 안 되는 것이 줄고 있다면 중단합니다. 이 한 줄은 이후 공정으로의 인계(申し送り) 자료가 됩니다.
요약
- 테스트는 통과했다. 다만 기준이 AI 자체의 해석이었다.
- AI에게 구현, 테스트, 판정을 맡기면, 사양을 재해석한 본인이 그 재해석을 검증하게 된다. 회귀 테스트는 그것을 '어제와 동일'로 고정시킨다.
- 효과적인 것은 외부 기준이다. 방식을 바꿀 때 한 번만 기존 수단과 대조하고, 매회 실행에서는 불변량을 한 줄 출력한다.
- 문제의 구조는 판단한 사람과 검증 기준을 만든 사람이 같았다는 점에 있다. AI에게 맡기는 범위가 넓을수록, 외부 기준을 시스템으로 마련해 두어야 한다.
관련 기사
AI가 내린 결론이 확인하지 않았는데도 '검증 완료'로 되어버렸던 이야기. 이 역시 '자신의 해석으로 자신을 검증하는' 형태였다.
검사를 통과했지만, 잘못된 곳에 작성했던 이야기.
토론

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기