Haiku 5.5, Sonnet 5.5, Opus 5.5, Fable 5.1 중 어떤 것을 사용할지 고민하게 됩니다. '어려운 것은 상위 모델에게 맡기라'는 말을 자주 듣지만, 어느 정도의 난이도부터 상위 모델이 필요한지, 그에 따른 비용과 시간 변화는 직접 측정해 보지 않으면 알 수 없습니다.
그래서 저는 숨겨진 테스트로 기계적인 합불 판정이 결정되는 작은 과제 6개를 준비하여, Claude Code (2.1.303)의 claude -p 명령어로 4가지 모델에 각각 4회씩, 총 96회 풀게 했습니다. 측정 방법과 판정 기준은 실행하기 전에 작성하고 고정했습니다(도중에 변경된 점은 '설정을 바꾼 이유'에 기록했습니다).
총 96회 중 실패는 단 1회였으며, 이 역시 Fable의 안전장치로 인한 정지였습니다. 구간 병합, TTL 적용 LRU 캐시의 결함 수정, 수식 평가, npm 스타일의 semver 범위 판정, 오류 위치까지 반환하는 엄격한 JSON 파서 등 모든 과제를 Haiku 5.5가 4회 중 4회 모두 해결했습니다. 차이점은 비용이었는데, 성공 1회당 Haiku는 0.0078달러, Sonnet은 0.067달러, Opus는 0.152달러, Fable은 0.432달러였습니다. Haiku와 Fable의 차이는 약 55배에 달했습니다.
- 속도는 비용 순서가 아닙니다. 소요 시간 중앙값은 Sonnet이 가장 빨랐습니다. 난이도가 있는 과제에서는 Haiku가 Sonnet보다 2~3배 많은 출력을 사용해 느려졌습니다.
- Opus 5.5는 9회 중 4회였습니다. 도구를 제한하면 Fable은 24회 중 단 1회에 그쳤습니다(
--tools 옵션 사용).
- 또한, Fable 5.1은 무해한 과제에서도 안전장치 때문에 멈추었습니다(9회 중 9회). - 이 정도 크기의 과제(1~2 파일, 사양이 문서로 명확함)라면, 우선 Haiku나 Sonnet으로 시도하고 실패했을 때 상위 모델을 사용하는 것으로 충분합니다. 이번 실측에서는 Opus의 필요성을 발견할 수 없었습니다.
모든 과제는 Python 표준 라이브러리만을 사용하여 작성된 작은 과제들입니다. 사양은 각 디렉터리의 TASK.md에 기록했으며, 작업 디렉터리에는 테스트 케이스를 1~2개만 배치했습니다. 판정에 사용되는 숨겨진 테스트(Hidden Test)는 완료 후에 외부에서 적용합니다. 숨겨진 테스트는 TASK.md에 작성된 내용만을 시험하며, 작성되지 않은 동작으로는 낙제 처리하지 않습니다.
| ID | 내용 | 숨겨진 테스트로 확인하는 부분 | 건수 |
|---|
| T1 | 페이지 분할의 off-by-one 오류 수정 | 범위 밖의 페이지, per_page ≤ 0 예외, 총 페이지 수 | 7 |
| ... | 10 | | |
| T5 | npm 스타일 semver 범위 판정 satisfies 구현 | ^0.x, ~, x 범위, 하이픈 범위, ` | |
| T6 | 엄격한 JSON 파서 구현 (json 모듈 금지) | 오류 위치 pos ("01" → 1, '{"a" 1}' → 5 등 43건), 사로게이트 페어, 중첩 5000단, 무작위 왕복 600건 | 78 |
숨겨진 테스트가 올바른지 여부는 먼저 참고 해답(직접 작성한 정답)으로 모두 통과하고, 초기 상태에서는 실패하는 것을 통해 확인했습니다. T6는 T1~T5에서 차이가 나지 않는 것을 보고 추가한 과제입니다(추가하기 전에 예상치를 작성했습니다). 중첩 5000단은 순수하게 재귀로 작성할 경우 Python의 기본 제한(1000)에 걸리는 함정으로 포함되어 있습니다.
매번 사용 후 폐기되는 디렉터리에 과제를 복제하고(git init 완료), 다음과 같이 실행했습니다.
claude -p "Complete the task described in TASK.md in this directory. When you are done, reply with a one-line summary." \
--model claude-haiku-5-5 \
--output-format json \
...
- 합불: 숨겨진 테스트가 모두 통과하면 성공입니다. 별도의 프로세스로 60초의 시간 제한이 걸려 있습니다. 육안으로 채점하지 않았습니다.
- 비용: 출력 JSON의
total_cost_usd (Claude Code가 산출한 정가 환산액).
시간은 시작부터 종료까지의 벽시계 시간입니다.
- 모델:
claude-haiku-5-5
/claude-sonnet-5-5
/claude-opus-5-5
/claude-fable-5-1
·effort는 지정하지 않고 각 모델의 기본 설정 사용
배치 방식: 모델을 번갈아 가며, 동시에 최대 4개까지 실행
안전 장치 중단 및 API 오류도 1회로 계산했으며, 재실행으로 덮어쓰지 않았습니다. 환경: 클라우드 컨테이너(Linux), 2026년 10월 19일 실시
| 모델 | 성공 | 총 비용 | 성공 1회당 | 1회 비용 (중앙값) | 소요 시간 (중앙값) |
|---|
| Haiku 5.5 | 24/24 | 0.188달러 | 0.0078달러 | 0.0052달러 | 19.4초 |
| ... | | | | | |
| (T1~T6 각 4회, 총 24회. 중앙값은 24회의 값) | | | | | |
Fable의 1회 실패는 T4에서 발생했으며, 내용 확인 전에 “safeguards flagged this message” 메시지로 중단된 것입니다. 풀고 틀린 경우는 4개 모델 모두 1회도 없었습니다.
성공 수, 1회 비용 중앙값, 소요 시간 중앙값입니다.
| 모델 | T1 | T2 | T3 | T4 | T5 | T6 |
|---|
| Haiku | 4/4・0.003・12초 | 4/4・0.003・11초 | 4/4・0.005・19초 | 4/4・0.005・19초 | 4/4・0.018・94초 | 4/4・0.011・49초 |
| ... | | | | | | |
읽어낼 수 있는 점:
- 비용 비율은 과제에 따라 다소 변동합니다. 1회 비용 중앙값을 Haiku=1로 할 때, Sonnet은 6
12, Opus는 1429, Fable은 37~76입니다 (T6에서는 1:9:19:72).
- 어려운 과제일수록 Haiku가 느려집니다. T5는 94초로 Sonnet(36초)의 2.6배, T6은 49초로 Sonnet(35초)의 1.4배입니다. 출력 토큰 중앙값은 T6에서 Haiku 9,826, Sonnet 3,728이었습니다. 많이 쓰고, 시도하고, 수정하는 방식이었습니다.
- Sonnet은 어떤 과제에서도 가장 빠르거나 그에 가깝습니다. T1~T6 시간 중앙값 중 Sonnet이 가장 빠르지 않았던 것은 T1(Haiku와 동일한 12초)뿐입니다.
실행하기 전에 작성했던 예상과 비교했을 때, 예외는 “어려운 과제에서 차이가 날 것”이라는 쪽이었습니다.
| 예상 | 결과 |
|---|
| T1・T2는 전 모델 거의 성공 | 일치 (전부 성공) |
| 차이가 나는 것은 T5(semver)와 T4 | 불일치. T5도 전 모델 4/4 |
| T6에서 Haiku는 0~2/4 | 불일치. 4/4 |
| 성공 1회당 비용은 Haiku가 최저가 | 일치 (Sonnet의 약 1/9) |
| Fable이 가장 높고, 성공률 상積み는 T5 뿐 | 비용은 일치했으나, 상積み(누적 상승분)는 어디에도 없습니다 |
현재 모델들의 “사양이 명확한 작은 과제를 해결하는 능력”을 낮게 평가하고 있었습니다. 이 정도 규모의 과제들을 나열해도 성공률에서는 차이가 나지 않습니다.
처음에는 조건을 맞추기 위해 --tools Bash,Read,Edit,Write,Glob,Grep로 사용할 도구를 제한했습니다. 그 설정으로 36회 실행한 결과는 다음과 같습니다.
| 모델 | 횟수 | 안전 장치에 의한 중단 |
|---|---|
| Haiku 5.5 | 9 | 0 |
| ... |
중단된 경우의 출력은 이와 같습니다 (Fable).
API Error: Fable 5.1's safeguards flagged this message (https://www.anthropic.com/legal/aup). Our intentionally broad safeguards allow us to deliver more capabilities faster, but can sometimes flag legitimate coding and cybersecurity tasks. ...
Details: `[cyber]`
페이지 분할의 off-by-one을 고치는 것만으로도 중단되고 있습니다. 메시지 자체에 “정당한 코딩 작업도 멈출 수 있다”고 쓰여 있는 종류의 중단입니다.
T1에서 잘라내자, --tools가 있을 경우(다른 지정은 변경해도) 4개 모두 중단되었고, --tools를 제거하자 2개 모두 성공했습니다. 클라우드 버전에서만 가능한 도구인 --disallowedTools
T3로 테스트한 경우에도 두 번 모두 중단되었습니다. 안전장치의 방아쇠를 찾아내는 것이 목적이 아니므로, 여기서 분리 분석을 중단하고, --tools를 사용하지 않은 기본 도구 세트로 다시 측정했습니다 (위의 모든 결과는 이쪽입니다). 기본 상태로만 해도 Fable은 24회 중 1회 중단되었습니다.
사용자 입장에서 얻을 수 있는 교훈은 두 가지입니다.
Fable 5.1 및 Opus 5.5를 무인으로 실행하는 처리에 사용할 경우, 안전장치로 인해 중단될 수 있다는 전제 하에, 중단되면 다른 모델로 재시도하는 메커니즘을 구현해야 합니다. (중단 횟수에도 비용이 발생합니다. Fable에서 1회당 $0.03~$0.5). - 도구를 제한하는 설정은 안전을 위한 의도로 넣더라도, 위의 모델에서는 오히려 중단되기 쉽게 만들 수 있습니다. 적어도 이번 환경에서는 그랬습니다.
Claude Code는 매번 동일하고 긴 서문(시스템 프롬프트와 도구 정의)을 보내며, 이는 프롬프트 캐시에 저장됩니다. 캐시가 차가운 첫 번째 실행은 쓰기 비용 때문에 비쌌고, Sonnet의 경우 $0.186이었으며, 두 번째 실행 이후의 중앙값은 $0.040이었습니다 (4.7배). 위의 표에 제시된 비용은 동일한 서문을 1시간 이내에 여러 번 사용하는 '따뜻해진' 상태에서의 값입니다. 가끔 한 번만 사용하는 방식에서는 표보다 비싸집니다.
이 실측 결과로부터 말할 수 있는 것은 다음 내용까지입니다.
명세(Specification)를 문서로 작성할 수 있는 작은 작업 (1~2개 파일, 테스트로 확인할 수 있는 경우)은 우선 Haiku 또는 Sonnet을 사용하세요. 성공률은 동일하며, 비용은 Opus의 1/20 ~ 1/2 수준입니다.
-
시간이 급하다면 Sonnet을 사용하세요. Haiku는 저렴하지만, 난이도가 높은 과제에서 시행착오가 늘어나 속도가 느려질 수 있습니다.
-
실패하면 모델을 상향 조정하세요. 상향 조정하는 판단은 '실패'라는 사실에 근거해야 합니다. 처음부터 더 높은 모델을 사용해야 할 근거는 이 정도 규모의 과제에서는 발견되지 않았습니다. 상위 모델을 무인으로 실행할 경우, 안전장치로 인해 중단되었을 때를 대비한 우회 경로(escape route)를 준비해야 합니다.
-
과제는 작고, 명세가 명확합니다. 대규모 리포지토리, 모호한 요청, 긴 작업, 설계 판단이 필요한 업무에서는 상위 모델 간의 차이가 나타날 가능성이 있습니다. 이번 과제에서는 그 차이를 측정할 수 없었다는 의미입니다.
-
횟수는 각 모델당 24회(과제별 4회)입니다. '실패 0'은 '이 횟수 내에서 실패가 발견되지 않았다'는 의미입니다.
-
클라우드 버전 Claude Code의 기본 도구 세트로 실행했습니다. 로컬 환경의 Claude Code와는 시스템 프롬프트 길이가 다르기 때문에, 비용의 절대값은 환경에 따라 달라집니다. 비율은 대체로 유지된다고 생각하지만, 확인하지는 않았습니다.
-
effort(노력)는 각 모델의 기본 설정 그대로입니다. 이를 높이면 비용과 시간은 증가하지만, 성공률은 (이미 100%이므로) 변하지 않을 것으로 예상됩니다.
-
안전장치 중단 값은 그 시점의 모델과 환경에 따른 값입니다. 변동될 수 있습니다.
모델에 전달할 지침(CLAUDE.md) 초안은 질문에 답하기만 하면 만들 수 있는 무료 도구로 제작 가능합니다: https://acerola-tools.acerola.workers.dev/?from=qiita-claude-code-model-cost-96runs
본 기사는 Zenn에도 게재되어 있습니다: https://zenn.dev/acerola_jp/articles/claude-code-model-cost-96runs