지침을 영어로 바꾸면 토큰이 줄어들까: 예측 25%, 실측 1%

지침을 영어로 바꾸면 토큰이 줄어들까: 예측 25%, 실측 1%

에이전트 지침 문서를 영어로 옮기면 토큰이 준다는 이야기를 실측했습니다. 문서 기준으로는 25% 줄었지만 실사용 로그 17세션·6,053턴으로 계산한 비용 절감은 1.06%였습니다.

지침을 영어로 바꾸면 토큰이 줄어들까: 예측 25%, 실측 1%

TL;DR
지침 문서를 영어로 옮겨 토큰을 아끼려다 접었습니다. 문서 파일은 4분의 1이 줄었는데 실제 비용은 1%도 줄지 않았습니다.

  • 파일 크기와 실제 비용은 같은 값이 아닙니다. 지침은 세션마다 캐시에 한 번 올라간 뒤 10분의 1 단가로 읽히고 그마저도 전체 컨텍스트의 일부입니다.
  • 비용이든 지시 준수든 손댈 곳은 문서의 언어가 아니라 문서에 든 지시였습니다.

지침이 쌓이면서 생긴 질문

Claude Code 에서 쓰는 에이전트 플러그인을 1년 가까이 키워 왔습니다. 스킬이 늘고 규칙이 쌓이면서 마크다운과 JSON 이 63개, 125,311 토큰이 됐습니다. 한국어 글자 비중은 62.5%입니다.

여기서 “지침을 영어로 쓰면 토큰이 준다”는 이야기를 접했습니다. 근거는 명확해 보였습니다. 한국어는 같은 정보를 담을 때 영어의 약 2.36배 토큰을 씁니다. 단어당 토큰 수는 영어가 1.2~1.4, 한국어가 1.5~2.3입니다.

한국어 문서 절반 이상을 영어로 옮기면 절반 가까이 줄어든다는 계산이 나옵니다. 계획도 세웠습니다. 절차와 판정 로직은 영어로 옮기고 사람이 읽는 README 와 설계 문서는 한국어로 남기는 방식입니다.

문서 기준 측정: 25%

옮기기 전에 측정하기로 했습니다. 레포에서 성격이 다른 세 군데를 골라 뜻이 같은 영어로 다시 썼습니다. 조건은 정보량을 줄이지 않는 것입니다. 항목을 빼거나 조건을 뭉뚱그리면 절감이 아니라 삭제이므로, 표·코드·파일 경로를 그대로 두고 문장만 옮겼습니다.

실제로 옮긴 한 항목입니다.

- **GATE 0 (대외비 가드, 필수)**: 퍼블릭 리모트 대상 텍스트(이슈·PR 본문/제목/코멘트,
  커밋 메시지, 릴리즈 노트) 생성 직전 references/confidential-guard.md 적용.
  히트 시 하드 차단. 가이드 단계에서 키워드를 피해 작성하고,
  `scripts/pre-tool-use.mjs` 훅이 최종 재검증한다.
- **GATE 0 (confidentiality guard, required)**: Apply references/confidential-guard.md
  immediately before generating any text bound for a public remote (issue/PR body,
  title, comment; commit message; release note). A hit is a hard block. Write around
  the keywords during the guide step; the `scripts/pre-tool-use.mjs` hook re-checks
  at the end.

103 토큰에서 81 토큰, 21.4% 줄었습니다. 두 파일 경로만 해도 12 토큰이 양쪽에 똑같이 남아 있습니다. 세 군데의 결과입니다.

대상한국어영어절감
게이트 절차 (스킬 본문)49037623.3%
정책 서술 + 표 2개30421728.6%
톤 규칙 3항28520727.4%

평균 25%였습니다. 기대했던 50%의 절반입니다.

차이의 원인은 문서 구성에 있었습니다. 2.36배라는 배율은 순수 산문을 옮겼을 때 나오는 값입니다. 지침 문서는 순수 산문이 아닙니다.

표 구분자, 파일 경로, 코드 블록, 명령어, 스킬 이름, 마크다운 문법은 번역 전후 모두 ASCII 로 남습니다. 번역해도 그대로 남는 이 부분이 배율을 끌어내립니다. 여기까지는 기대보다 작을 뿐 방향은 맞았습니다.

파일 크기와 실제 비용의 간격

문제는 25%가 무엇에 대한 25%인가입니다. 파일의 토큰 수는 디스크 위의 값입니다. 실제로 지불하는 것은 요청마다 모델에 들어가는 입력 토큰이고 둘 사이에는 두 단계가 끼어 있습니다.

첫 번째는 로딩 시점입니다. 스킬은 필요할 때만 읽히므로 레포 총량이 그대로 컨텍스트에 올라가지 않습니다. 세션 성격별로 측정했습니다.

세션 유형로딩되는 것토큰
이슈 플로우글로벌·레포 지침, 플로우 스킬, 단계 가이드, 대외비 가드17,393
콘텐츠 작성글로벌 지침, 작성·검증 스킬, 문체 규칙 6종34,403

콘텐츠 세션 34,403 중 25,572, 그러니까 74%가 문체 규칙 하나였습니다. 그런데 이 파일은 한국어 문장을 판정 대상으로 삼는 규칙 모음입니다. 규칙 본문에 한국어 예시와 정규식이 들어 있어 옮기면 판정 대상은 한국어인데 규칙만 영어가 됩니다. 절감 여지가 가장 큰 파일이 가장 옮기기 어려운 파일이었습니다.

두 번째가 더 컸습니다. 프롬프트 캐싱입니다.

실사용 로그 측정

Claude Code 는 세션 기록을 ~/.claude/projects/ 아래 JSONL 로 남깁니다. 각 어시스턴트 턴에 usage 가 붙어 있고 여기에 캐시 관련 필드가 들어 있습니다.

import json, glob
totals = {"input_tokens": 0, "cache_creation_input_tokens": 0,
          "cache_read_input_tokens": 0, "output_tokens": 0}
turns = 0
for path in glob.glob("~/.claude/projects/<프로젝트>/*.jsonl"):
    for line in open(path, encoding="utf-8"):
        usage = (json.loads(line).get("message") or {}).get("usage")
        if not usage:
            continue
        turns += 1
        for key in totals:
            totals[key] += usage.get(key, 0)

이 프로젝트 디렉토리의 세션 17개, 6,053턴을 집계한 결과입니다.

항목토큰단가
신규 입력109,3831.0배
캐시 생성49,759,5692.0배 (1시간 TTL)
캐시 읽기1,597,855,1740.1배

입력 토큰의 97%가 캐시 읽기였습니다. 단가를 반영해도 입력 비용의 61.6%를 캐시 읽기가 차지합니다. 지침 문서는 세션 시작 시 한 번 캐시에 올라가고 그다음부터는 매 턴 1/10 단가로 읽힙니다.

여기에 컨텍스트 크기까지 더해집니다. 턴당 평균 캐시 읽기가 263,977 토큰이었습니다. 이슈 플로우 지침 17,393은 그 6.6%이고 절감분 4,300은 1.63%입니다. 나머지는 대화 이력, 읽은 파일, 도구 결과입니다.

지침 4,300 토큰은 세션 시작 시 한 번 캐시에 기록되고 이후 모든 턴에서 읽힙니다. 두 경로에 단가를 적용해 전체 입력 비용과 비교했습니다.

캐시 읽기 절감  4,300 × 6,053턴  × 0.1배 =   2,602,790
캐시 생성 절감  4,300 × 17세션   × 2.0배 =     146,200
                                            ----------
                                             2,748,990

전체 입력 비용  109,383 × 1.0
              + 49,759,569 × 2.0
              + 1,597,855,174 × 0.1        = 259,414,038

절감 비율      2,748,990 / 259,414,038     = 1.06%

콘텐츠 세션에도 같은 계산을 적용한 결과입니다.

세션파일 기준 예측실사용 비용 기준
이슈 플로우25%1.06%
콘텐츠 작성6%0.54%

파일에서 4분의 1을 덜어내도 실제 비용은 100분의 1만 줄어듭니다.

전환을 접은 이유

토큰이 근거였다면 1%로는 부족합니다. 남는 근거는 영어 지시가 더 잘 지켜진다는 쪽이었습니다. 11개 과제를 비교한 연구에서 비모국어(영어) 프롬프트가 평균 1위, 혼용 2위, 모국어 3위로 나옵니다.

이 방향을 레포에 옮기기 전에 확인할 곳이 있었습니다. Anthropic 은 모델 세대가 바뀔 때마다 프롬프트를 어떻게 손볼지 마이그레이션 문서로 공개합니다. 지금 쓰는 세대의 항목을 열어 보니 언어는 목록에 없었습니다.

문서가 지시하는 조정방향
자가 검증·재확인 지시삭제 (시키지 않아도 검증하므로 남겨 두면 과검증)
위임 권장 지시삭제 후 상한 명시 (이전 세대보다 서브 에이전트 호출이 잦음)
응답·산출물 분량명시 추가
작업 범위명시 추가

지시가 지켜지는 정도를 올리려면 언어를 바꾸는 게 아니라 이 목록을 맞추면 됩니다. 삭제 두 건에 추가 두 건이니 지시를 걷어내라는 방향도 아닙니다. 대조해 보니 삭제 대상은 이미 없었고 추가 대상도 들어 있었습니다. 영어 전환으로 기대하던 몫을 다른 경로가 이미 가져간 상태였습니다.

반대로 치르는 비용은 구체적이었습니다. 영어 시스템 프롬프트는 비영어 생성에 대한 통제력이 약해집니다. 응답과 산출물이 전부 한국어인 환경에서는 출력 언어를 따로 고정해야 합니다.

스킬 설명문의 한국어 트리거 키워드는 자연어 라우팅이 스킬을 찾는 단서라 지우면 라우팅이 끊깁니다. 문체 규칙은 앞서 본 이유로 옮길 수 없습니다. 1%를 얻으려고 라우팅·출력 언어·문체 규칙 세 곳에 고장 날 자리를 만드는 셈이었습니다. 전환하지 않기로 했습니다.

남은 판단 기준

이 측정에서 남은 것은 결론보다 판단 기준이었습니다. 언어를 바꾸는 일은 같은 자료를 짧게 만들 뿐 그 자료가 매 턴 실린다는 사실을 바꾸지 않습니다. 비용을 줄이려면 물어야 할 질문은 “이 문서를 짧게 쓸 수 있는가”가 아니라 “이 문서가 매 턴 실릴 값을 하는가”입니다.

정확도 쪽도 같은 자리로 돌아왔습니다. 매 턴 실리는 자료를 참조 링크 뒤로 보내거나, 모델이 이미 아는 것을 지우거나, 아무것도 바꾸지 않는 지시를 걷어내는 쪽이 양도 크고 고장 위험도 없습니다.

측정의 한계와 재현

두 가지 한계가 있습니다. 세션에서 Anthropic 토크나이저에 접근할 경로가 없어 GPT-4o 계열 토크나이저를 대리 지표로 썼으므로 25%는 근삿값입니다. 표본도 1인 사용 기록 17세션이라 “일반적으로 1%”가 아니라 “이 사용 패턴에서 1%”입니다. 컨텍스트가 264K까지 커지는 패턴이 전제고 짧은 세션 위주라면 지침 비중이 커져 결과가 달라집니다.

집계 코드는 위에 그대로 옮겼습니다. Claude Code 를 쓰고 있다면 자기 프로젝트 디렉토리에 돌려 캐시 읽기 비중과 턴당 컨텍스트를 확인할 수 있습니다. 그 두 값이 저와 다르면 이 글의 1%도 달라집니다.

참고


이 글은 Claude와 함께 작업했습니다.

This post is licensed under CC BY 4.0 by the author.