Claude Code로 개발하다 보면 대화가 길어질수록 AI의 응답 품질이 떨어지는 걸 경험하죠. 처음에는 정교한 코드를 생성했지만 세션이 길어지자, 버그가 있는 코드를 만들기도 합니다. 이는 ‘컨텍스트 부패(Context Rot)’ 현상 때문인데요. 컨텍스트를 적절히 관리하지 않으면, LLM의 추론 능력이 떨어져 복잡한 리팩토링과 아키텍처 결정에서 실수가 발생할 수 있죠.
이 글에서는 Claude Code의 컨텍스트를 최적화하는 4가지 방법을 정리했는데요. CLAUDE.md 기반 프로젝트 정보 관리 방법과 간결하고 명확한 프롬프트 작성 원칙, 작업 분할과 세션 격리 전략, /context, /compact, /clear 등 Claude Code의 내장 명령어 활용법을 살펴보겠습니다.
컨텍스트 최적화 필요성
먼저 컨텍스트 최적화의 필요성을 다시 한번 짚겠습니다. 컨텍스트가 길어지면 LLM 성능이 저하되는데요. 대표적인 현상이 ‘컨텍스트 부패(Context Rot)’입니다. 이는 컨텍스트 윈도우의 토큰 수가 늘어나면, 해당 컨텍스트에서 정보를 정확하게 회상하는 모델 능력이 떨어지는 현상이죠. 모든 모델에 나타나는 특성입니다. 물론 LLM이 긴 컨텍스트에서도 좋은 성능을 발휘할 때도 있는데요. 그러나 Anthropic에 따르면, 정보 검색과 장거리 추론의 정밀도는 컨텍스트가 짧을 때보다 더 낮을 수 있습니다.
컨텍스트를 적정 수준으로 활용하면, LLM이 복잡한 리팩토링, 아키텍처 결정, 엣지 케이스와 관련해 더 나은 추론을 할 수 있죠. 1M Consulting의 Fractional CTO인 Robert Matsuoka는 Claude Code의 20만 토큰 컨텍스트 윈도우를 기준으로 분석했는데요. 컨텍스트 활용률 90%까지 실행하면 추론 여유 공간이 2만 토큰, 75%까지 실행하면 5만 토큰이 남습니다.
컨텍스트 활용률 75%에서 멈춘 세션에서는 총 출력량은 적지만, 품질이 더 높은 코드를 생성하고요. 반면에 컨텍스트를 90%까지 활용하면, 세션당 더 많은 코드를 생성하지만 품질은 낮죠. 이때 버그는 더 생기고, 아키텍처 결정의 일관성이 떨어지며, 이전의 프로젝트 특정 패턴을 잊어버릴 수 있습니다.
컨텍스트 최적화 방법
이제 Claude Code의 컨텍스트를 효과적으로 관리하는 4가지 실전 방법을 알아보겠습니다.
1. CLAUDE.md로 프로젝트 정보 관리
컨텍스트 파일인 CLAUDE.md에 프로젝트 기본 정보를 충실히 담아야 합니다. CLAUDE.md는 Claude Code가 세션을 시작할 때, 자동으로 읽는 프로젝트의 지속적 메모리이자 지시 세트인데요. 여기에는 핵심 애플리케이션 기능, 기술 스택, 숙지해야 할 프로젝트 노트 등 기본 요구사항을 담죠. 이로써 모든 코드를 로드하지 않아도 코드베이스 정보를 컨텍스트에 로드할 수 있습니다.
CLAUDE.md에는 프로젝트 특정 코딩 컨벤션, 아키텍처 패턴, 선호하는 라이브러리와 프레임워크, 코딩 표준, 일반적인 워크플로, 프로젝트 특정 제약 조건과 요구사항을 포함해야 합니다. CLAUDE.md를 포괄적으로 구성하면, 대화마다 일일이 설명하지 않아도 Claude Code가 프로젝트의 개발 철학과 기술 요구사항을 이해할 수 있죠.
Comet API에 따르면, CLAUDE.md는 간결하고, 계층적으로 유지하는 게 좋습니다. 개발자 환경 설정에 는 하나의 전역 파일을 사용하고, 영역별 세부 사항에는 작은 모듈 파일을 사용하는 걸 권장하고요. 거대한 모놀리식 CLAUDE.md는 피해야 합니다.
2. 간결하고 명확한 프롬프트 작성
프롬프트로 희망/예상 동작을 최소한의 정보로 충분히 설명해야 합니다. 최근 LLM 성능이 강력해지면서 정확한 프롬프트 포맷팅의 중요성은 낮아지고 있는데요. Anthropic은 “사용할 수 있는 최고의 모델로 최소한의 프롬프트를 테스트해 ‘작업에서 어떻게 수행되는지’ 확인한 다음, 초기 테스트 중 발견한 실패 모드를 기반으로 성능 개선을 위해 명확한 지시와 예제를 추가하라”고 권장합니다. 다만, “최소한=반드시 짧다”는 뜻은 아니고요.
“LLM에게 예제는 천 마디 말의 가치가 있는 그림”이라고 하죠. Anthropic에 따르면, AI의 예상 동작을 효과적으로 설명하는 다양하고 표준적인 예제 세트를 큐레이션 하는 게 좋고요. 단, 특정 작업과 관련해 LLM이 따라야 할 모든 규칙을 설명하려 엣지 케이스 목록을 프롬프트에 포함하는 건 권장하지 않습니다.
직접적이고 군더더기 없는 프롬프트는 미덕으로 꼽히는데요. 시스템 관리자이자 클라우드 보안 전문가인 Lalatendu Keshari Swain에 따르면, 프롬프트에서는 장황하게 말하는 대신 목표를 먼저 명시해야 합니다. 또 목표, 제약 조건, 구체적인 사항 등 중요한 것만 포함하고요. 작업에 직접 영향을 미치지 않는 한 배경 설명은 생략하는 게 좋습니다.
3. 작업 분할과 세션 격리
복잡한 문제를 작은 작업으로 나누는 것도 중요합니다. 한 번에 하나의 작업을 처리한 다음, 후속 작업을 진행하는 건데요. 예를 들어, 이번에는 인증, 다음에는 CRUD 작업을 수행하는 거죠. 이렇게 하면 각 작업의 컨텍스트 사용량을 최소화하는 데 도움이 됩니다.
Lalatendu Keshari Swain에 따르면, 다음 세 단계로 상호작용 흐름을 구성할 수 있는데요. 첫째, 작업을 단계별로 모듈화합니다. 둘째, 각 단계의 출력을 테스트해 검증하고요. 셋째, /clear 명령어를 사용해 단계 간 격리합니다. 다음 단계로 넘어가기 전에 각 단계의 출력을 검증하면 오류가 누적되는 문제를 방지할 수 있죠.
작업을 완료하거나 중단하면, 새 세션을 시작하는 걸 권장합니다. 예를 들어, 로그인 기능을 완료했을 때, 다른 작업으로 넘어가기 전, 코드를 커밋한 후, 프론트엔드에서 백엔드 작업으로 전환할 때 세션을 새로 시작하면 좋죠. 이는 대화 이력이 축적돼 컨텍스트가 비대해지는 걸 예방하고요. 토큰이 현재 관련된 작업에만 사용되도록 유도할 수 있습니다.