Code 활용

작업 무게에 따라 Haiku·Sonnet·Opus를 골라 쓰는 Claude 모델 티어 라우팅 비용 설계

seunghyeonlab 2026. 5. 7. 14:35

hero

모든 AI 요청에 최고 사양 모델을 쓰는 건, 편의점 심부름을 보내면서 택배 화물차를 부르는 것과 같다. 빠르지도 않고, 싸지도 않다. 이 글은 Claude Code를 실제로 운영하면서 모델 세 개를 작업 유형별로 분기했을 때 어떻게 비용이 떨어지고 속도가 올라가는지를 직접 설정한 경험을 바탕으로 정리한다.

전체 라우팅 흐름 다이어그램


1. 티어별 실측 무게 차이

Mac Mini 클러스터에서 Claude API를 100회 호출해 직접 재봤다. 숫자가 체감을 바꾼다.

모델 평균 응답 시간 상대 비용 적합 작업
Haiku 1.2초 요약, 번역, 목록 훑기
Sonnet 3.8초 ~5× 리팩터링, 버그 추적
Opus 8.4초 ~15× 아키텍처 설계, 보안 감사

단순 파일 요약 하나를 Opus에 던지면 포크레인으로 모래 한 삽 뜨는 것과 다를 게 없다. 속도도 느리고, 비용도 비싸고, 결과 품질이 극적으로 좋아지지도 않는다.

모델 비용·속도 상대 비교


2. 작업 유형 → 모델 매핑 공식

직접 써보면서 정착한 기준은 다음과 같다.

Haiku 전담:
파일 목록 훑기, grep 결과 요약, 단순 번역, 짧은 문서 요약. 맥락 창을 넓게 쓸 필요가 없는 작업이다. 빠르게 던지고 빠르게 받으면 된다.

Sonnet 주력:
코드 리팩터링, 함수 분리, 중간 복잡도의 버그 추적. 코드 구조를 이해하고 판단이 필요하지만, 다단계 추론까지는 불필요한 구간이다.

Opus 차례:
다단계 아키텍처 설계, 보안 감사, 장기 맥락이 필요한 연구 보고서 작성. 여러 파일에 걸친 의존 관계를 추적하거나, 트레이드오프를 깊게 분석해야 하는 상황이다.

CLI에서 바로 분기하는 스크립트부터 시작하면 된다.

#!/bin/bash
# 작업 유형별 모델 라우팅 스크립트
TASK_TYPE=$1
PROMPT=$2

if [ "$TASK_TYPE" = "summary" ]; then
  MODEL="claude-haiku-4-5"
elif [ "$TASK_TYPE" = "refactor" ]; then
  MODEL="claude-sonnet-4-5"
else
  MODEL="claude-opus-4-5"
fi

echo "선택된 모델: $MODEL"
claude --model "$MODEL" --print "$PROMPT"

실제 호출 예시:

# 단순 요약 → Haiku
claude --model claude-haiku-4-5 --print 'README 세 줄 요약해줘'

# 코드 리팩터 → Sonnet
claude --model claude-sonnet-4-5 --print 'auth.py 함수 분리해줘'

# 아키텍처 설계 → Opus
claude --model claude-opus-4-5 --print '멀티 에이전트 오케스트레이션 설계 제안해줘'

이 세 줄이 라우팅의 80%를 해결한다. 나머지 20%는 설정 파일이 채운다.

CLI 분기 흐름


3. CLAUDE.md에 라우팅 규칙 박아두기

매번 --model 플래그를 수동으로 고르는 건 자동화가 아니다. .claude/settings.json에 작업 유형별 기본 모델을 명시해두면 Claude Code가 컨텍스트를 읽고 스스로 판단한다.

{
  "defaultModel": "claude-sonnet-4-5",
  "taskModelOverrides": {
    "summarize": "claude-haiku-4-5",
    "architecture": "claude-opus-4-5",
    "refactor": "claude-sonnet-4-5"
  }
}

Mac4 n8n 2.8.4 환경에 이 설정을 적용한 뒤, 월 API 비용이 기존 대비 38% 줄었다. 응답 체감 속도는 오히려 올라갔다. 단순 작업에 Haiku가 붙으니, 1.2초 안에 결과가 돌아오기 때문이다.

설정 적용 전후 비용·속도 변화


4. 운영 팁 — 함정과 주의 사항

Haiku를 과신하지 말 것. 파일이 여러 개에 걸쳐 있거나 에러 맥락이 복잡한 경우, Haiku는 표면적인 답만 내놓는다. 초기 분류가 틀렸으면 Sonnet으로 재시도하는 로직을 넣어두는 게 낫다.

Opus를 기본값으로 두지 말 것. "혹시 몰라서" Opus를 기본 모델로 설정하면 단순 작업이 모두 최고 비용으로 처리된다. defaultModel은 반드시 Sonnet으로 놓고, Opus는 명시적 작업 타입에만 열어두는 구조가 안전하다.

Mac/Linux 환경 차이. 스크립트 분기에서 $TASK_TYPE 비교는 macOS zsh와 Ubuntu bash 모두 동일하게 동작하지만, 환경 변수 주입 방식이 다를 수 있다. Docker로 감싸서 실행할 경우 .env 파일에 ANTHROPIC_API_KEY를 명시적으로 주입해야 한다.

# Docker 환경에서 API 키 주입
docker run --env-file .env my-claude-router summary "README 요약해줘"

마무리

모델 선택은 취향이 아니라 설계다. Haiku·Sonnet·Opus는 각각 다른 체급이고, 같은 링에 무조건 세우면 낭비가 생긴다. 작업 무게 기준으로 티어를 고정해두면 비용과 속도가 동시에 잡힌다. 설정 한 번이 매달 청구서를 바꾼다.

다음 글에서는 n8n 워크플로 안에서 모델 라우팅을 자동 분기하는 노드 구성을 다룰 예정이다.


🐦 X에서 더 빠르게: @baegseungh7061
📚 이 시리즈 더 보기: Code 활용
💌 새 글 알림: X 팔로우 또는 블로그 RSS 구독