왜 지금 봐야 하나
2026년 6월 30일, Anthropic이 Claude Sonnet 5를 출시했다. 발표문에는 "drop-in upgrade"라는 표현이 있는데, 이 말을 그대로 믿으면 실수한다. Sonnet 5는 모델 ID 한 줄 바꿔도 대부분의 코드가 돌아가지만, 세 가지 파괴적 변경(breaking change)이 존재한다. 그리고 파괴적 변경을 피하더라도, 새 토크나이저가 같은 텍스트를 30% 더 많은 토큰으로 변환한다는 사실은 비용 계획과 max_tokens 설정 모두에 영향을 미친다.
API를 직접 다루는 엔지니어라면, 다음 세 질문에 먼저 답해야 한다.
- 지금
temperature/top_p/top_k를 기본값 아닌 값으로 설정하고 있는가? thinking: {type: "enabled", budget_tokens: N}방식을 쓰고 있는가?max_tokens를 예상 출력 길이에 딱 맞게 설정해 뒀는가?
셋 중 하나라도 "예"라면, 모델 ID를 바꾸는 순간 400 에러가 나거나 출력이 잘린다.
변화 한눈에 보기
| 항목 | Claude Sonnet 4.6 | Claude Sonnet 5 |
|---|---|---|
| 공개일 | — | 2026-06-30 |
| API 모델 ID | claude-sonnet-4-6 | claude-sonnet-5 |
| 컨텍스트 창 | 200K (최대 1M 별도 설정) | 1M (기본값이자 최대값) |
| 최대 출력 토큰 | 128K | 128K |
| 토크나이저 | 기존 | 신규 (동일 텍스트 ~30% 더 많은 토큰) |
| 적응형 사고(Adaptive Thinking) | thinking 필드 없으면 비활성 | 기본 활성. 끄려면 thinking: {type: "disabled"} |
| 수동 extended thinking | {type: "enabled", budget_tokens: N} 동작 | 400 에러 (지원 제거) |
| 샘플링 파라미터 | temperature / top_p / top_k 사용 가능 | 비기본값 설정 시 400 에러 |
| 사이버보안 가드레일 | 없음 | 있음 (stop_reason: "refusal") |
| Priority Tier | 지원 | 미지원 |
| 입출력 가격 | $3 / $15 per 1M | $3 / $15 per 1M (도입 기간: $2 / $10, ~2026-08-31) |
파괴적 변경 1: 샘플링 파라미터 제거
무엇이 달라졌나
Sonnet 5에서 temperature, top_p, top_k를 기본값 외의 값으로 설정하면 HTTP 400이 반환된다. 값을 생략하거나 기본값(각각 1.0, 1.0, 미설정)을 명시적으로 넣으면 문제없다. 오류 응답은 다음과 같은 형태다.
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "temperature is not supported on claude-sonnet-5"
}
}왜 이 결정을 내렸나
Anthropic은 이 제약을 Opus 4.7에서 먼저 도입했고, 이번에 Sonnet 계열로 확대했다. 이유는 적응형 사고 모델의 특성과 관련이 있다. 내부적으로 추론 단계를 동적으로 구성하는 모델에서 외부 샘플링 파라미터를 적용하면 예측 불가한 동작이 생길 수 있기 때문이다.
마이그레이션
temperature=0.7처럼 고정값을 쓰던 코드는 파라미터를 제거하고, 행동 지침을 시스템 프롬프트로 옮겨야 한다.- "항상 JSON으로 응답하라", "창의적 언어를 피하라" 같은 형식은 프롬프트 지침으로 대체 가능하다.
structured_outputs나output_config.format을 활용하면 형식 제어가 더 명확해진다.
파괴적 변경 2: 수동 Extended Thinking 제거
무엇이 달라졌나
# Sonnet 5에서 400 에러를 반환하는 코드
response = client.messages.create(
model="claude-sonnet-5",
thinking={"type": "enabled", "budget_tokens": 32000}, # 지원 제거
messages=[...]
)thinking: {type: "enabled", budget_tokens: N} 방식은 Sonnet 4.6에서 deprecation 경고가 붙었고, Sonnet 5에서 완전히 제거됐다. Opus 4.7, 4.8과 동일하다.
대체 방법: 적응형 사고
# 올바른 방법 — 적응형 사고 기본 활성 (별도 설정 불필요)
response = client.messages.create(
model="claude-sonnet-5",
messages=[...]
)
# 생각을 끄고 싶은 경우
response = client.messages.create(
model="claude-sonnet-5",
thinking={"type": "disabled"},
messages=[...]
)
# 노력 수준 조절 (effort 파라미터)
response = client.messages.create(
model="claude-sonnet-5",
thinking={"type": "adaptive", "effort": "high"},
messages=[...]
)적응형 사고는 모델이 문제의 복잡도를 스스로 판단해 추론 깊이를 조절한다. budget_tokens처럼 인간이 직접 토큰 예산을 지정하는 방식이 아니다.
max_tokens 재검토 필요
Sonnet 4.6에서 thinking을 쓰지 않던 코드가 Sonnet 5로 전환되면, 자동으로 추론 단계가 추가된다. max_tokens는 사고 토큰 + 응답 텍스트 토큰의 합에 적용되는 상한이다. 기존에 응답 텍스트 길이에 맞게 설정한 max_tokens 값이 너무 작으면 출력이 잘린다.
파괴적 변경 3: 새 토크나이저
30%가 의미하는 것
Sonnet 5는 새 토크나이저를 사용한다. 같은 텍스트를 처리할 때 Sonnet 4.6 대비 약 30% 더 많은 토큰을 생성한다. 이 비율은 콘텐츠 유형에 따라 달라진다. 코드나 영어 텍스트는 변화 폭이 다를 수 있다.
이것은 코드 변경이 필요 없지만, 측정과 비용 계획에는 영향을 미친다.
실전 측정 절차
- 기존 프롬프트 세트 20~50개를 선별한다.
- Token Counting API를
claude-sonnet-5로 호출해 토큰 수를 측정한다. - Sonnet 4.6 기준 대비 실제 증가 비율을 확인한다.
max_tokens설정을 조정하고, 월 비용 예산을 재계산한다.
새로운 기능
1M 토큰 컨텍스트 창 (기본값)
Sonnet 5는 1M 토큰이 기본값이자 최대값이다. 작은 창을 선택하는 별도 설정이 없다. Sonnet 4.6에서 200K가 기본이었다면, 이제 처음부터 1M 기준으로 컨텍스트 관리를 고민해야 한다. 단, 1M 토큰 창의 실제 텍스트 용량은 새 토크나이저 때문에 Sonnet 4.6의 1M 창보다 적다.
사이버보안 가드레일
Sonnet 5는 Sonnet 계열 최초로 실시간 사이버보안 가드레일이 적용됐다. 금지된 사이버보안 주제를 포함한 요청은 거부된다. 이때 반환 코드는 HTTP 200이다. 오류가 아니라 성공 응답으로 오되, stop_reason이 "refusal"로 설정된다.
response = client.messages.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "고위험 사이버보안 요청..."}]
)
# stop_reason 확인 필요
if response.stop_reason == "refusal":
# 가드레일에 걸린 경우 처리
handle_refusal(response)기존 코드에서 stop_reason == "end_turn" 여부만 확인하던 경우, "refusal" 처리를 추가해야 한다.
Priority Tier 미지원
Sonnet 5는 Priority Tier(우선 처리 서비스 티어)를 지원하지 않는다. 높은 처리량이나 낮은 지연시간이 필요한 워크로드에서 Priority Tier를 Sonnet 4.6으로 사용하던 경우, Sonnet 5로 이전할 때 대안을 검토해야 한다.
마이그레이션 체크리스트
Sonnet 4.6에서 Sonnet 5로 이전할 때 순서대로 확인한다.
1단계: 코드 수준 변경 확인
- [ ]
model = "claude-sonnet-4-6"→"claude-sonnet-5"교체 - [ ]
temperature/top_p/top_k파라미터 제거 또는 기본값으로 설정 - [ ]
thinking: {type: "enabled", budget_tokens: N}→thinking: {type: "adaptive"}또는 필드 제거 - [ ] 생각 기능이 필요 없는 경우
thinking: {type: "disabled"}추가 - [ ]
stop_reason == "refusal"처리 코드 추가
2단계: 토큰·비용 재측정
- [ ] Token Counting API로 주요 프롬프트 토큰 수 재측정
- [ ]
max_tokens여유 충분한지 검토 (특히 사고 토큰 추가 고려) - [ ] 월 비용 예산 재산정
3단계: 배포 전 검증
- [ ] Priority Tier 사용 여부 확인 (Sonnet 5 미지원)
- [ ] 사이버보안 관련 요청 존재 시 refusal 처리 테스트
- [ ] 스테이징 환경에서 실제 응답 품질 확인
한 줄 결론
Claude Sonnet 5는 코딩·에이전트 작업에서 능력이 올라간 모델이지만, 샘플링 파라미터 제거·extended thinking 삭제·새 토크나이저라는 세 변화를 확인하지 않고 모델 ID만 바꾸면 400 에러나 조용한 출력 절단이 기다리고 있다.
References
- Anthropic 공식 문서: Claude Sonnet 5의 새로운 기능: https://platform.claude.com/docs/en/about-claude/models/whats-new-sonnet-5
- Anthropic 뉴스 릴리스: https://www.anthropic.com/news/claude-sonnet-5
- Claude 모델 개요 (가격 및 스펙): https://platform.claude.com/docs/en/about-claude/models/overview
- Adaptive Thinking 문서: https://platform.claude.com/docs/en/build-with-claude/thinking-steering-and-cost
- Token Counting API 문서: https://platform.claude.com/docs/en/build-with-claude/token-counting
- TechCrunch 보도 (2026-06-30): https://techcrunch.com/2026/06/30/anthropic-launches-claude-sonnet-5-as-a-cheaper-way-to-run-agents/