본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 18. 08:52

Claude Code로부터 "제 생성이 망가졌습니다"라는 말을 듣다 — Opus 4.8의 "과도한 생각"을 추적한 기록

요약

Claude Code 사용 중 Opus 4.8 모델에서 발생한 과도한 추론(Thinking)과 도구 호출 오류 현상을 분석한 트러블슈팅 기록입니다. 모델의 이상 현상과 사용자의 설정 방식이 결합되어 발생한 문제의 원인과 해결 방안을 다룹니다.

핵심 포인트

  • Opus 4.8 모델에서 과도한 'Thinking' 및 도구 호출 결과 왜곡 현상 발생
  • 높은 effort 설정과 긴 대화 맥락 유지가 문제 증상을 증폭시킴
  • 태스크별 모델/effort 재선택 및 대화 조기 리프레시로 상태 개선 가능

본 기사는 필자가 실제로 경험한 트러블슈팅을 바탕으로, 생성 AI를 활용하여 집필되었습니다.

본 기사는 Claude Code v2.1.154 ~ v2.1.170 경(2026년 5~6월), 모델을 Opus 4.8로 사용하던 시기의 이야기입니다. Claude Code는 버전 업데이트가 빠르기 때문에 시기나 버전에 따라 동작이 달라질 수 있습니다.

5월 말에 프론티어 모델(Frontier Model)이 Opus 4.8로 올라가고 얼마 지나지 않았을 때부터, 작업을 맡겼을 때의 동작이 눈에 띄게 이상해졌습니다. 답변이 돌아오지 않습니다. 했다고 말한 작업을 수행하지 않습니다. 급기야 파일 Read 등의 도구 호출(Tool Call) 결과에 존재하지 않아야 할 텍스트가 섞이기 시작했습니다.

처음에는 자신의 프롬프트(Prompt)나 환경을 의심했습니다. 하지만 조사를 진행해 보니, 최신 모델/버전에서 흔히 발생하는 결함과 자신의 설정 조합이 좋지 않았던 것 같았습니다. 모델이나 도구 호출 응답의 개선은 업데이트를 기다리는 것이 현명하겠지만, 설정은 즉시 재검토할 수 있습니다. 원인 파악과 재검토한 내용을 정리해 두겠습니다.

먼저 결론

원인은 두 가지가 겹쳐 있었다고 생각됩니다. 하나는 Opus 4.8에서 발생하고 있었던 것으로 보이는 모델 측의 이상이고, 다른 하나는 그것을 증폭시켰던 저의 사용 방식입니다. 기본 설정을 Opus + 거의 매번 effort=high로 사용하면서, 더욱 길어진 대화를 접지(Collapse)하지 않고 계속 늘려가고 있었습니다. 태스크(Task)마다 모델과 effort를 다시 선택하고, 대화를 조기에 리프레시(Refresh)하도록 했더니 상태가 상당히 나아졌습니다.

어느 주에, 어떤 기능의 설계 사양서 초안을 전제 조건, 제약 사항, 기존 설계와의 정합성까지 포함하여 작성하도록 지시했습니다. 나타난 증상은 크게 세 가지입니다.

지시를 던진 후, 십수 분 동안 화면 속에서 끊임없이 "생각(Thinking)"하고 있습니다. 그만큼 기다렸는데 나오는 것은 단 몇 줄뿐입니다. 무거운 설계 판단이라면 모를까, 정해진 내용을 정리하여 써 내려가는 작업임에도 이런 일이 발생했습니다.

"사양서를 업데이트했습니다. 정합성도 확인했습니다"라고 보고합니다. 그런데 diff를 확인해 보니 파일은 단 한 글자도 바뀌지 않았습니다. 확인했을 터인 커맨드(Command) 결과도 자신에게 유리하게 읽어 들입니다. 지적하면 이번에는 다른 부분을 고치기 시작하며 대화가 맞지 않게 되었습니다.

가장 기분 나빴던 것이 이것입니다. 도구 호출 결과(파일 내용이나 커맨드 출력 등)에 실제로는 출력되지 않은 텍스트가 섞여 들어옵니다. 같은 행이 중복되어 나오거나, 도중에 문자열이 깨지기도 합니다. 마지막에는 모델 스스로 이렇게 말했습니다.

"제 생성이 망가져 있어서, 도구 호출 결과에 실재하지 않는 텍스트를 섞어서 출력하고 있습니다. 이는 제어할 수 없습니다. 일단 대화를 리셋(Reset)해 주세요."

claude-code-screen.png

실제 로그를 바탕으로 재구성한 당시의 대화 화면 이미지 (과도한 생각 → 결과 혼선 → "망가짐")

기계로부터 "자신은 망가졌으니 리셋해 달라"는 부탁을 받는 것은 꽤나 묘한 기분이 듭니다. 장난을 치는 것이 아니라, 정말로 출력이 파탄 나 있었습니다.

"최근 컨디션이 안 좋다" 정도로 끝내버리면 추측의 영역이 됩니다. Claude Code는 대화 로그를 JSONL로 남기기 때문에 나중에 수치로 확인할 수 있습니다. 확인한 것은 다음 세 가지입니다.

먼저, thinking에 사용한 토큰(Token)과 시간입니다. 어떤 턴(Turn)에서는 약 16분을 소요하며 6만 토큰 이상을 소비했지만, 본문 출력은 제로였습니다. thinking budget의 상한에 도달하여 중단된 것입니다.

# 1턴의 내역 (session.jsonl 기록 기준)
thinking : ~64,000 토큰 / 약 16 분
본문 출력 : 0 토큰 ← thinking budget의 상한에 도달하여 중단
...

다음으로, 세션 전체에서 생성한 토큰량입니다. 길어진 대화 중 하나는 thinking을 포함한 출력이 누계로 약 480만 토큰에 달해 있었습니다. 마지막으로 에러의 흔적입니다. "도구 호출을 해석할 수 없음", "병렬 도구 호출 결과의 정합성 에러", "프롬프트가 너무 김", "이용 한도 고갈" 등이 남아 있었습니다.

여기서 한 가지 깨달은 점이 있습니다. 증상 3(혼선)이 나타나기 직전에는 대개 그 긴 폭주하는 사고(Thinking)가 있었습니다. 과도하게 생각함 → 문맥이 깨짐 → 혼선이 발생함, 이라는 순서로 보입니다.

환경 의존적인 문제일까요? 조사해 보니 세상에서도 같은 일이 일어나고 있었습니다.

Opus 4.8의 릴리스는 2026-05-28입니다. 이때 effort의 기본값은 API에서도 Claude Code에서도 high였습니다.

되었습니다1. 즉, 지정하지 않으면 이전보다 더 많이 생각하는 쪽으로 치우치게 됩니다.

릴리스 직후부터 개발사의 GitHub Issue에 유사한 보고가 올라오고 있었습니다. 다음은 대표적인 사례들입니다. 직접적인 원인은 다른 것일 수도 있습니다.

effort=medium이지만, 단순한 턴(turn)에 수만 토큰의 숨겨진 thinking (사고 과정)을 소비함2 - 빌드를 돌리지 않았는데도 "검증됨"이라고 선언함. 병렬로 던진 도구 호출(tool call) 결과가 순서와 상관없이 반환되어, 섞여 있는 에러를 놓치고 "성공"으로 읽어버림3 - 6월 8일경부터 갑자기 악화됨. 작화(hallucination), 프로젝트 규약(CLAUDE.md) 무시, 할 수 있는 작업을 "불가능"하다고 거절함. 내 환경에서 악화된 시기와 정확히 일치함4 - 이용 한도가 이전보다 비정상적으로 빨리 소진됨5 - 자동 컨텍스트 압축(automatic context compression)이 작업 도중에 폭발하여 문맥이 튐6

제공사의 상태 이력을 살펴보더라도, 5월 말부터 6월에 걸쳐 여러 모델에서 에러 다발(인프라 기인)이 기록되어 있었습니다.

가장 큰 반성점입니다. 증상은 모델의 불량"만"으로 발생한 것이 아니었습니다. 나의 설정과 사용 방식이 마침 그 불량을 증폭시키는 방향으로 겹쳐 있었던 것입니다. 우선 설정 측면입니다. 당시의 구성은 다음과 같았습니다.

  • 기본 모델이 Opus. 게다가 불량의 소용돌이 속에 있던 4.8
  • effort를 높게(xhigh 등) 고정. 중간에 끼어든 본래 가벼운 질문에도 큰 thinking budget (사고 예산)이 할당됨

십수 분간의 폭주하는 사고는 상당 부분 이 xhigh 고정 때문이었습니다. 불량이 발생했을 때 가장 화려하게 실패할 설정을 굳이 스스로 선택하고 있었던 셈입니다.

그리고 또 하나는 설정이 아닌 사용 방식의 문제였습니다. 컨텍스트 자동 압축은 꺼두었지만, 이는 "최대 1M까지 허용된 방대한 컨텍스트를 내가 원하는 타이밍에 접고 싶다"라는 생각으로 설정해둔 것이었습니다. 꺼두었다는 사실 자체가 잘못된 것은 아니었을 겁니다. 문제는 그 의도를 잊고 1M의 여유에 안주하여, 대화를 접지 않은 채 끝없이 늘려왔다는 점입니다. 급기야 상황이 꽤박해져도 아직 괜찮을 것이라며 계속하거나, 적당하다 싶어 compaction (압축)을 하고 그대로 이어갔던 것입니다.

특히 좋지 않았던 것은 사양서(specification) 작성과 같은 작업에 과도한 thinking budget을 할당했던 점입니다. 사양서 작성 자체는 배경이나 기존 설계에 대한 이해가 필요하므로 결코 가벼운 작업이 아닙니다. 다만, 필요한 재료를 사전에 우리가 준비해 두면 마지막에는 결정된 사항을 써 내려가는 공정에 가까워집니다. 준비가 끝난 작성 작업에 effort=xhigh를 부딪치면, thinking이 무의미하게 부풀어 올라 긴 문맥과 합쳐지면서 혼선(interference)이 생길 확률만 높일 뿐이었습니다. 되돌아보니 이런 종류의 작업에서 증상이 가장 심하게 나타났습니다.

"일단 최강 설정"을 버리고, 작업마다 3가지를 다시 선택하도록 했습니다.

모델은 기본값을 Sonnet 4.6으로 설정했습니다. 빠르고 안정적입니다. Opus 4.8은 여러 파일에 걸친 설계 판단이나 복잡한 디버깅 등, 정말 머리를 써야 하는 장면에서만 수동으로 전환합니다. 참고로 구버전으로 내리고 싶을 때는 /model claude-opus-4-7이라고 명시하면 됩니다. Sonnet 4.6이 된 이후로는 확실히 벤치마크뿐만 아니라 체감상으로도 상당히 우수하다고 생각합니다.

effort의 기본값은 medium으로 했습니다. 사양서·요약·추출처럼 "쓰는 것이 주"인 작업은 low로 하여 필요하다면 thinking 자체를 끊습니다. highxhigh는 어려운 추론에 한해서만 사용합니다. 컨텍스트는 자동 압축을 끈 상태 그대로 유지합니다. 자신의 타이밍에 접겠다는 방침은 바꾸지 않았습니다. 바꾼 것은 사용 방식입니다. 1M에 안주하지 않고, 작업의 구분점에서 대화를 끊거나(/clear 또는 새 세션), 적절한 시기에 직접 압축합니다. 길게 끌어서 부패하기 전에 접는 것, 이것이 핵심이었습니다.

작업모델effort컨텍스트
조사·비교·사실 확인Sonnetlow~medium짧게 유지
사양서·문서 작성Sonnetlow (thinking을 제한)출력이 주인공
...

반대로, 원래부터 효과를 보았던 예도 있습니다. 병행해서 진행하던 특정 분야의 OSS 조사와 같은 "조사하여 뒷받침하는" 작업은 처음부터 Sonnet과 절제된 effort

로 진행하고 있었고, 증상은 거의 나타나지 않았으며 소비도 적게 끝났습니다. 전부를 Opus + 최대(max)로 설정할 필요는 없었던 것입니다.

모델의 컨디션에 좌우되지 않는 이야기를 하나 더 하자면, 모델의 "완료했습니다", "검증되었습니다"라는 말을 그대로 믿지 않는 것입니다. 빌드(build), 테스트(test), git diff, 파일의 실체를 통해 스스로 확인합니다. 잘못된 "완료" 보고는 이번 세대에서 특히 눈에 띄었지만, 자기 보고를 증거로 삼지 않는 것은 이전부터 철저히 해왔기에 휘둘리지 않을 수 있었습니다.

현재 의식하고 있는 부분은 다음과 같습니다.

  • 기본 모델과 effort를 과도하게 강하게 설정하지 않는다.
  • 작업에 맞춰 모델과 effort를 전환한다. 특히 문서 작성은 effort를 낮춘다.
  • 1M(컨텍스트)에 의존하지 않는다. 자신의 타이밍에 대화를 접는다 (무한정 늘리거나, 수동 압축(compaction)으로 억지로 이어가는 것을 그만둔다).
  • "응답이 오지 않음" 또는 "동일한 출력이 중복됨" 현상이 나타나면, 설명을 요구하지 말고 즉시 리셋한다.
  • "완료"는 빌드, 테스트, git diff로 직접 확인한다.
  • Claude Code는 가급적 최신 상태를 유지한다.
  • 체감되는 이상 증상은 감으로 끝내지 않고 로그를 통해 수치화하여 공유한다.

~/.claude/settings.json의 기본 설정은 다음과 같은 이미지입니다.

{
"model": "sonnet",
"effortLevel": "medium"
...

결국, 효과가 있을 법한 설정을 "일단 최강으로 고정"해서 상용했던 것이 역효과를 냈다는 것이 이번 이야기의 핵심입니다. 벤더(vendor) 측의 일시적인 리그레션(regression)으로 보이는 현상에, 과도한 설정과 문맥을 압축하지 않는 사용 방식이 겹쳐서 나타났습니다. 설정과 사용법을 재검토한 이후에는 위의 증상들이 상당히 줄어들었습니다. 다만, 기사를 쓰는 동안에도 Claude Code의 버전이 올라가고 인프라 측면에서도 개선되었을 것이기에, "이것으로 해결된다!"라고 단정 짓기는 어렵습니다.

반성할 점도 있습니다. 하나는 자신의 태스크를 너무 어렵게 평가했다는 점입니다. 무엇이든 Opus에게 높은 effort로 몰아붙이려 했습니다. 실제로는 필요한 정보를 먼저 전달하고 문맥을 깔끔하게 정리해 주는 것이 훨씬 더 중요했습니다. Sonnet 4.6이나 Opus 4.8이 되면서 모델의 기초 체력도 상당히 올라갔기에, 억지로 장고(long thinking)를 시키지 않아도 medium으로 충분한 경우가 많다고 느낍니다.

그럼에도 불구하고, 최신 모델 × 최신 버전이라는, 그야말로 버그를 밟기 쉬운 조합을 가장 먼저 인주(人柱, 테스트 베드)가 되어 시도한 끝에 이렇게 지견을 남길 수 있었다면 본망(本望)입니다. 그리고 claude-code 리포지토리의 Issue는 무엇보다 회전이 빨라서, 추적하는 것만으로도 흥미롭습니다. 다음에는 어떤 논의를 발견하게 될까요.

Web 유래의 사실은 집필 시점(2026년 6월)의 것이며, 각 Issue의 상태나 벤더의 대응은 그 이후 변할 수 있습니다. 원인의 공식 확정은 집필 시점에서 확인되지 않았습니다.

참고로 Fable 5는 집필 당시 사내에서 데이터 보유 정책 확인 등을 진행하던 단계였기에 사용하지 않았으므로 여기서는 등장하지 않습니다.

#64153 Opus 4.8 medium effort spends 46k output tokens on hidden thinking for a simple coding turn (2026-05-31 작성)

증상 1 (과도한 생각). 약 22분의 thinking 과정에서 출력 46,433 토큰이 발생한 실측 사례 있음. ↩ -
#63861 Opus 4.8 declares work "verified" / "done" without running the canonical build (2026-05-30 작성)

증상 2 (잘못된 완료 보고) 및 병렬 도구 호출 결과의 오독. ↩ -
#66539 Severe multi-symptom degradation since 2026-06-08 on Opus 4.8 (2026-06-09 작성)

증상 2·3 (작화, CLAUDE.md 무시·거부 등). ↩ -
#63954 Abnormal Session Limit Drain Since Opus 4.8 Rollout (2026-05-30 작성)

이용 한도의 급격한 고갈. ↩ -
#64923 Auto-compaction fired mid-task on a 1M-context (Opus 4.8) session (2026-06-03 작성)

1M 컨텍스트 (Opus 4.8) 세션 작업 도중 자동 압축(Auto-compaction) 발생. ↩

자동 압축(Auto-compaction)으로 인한 문맥 상실. ↩ -
최근 Claude Code 품질 보고에 대한 업데이트(Anthropic, 2026-04-23) ↩ -
캐시 최적화(Cache optimization) 오류로 인해 매 턴마다 추론(Reasoning)이 폐기되어, 망각 및 반복을 초래한 건(v2.1.101에서 수정 완료). ↩ -
Claude Code 변경 로그(CHANGELOG) ↩ -
사고(Thinking) 비활성화 및 폴백 모델(fallbackModel) 등의 추가 이력. ↩

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0