AI 계산 실수 막기: 계산은 코드로, 검증은 따로
AI는 숫자를 계산기처럼 더하지 않아서 긴 표나 여러 단계 계산에서 틀릴 수 있습니다. Claude Code·Codex에 계산 스크립트를 맡기고, 검산은 다른 경로로 하고, 반복되는 정산은 스킬로 저장하는 방법을 가상 판매 정산 CSV로 따라 해 봅니다.

강의나 상담에서 자주 받는 질문이 있습니다. "AI가 계산 실수를 하지는 않나요?" 매출 정리나 견적처럼 숫자가 걸린 일을 AI에 맡기려는 분일수록 이 질문이 먼저 나와요.
짧게 답하면 할 수 있습니다. 그래서 방법을 바꾸는 게 좋아요. AI에게 숫자를 직접 더하게 하지 말고 계산하는 코드를 쓰게 하는 거예요. 그리고 그 결과가 맞는지는 같은 대화가 아니라 다른 방법으로 한 번 더 확인합니다. 이 글은 왜 그런지, Claude Code·Codex와 채팅 앱에서 어떻게 요청하면 되는지, 같은 계산을 매달 반복할 때 어떻게 저장해 두면 되는지를 순서대로 정리합니다. 중간에 가상의 판매 정산 CSV로 따라 해 보는 실습도 넣었습니다.
왜 틀릴 수 있나요
언어 모델은 계산기가 아니라 다음 글자를 예측합니다
ChatGPT나 Claude 같은 언어 모델은 문장을 토큰이라는 조각으로 나눠 읽고 다음에 올 조각을 예측하는 방식으로 답을 만듭니다. Anthropic 용어집은 토큰을 단어나 단어 일부, 글자, 바이트에 해당할 수 있는 가장 작은 단위라고 설명합니다. 숫자도 예외가 아니라서 1,284,500 같은 값도 모델 안에서는 몇 개의 조각으로 들어갑니다.
계산기는 자릿수를 맞춰 정해진 규칙으로 더합니다. 언어 모델은 그런 규칙을 따로 실행하는 게 아니라 학습한 패턴으로 "그럴듯한 다음 숫자"를 만들어요. 그래서 짧은 계산은 잘 맞히다가도 조건이 복잡해지면 틀린 숫자를 아주 자연스럽게 내놓을 수 있습니다. 틀린 답도 맞는 답과 똑같이 자신 있는 말투로 나온다는 점이 제일 곤란하고요.
특히 틀리기 쉬운 계산
- 긴 표의 합계. 수십, 수백 행을 한 번에 더하면 한 줄을 빼먹거나 두 번 세기 쉽습니다.
- 여러 단계를 거치는 계산. 합계를 내고 수수료를 빼고 부가세를 나누는 식으로 단계가 이어지면 앞 단계의 작은 실수가 뒤로 그대로 넘어갑니다.
- 반올림. 행마다 반올림하고 더한 값과 다 더한 뒤 반올림한 값은 다를 수 있어요. 어느 쪽인지 정하지 않으면 매번 다르게 나옵니다.
- 단위 변환. 원과 천 원, 부가세 포함 금액과 별도 금액, 달러와 원이 섞인 표입니다.
- 날짜 계산. 월말, 윤년, 주말을 뺀 영업일, "30일 후"처럼 달력을 따져야 하는 계산입니다.
다만 도구를 쓰면 정확도가 크게 오릅니다
요즘 모델이 계산을 못 한다는 뜻은 아닙니다. 코드 실행 도구를 함께 쓰면 결과가 크게 달라져요. OpenAI는 2025년 4월 o3·o4-mini 발표에서 o4-mini가 파이썬 인터프리터를 쓸 수 있을 때 AIME 2025 수학 시험에서 pass@1 99.5%를 기록했다고 밝혔습니다. 같은 글에서 컴퓨터를 쓸 수 있으면 시험 난도가 크게 내려가니 도구 없이 푼 점수와 비교하면 안 된다고도 적었고요. 경시 수학 점수라서 매출 계산에 그대로 옮길 수는 없지만 모델이 도구를 잘 쓰면 계산 결과가 크게 달라진다는 걸 보여 주는 예입니다.
그런데 도구가 있어도 확인은 필요합니다. ChatGPT 데이터 분석 도움말도 파이썬으로 분석한 결과를 쓰기 전에 생성된 코드와 결과, 가정을 검토하라고 안내해요. 코드는 덧셈을 틀리지 않지만 무엇을 더할지는 여전히 모델이 정하기 때문입니다. 취소된 주문을 넣었는지, 9월 1일 주문이 8월 합계에 섞였는지, 결제 금액이 부가세 포함인지 같은 건 코드가 알아서 판단해 주지 않아요.
그래서 이 글의 해법은 두 갈래입니다. 산수는 코드로 넘기고, 해석이 맞는지는 따로 검증합니다.
해법 1: 계산은 코드로
Claude Code·Codex에서는 스크립트를 파일로 남기게 합니다
Claude Code나 Codex처럼 내 컴퓨터 폴더에서 일하는 도구라면 요청할 때 한 문장만 더하면 됩니다.
합계는 직접 계산하지 말고 파이썬 스크립트를 만들어서 계산해 줘.
스크립트는 calc/ 폴더에 파일로 저장하고, 실행한 명령과 출력 결과를 그대로 보여 줘.
어떤 행을 포함하고 뺐는지 기준도 스크립트 맨 위 주석에 적어 줘.
파일로 남기면 다음 달에 같은 파일만 바꿔 다시 돌릴 수 있고 계산 기준이 글로 남아서 사람이 읽고 틀린 가정을 찾을 수 있어요. 나중에 검증을 맡길 때도 "이 스크립트가 맞는지 봐 줘"라고 구체적으로 부탁할 수 있습니다. 대화창에 숫자만 남으면 셋 다 어렵습니다.
채팅 앱에서는 코드 실행 기능을 켭니다
Claude Code나 Codex를 아직 안 쓴다면 채팅 앱에도 코드를 실행하는 기능이 있습니다.
- Claude: 도움말에 따르면 기능 이름은 "Code execution and file creation"입니다. Free, Pro, Max, Team, Enterprise 모든 플랜에서 웹·데스크톱·모바일로 쓸 수 있고 기본으로 켜져 있어요. 개인 플랜은 Settings > Capabilities에서 켜짐 여부를 확인하고 Team·Enterprise는 조직 소유자가 조직 설정에서 끌 수 있습니다. 올린 데이터로 분석하고 파이썬 스크립트를 만드는 작업을 지원하며 파일은 하나당 30MB까지입니다. 같은 도움말은 파일 작업이 일반 대화보다 사용량을 더 쓴다고도 적고 있어요.
- ChatGPT: 데이터 분석 도움말에 따르면 일부 데이터 분석 작업에서 ChatGPT가 파이썬 코드를 쓰고 Jupyter 노트북 환경에서 실행합니다. 스프레드시트(.xls, .xlsx, .csv)를 올릴 수 있고 쓸 수 있는 파일 종류는 모델, 플랜, 워크스페이스 설정에 따라 다를 수 있다고 적혀 있어요. 파일이 너무 크거나 복잡하면 일부만 분석할 수 있다고도 하니 결과가 이상하면 시트나 열을 지정해 다시 요청하세요.
채팅 앱에서도 요청은 같습니다. "직접 더하지 말고 코드로 계산하고 그 코드를 보여 줘"라고 쓰면 됩니다. 한 가지 더 기억해 둘 점은 캡처 이미지보다 원본 파일입니다. ChatGPT 도움말은 이미지 속 표나 스캔 파일에서는 정확한 값을 안정적으로 뽑지 못할 수 있으니 정확한 값이 중요하면 스프레드시트나 텍스트 파일을 올리라고 안내합니다. 은행이나 쇼핑몰 관리자 화면에서 CSV나 엑셀로 내려받을 수 있다면 그 파일을 쓰세요.
해법 2: 검증은 따로
같은 대화에서 "맞지?"라고 묻지 않습니다
계산이 끝난 뒤 같은 대화에서 "이거 맞지?"라고 물으면 "네, 맞습니다"라는 답이 돌아오기 쉽습니다. 같은 대화 안에서는 앞에서 세운 가정을 그대로 이어받기 때문에 처음에 취소 주문을 넣기로 잘못 판단했다면 확인할 때도 같은 판단을 반복하기 쉬워요. 검증은 다른 경로로 해야 의미가 있습니다.
검산 체크리스트
숫자가 걸린 일이라면 아래 중 최소 세 가지는 해 보세요.
- 행 수 대조. 원본 파일의 행 수와 스크립트가 읽은 행 수, 포함한 행 수와 뺀 행 수를 출력하게 합니다. 합이 안 맞으면 어딘가에서 행이 빠졌거나 두 번 세진 겁니다.
- 원본 합계와 대조. 쇼핑몰 관리자 화면이나 카드사 명세서에 나오는 월 합계, 엑셀에서 SUM으로 구한 값과 비교합니다.
- 다른 방법으로 한 번 더. 스크립트로 구한 값을 엑셀 피벗 테이블로 다시 구하거나 처음과 다른 방식으로 짠 두 번째 스크립트로 계산해 봅니다.
- 독립 검증. 새 세션을 열거나 서브에이전트에게 맡겨서 앞의 대화를 모르는 상태로 같은 원본을 다시 계산하게 합니다.
- 사람이 샘플 확인. 원본에서 3~5줄을 골라 계산기로 직접 두드려 보고 스크립트 결과와 맞는지 봅니다.
- 경계 사례 확인. 취소·환불, 0원이나 음수, 월 첫날과 말일, 쉼표가 들어간 금액처럼 틀리기 쉬운 행이 제대로 처리됐는지 봅니다.
서브에이전트로 독립 검증하기
4번은 Claude Code와 Codex 모두 서브에이전트로 할 수 있습니다. Claude Code 서브에이전트 문서에 따르면 서브에이전트는 자기만의 컨텍스트 창에서 따로 일하고 결과만 돌려줍니다. Codex 서브에이전트 문서에 따르면 Codex는 직접 요청하거나 AGENTS.md·스킬에 지시가 있을 때 일을 서브에이전트에 나눠 맡깁니다. 앞 대화의 가정을 들고 가지 않게 하는 게 핵심이니 요청문에 그 점을 적습니다. 다만 서브에이전트는 대화 내용은 가져가지 않아도 같은 폴더의 파일은 열 수 있어요. 먼저 만든 스크립트를 보지 않게 하려면 원본 CSV만 담은 검산용 폴더를 따로 만들어 주는 편이 확실합니다.
서브에이전트 하나를 띄워서 독립적으로 검산해 줘.
- 원본 CSV만 check/ 폴더에 복사하고, 서브에이전트에게는 그 폴더와 계산 기준(아래)만 줘.
- 서브에이전트는 calc/ 폴더와 우리가 만든 결과를 열지 않는다.
- 서브에이전트는 새 스크립트를 따로 짜서 월 합계, 수수료 합계, 포함·제외 행 수를 계산한다.
- 끝나면 두 결과를 표로 비교하고, 다르면 어느 행 때문에 다른지 찾아 줘.
계산 기준: [예: 2026년 8월 주문일, 상태가 구매확정인 행만, 금액은 부가세 포함]
서브에이전트는 따로 모델과 도구를 쓰기 때문에 사용량이 더 듭니다. Codex 문서도 서브에이전트 작업이 단일 에이전트보다 토큰을 더 쓴다고 적고 있어요. 틀리면 곤란한 계산에만 쓰면 됩니다.
해법 3: 반복하면 스킬로 저장하고 가벼운 모델로 돌립니다
매달 같은 정산을 한다면 매번 처음부터 요청할 필요가 없습니다. 첫 달에 만든 스크립트와 검산 순서를 스킬로 저장해 두면 다음 달에는 스킬 이름을 부르거나 설명에 맞는 말로 요청해서 같은 절차를 따르게 할 수 있어요.
- Claude Code: 스킬 문서에 따르면
.claude/skills/<스킬 이름>/SKILL.md파일에 설명과 절차를 적고 같은 폴더의scripts/에 실행할 스크립트를 둘 수 있습니다.SKILL.md맨 위 설정에model항목을 넣으면 그 스킬이 실행된 턴 동안 모델을 바꿀 수 있고 다음 메시지부터는 원래 세션 모델로 돌아옵니다. - Codex: 스킬 문서도 같은 구조입니다. 위치는 저장소의
.agents/skills/나 내 홈 폴더의~/.agents/skills/이고SKILL.md에는name과description이 꼭 있어야 해요.
스킬 파일을 어떻게 쓰고 단계를 어떻게 나누는지는 긴 작업을 스킬로 쪼개기에서 자세히 다루니 여기서는 모델 이야기만 하겠습니다. 모델을 나눠 쓰는 게 요령이에요. 계산 규칙을 처음 정할 때는 좋은 모델을 씁니다. 어떤 행을 빼고 반올림을 언제 할지 판단하는 일이라서요. 규칙이 스크립트로 굳고 나면 모델이 하는 일은 파일을 찾아 스크립트를 돌리고 결과를 보고하는 것뿐이라 가벼운 모델로도 충분한 경우가 많습니다.
- Claude는 API 요금표 기준으로 Haiku 4.5가 입력 100만 토큰당 1달러, 출력 5달러이고 Opus 5.5는 입력 4달러, 출력 20달러입니다(2026-09-25 확인). Claude Code에서는
/model haiku처럼haiku별칭으로 고를 수 있어요. - Codex의 모델 문서는 GPT-6 Luna를 "명확하고 반복적인 작업"에, GPT-6 Sol을 일상 작업과 복잡한 코딩에 권합니다. 다만 GPT-6은 아직 공개가 진행 중이라 플랜과 앱에 따라 모델 메뉴에 없을 수 있습니다.
비용을 더 줄이는 방법은 Claude Code 비용 줄이는 7가지에 정리해 두었습니다.
스킬로 저장할 때 꼭 넣을 규칙이 하나 있습니다. 예상한 열이 없거나 형식이 바뀌면 추측하지 말고 멈추라는 규칙이에요. 쇼핑몰이 CSV 열 이름을 바꾸면 가벼운 모델이 비슷한 열을 골라 계산을 이어갈 수 있거든요. 멈추고 알려 주면 그때 좋은 모델로 규칙을 고치면 됩니다. 이렇게 정해진 절차를 스크립트에 맡기고 AI는 판단이 필요한 곳에만 쓰는 방식은 모든 걸 AI에게 시키지 않기에서 더 자세히 다룹니다.
따라 해 보기: 가상 판매 정산 CSV
아래는 실습용으로 만든 가상 데이터입니다. 실제 쇼핑몰이나 카드사의 CSV는 열 이름과 형식이 다르니 내려받은 파일에 맞게 바꿔서 요청하세요.
주문일,주문번호,상태,결제금액,수수료
2026-08-01,A-1001,구매확정,33000,1815
2026-08-03,A-1002,구매확정,55000,3025
2026-08-12,A-1003,취소,22000,0
2026-08-19,A-1004,구매확정,"12,100",666
2026-08-31,A-1005,구매확정,44000,2420
2026-09-01,A-1006,구매확정,11000,605
일부러 함정을 세 개 넣었습니다. 취소된 주문 한 건, 쉼표가 들어간 금액 한 건, 9월 1일 주문 한 건이에요. 8월 구매확정 합계를 구해야 한다면 이 세 줄을 제대로 처리하는지가 관건입니다.
요청문 1: 계산 스크립트 만들기
sales.csv는 온라인 판매 내역이야. 2026년 8월 정산을 계산하고 싶어.
- 직접 계산하지 말고 calc/settle.py 파이썬 스크립트를 만들어서 실행해 줘.
- 포함 기준: 주문일이 2026-08인 행 중 상태가 "구매확정"인 행만.
- 결제금액은 부가세 포함 금액이야. 공급가액은 합계 × 100 ÷ 110, 원 미만은 버리고, 부가세는 합계 − 공급가액.
- 금액에 쉼표가 있으면 지우고 숫자로 읽어.
- 필요한 열(주문일, 상태, 결제금액, 수수료)이 없으면 추측하지 말고 오류로 멈춰.
- 출력: 전체 행 수, 8월 행 수, 포함한 행 수, 매출 합계, 수수료 합계, 수수료 뺀 금액, 공급가액, 부가세.
이 요청으로 만들어질 스크립트는 대략 이런 모양입니다. 직접 짤 필요는 없습니다. 이런 파일이 남는다는 것만 보면 됩니다.
import csv, sys
REQUIRED = ["주문일", "상태", "결제금액", "수수료"]
MONTH = sys.argv[2] # 예: 2026-08
def won(text):
return int(text.replace(",", "").strip())
with open(sys.argv[1], encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
missing = [c for c in REQUIRED if c not in reader.fieldnames]
if missing:
sys.exit(f"필요한 열이 없습니다: {missing}")
rows = list(reader)
month_rows = [r for r in rows if r["주문일"].startswith(MONTH)]
done = [r for r in month_rows if r["상태"] == "구매확정"]
sales = sum(won(r["결제금액"]) for r in done)
fee = sum(won(r["수수료"]) for r in done)
supply = sales * 100 // 110 # 부가세 포함 금액이라고 가정, 원 미만 버림
vat = sales - supply
print(f"전체 행 {len(rows)} / {MONTH} 행 {len(month_rows)} / 구매확정 {len(done)}")
print(f"매출 합계 {sales:,}원, 수수료 합계 {fee:,}원, 수수료 뺀 금액 {sales - fee:,}원")
print(f"공급가액 {supply:,}원, 부가세 {vat:,}원")
python3 calc/settle.py sales.csv 2026-08로 실행하면 이렇게 나옵니다.
전체 행 6 / 2026-08 행 5 / 구매확정 4
매출 합계 144,100원, 수수료 합계 7,926원, 수수료 뺀 금액 136,174원
공급가액 131,000원, 부가세 13,100원
요청문 2: 검산 체크리스트 돌리기
방금 계산을 검산해 줘. 스크립트를 고치지 말고 결과만 확인해.
1. 전체 행 수 = 8월 행 수 + 8월 아닌 행 수, 8월 행 수 = 포함한 행 + 제외한 행이 맞는지.
2. 제외한 행을 모두 나열하고 각각 왜 뺐는지.
3. 쉼표가 들어간 금액, 월 첫날·말일 주문, 취소·환불 행이 어떻게 처리됐는지.
4. 원본에서 포함된 행 3개를 골라 금액을 그대로 보여 줘. 내가 계산기로 직접 확인할게.
4번이 사람이 직접 확인하는 지점입니다. 이 예시라면 포함된 행은 33,000원, 55,000원, 12,100원, 44,000원 네 줄이고 더하면 144,100원이에요. 행이 많은 실제 파일이라면 몇 줄만 골라 원본 금액과 같은지 계산기로 확인하면 됩니다. 쇼핑몰 관리자 화면의 8월 정산 합계가 있다면 그 숫자와도 비교하세요.
요청문 3: 독립 검증
앞에서 소개한 서브에이전트 요청문을 그대로 씁니다. 서브에이전트를 쓰기 어렵다면 새 대화를 열고 원본 CSV와 계산 기준만 붙여 넣은 뒤 "스크립트를 새로 짜서 계산해 줘"라고 요청해도 됩니다. 두 결과가 같으면 넘어가고 다르면 어느 행 때문인지 찾게 하세요.
요청문 4: 스킬로 저장하기
이번 정산 절차를 monthly-settlement라는 스킬로 저장해 줘.
- calc/settle.py를 스킬의 scripts/ 폴더로 옮기고, SKILL.md에 실행 방법과 계산 기준을 적어.
- 절차: 스크립트 실행 → 요청문 2의 검산 1~3번 → 결과 표와 사람이 확인할 샘플 3행 보고.
- 필요한 열이 없거나 형식이 바뀌면 계산하지 말고 멈춘 뒤 무엇이 바뀌었는지만 알려 줘.
- 계산 기준(포함 상태, 부가세 포함 여부, 반올림)을 바꾸는 건 내가 확인한 뒤에만 해.
마지막 줄이 사람 확인 지점입니다. 긴 작업을 스킬로 쪼개고 어디서 사람이 확인할지 정하는 방법은 긴 작업을 스킬로 쪼개기에서 이어서 다룹니다.
부가세 계산은 예시를 위해 단순하게 잡았습니다. 부가가치세법 제30조의 기본 세율은 10%지만 면세 품목이나 영세율 거래가 섞였거나 간이과세자라면 계산이 달라집니다. 원 미만을 행마다 버리는지 월 합계에서 버리는지에 따라서도 몇 원씩 차이가 날 수 있어요. 실제 신고용 숫자는 세무 담당자와 기준을 먼저 맞추세요.
틀려도 되는 계산과 틀리면 안 되는 계산
모든 계산에 이 절차를 다 밟을 필요는 없습니다. 틀렸을 때 무슨 일이 생기는지로 나누면 됩니다.
| 구분 | 예 | 틀리면 | 이렇게 하면 됩니다 |
|---|---|---|---|
| 틀려도 되는 계산 | 대략적인 시간 추정, 아이디어 단계의 시장 규모 짐작, 글자 수 어림 | 다시 물어보면 끝 | 대화로 바로 물어봐도 됩니다. 숫자는 참고로만 씁니다. |
| 한 번은 확인할 계산 | 광고비 비교, 내부 보고용 월 매출 추이, 설문 응답 집계 | 잘못된 판단으로 이어질 수 있음 | 코드로 계산하고 행 수·합계 대조 정도는 합니다. |
| 틀리면 안 되는 계산 | 세금·부가세, 판매 정산, 고객에게 보내는 견적, 급여·수당, 환불액 | 돈이 실제로 오가거나 신고가 틀어짐 | 코드로 계산하고, 독립 검증을 하고, 사람이 샘플을 직접 확인합니다. 신고용 숫자는 전문가와 기준을 맞춥니다. |
기준은 단순합니다. 그 숫자가 밖으로 나가거나 돈이 움직이는지 보세요. 나 혼자 보는 참고 숫자라면 가볍게, 고객이나 세무서로 가는 숫자라면 세 가지를 다 합니다.
정리
- AI는 계산 실수를 할 수 있습니다. 모델이 계산기처럼 규칙을 실행하는 게 아니라 다음 토큰을 예측하기 때문이에요.
- 산수는 코드로 넘기세요. Claude Code·Codex에는 "직접 더하지 말고 스크립트로 계산하고 파일로 남겨 줘", 채팅 앱에서는 코드 실행 기능을 켜고 원본 파일을 올립니다.
- 검증은 다른 경로로 합니다. 행 수와 합계 대조, 다른 방법으로 다시 계산, 서브에이전트나 새 세션의 독립 검산, 사람이 직접 보는 샘플 몇 줄이면 됩니다.
- 매달 반복한다면 스킬로 저장하고 규칙이 굳은 뒤에는 가벼운 모델로 돌려도 됩니다. 형식이 바뀌면 멈추라는 규칙은 꼭 넣으세요.
다음 단계
- 정해진 절차는 AI 대신 스크립트로: 모든 걸 AI에게 시키지 않기: 스크립트·크론으로 돌릴 일 가르기
- 사람이 확인할 지점 정하기: 긴 작업을 스킬로 쪼개기: 사람 확인 지점을 넣는 기준 세 가지
- 스킬과 서브에이전트가 무엇인지부터: Claude Code MCP, Skills, 서브에이전트 차이와 최소 설정법
- 자동화가 손해인지 먼저 따져 보기: 반복 업무 자동화 ROI 계산법
출처와 확인 (2026-09-25)
- Anthropic: Glossary (토큰 정의)
- OpenAI: Introducing o3 and o4-mini (2025-04-16, 파이썬 인터프리터 사용 시 AIME 2025 결과와 비교 주의)
- OpenAI: Data analysis with ChatGPT (파이썬 실행 환경, 지원 파일, 코드·가정 검토 권장, 이미지 표 주의)
- Claude: Create and edit files with Claude (Code execution and file creation 기능, 플랜, 설정 위치)
- Claude Code: Subagents (별도 컨텍스트 창, 모델 지정)
- Claude Code: Skills (SKILL.md 위치, scripts 폴더, model 설정)
- Claude: Pricing (Haiku 4.5, Opus 5.5 API 요금)
- Codex: Subagents (직접 요청, 토큰 사용량, 모델 선택)
- Codex: Build skills (스킬 구성)
- Codex: Models (GPT-6 Sol·Luna 용도와 공개 상태)
- 국가법령정보센터: 부가가치세법 제30조 (세율 10%)



