Claude Code와 작업하다 보면 처음에는 순조롭다가도 어느 순간부터 결과가 흔들릴 때가 있습니다. 이미 정한 규칙을 다시 설명해야 하고, 요청하지 않은 파일까지 수정되거나, 완료됐다는 코드가 테스트에서 실패하기도 합니다.
이런 차이는 프롬프트 한 줄보다 작업을 운영하는 방식에서 생기는 경우가 많습니다. 관련 없는 일을 한 세션에 계속 쌓고, 오래된 프로젝트 지침을 방치하고, 검증 없이 결과를 받아들이면 코드 생성 속도는 빨라도 수정 비용은 커집니다.
결국 생산성을 높이는 핵심은 더 많은 코드를 한 번에 생성하는 것이 아닙니다. 필요한 맥락을 선명하게 유지하고, 계획을 검토하고, 결과를 증거로 확인하는 과정을 반복 가능하게 만드는 것입니다. Claude Code에 여러 파일을 수정하는 작업을 맡기면서 결과 품질이 들쭉날쭉하다고 느꼈다면, 세션 관리부터 기억 관리까지 이어지는 다섯 가지 습관을 점검해볼 수 있습니다.
TL;DR
한 세션에는 서로 관련된 하나의 작업 단위만 두고, 완료 조건을 명시합니다.
CLAUDE.md에는 모든 세션에 필요한 프로젝트 규칙만 남기고, 짧고 구체적으로 관리합니다.실행 전에는 수정 범위, 기존 패턴, 검증 방법, 되돌리기 어려운 리스크를 확인합니다.
완료 여부는 Claude의 설명이 아니라 테스트, 빌드, diff, CI 같은 증거로 판단합니다.
팀이 공유할 명시적 규칙은
CLAUDE.md, Claude가 작업 중 발견한 로컬 학습 내용은 Auto Memory에 둡니다.
1. 한 세션에는 하나의 작업 단위만 둔다
첫 번째 습관은 세션을 시간 단위가 아니라 서로 관련된 작업 단위로 나누는 것입니다. 하나의 목표 아래 여러 하위 작업을 진행할 수는 있지만, 로그인 버그를 고친 대화에서 컴포넌트 리팩터링과 배포 설정까지 이어서 요청하면 새 작업과 무관한 코드·로그·의사결정도 계속 컨텍스트에 남습니다.
이처럼 관련 없는 작업을 한 세션에 몰아넣는 방식은 Claude Code 공식 가이드에서도 대표적인 실패 패턴으로 다룹니다. 관련 없는 작업 사이에서는 /clear로 컨텍스트를 초기화하고, 하나의 복잡한 작업을 오래 이어가야 한다면 /compact로 앞선 대화를 요약하는 방식이 권장됩니다.
| 피해야 할 운영 | 권장하는 운영 |
|---|---|
| 한 세션에서 관련 없는 작업을 연달아 요청 | 세션마다 하나의 작업 단위와 완료 조건을 지정 |
| 컨텍스트 한계에 닿을 때까지 그대로 진행 | /context로 사용량을 확인하고 미리 정리 |
| 새 작업에도 이전 대화를 모두 유지 | 관련 없는 작업은 /clear 또는 새 세션에서 시작 |
| 아무 지시 없이 자동 컴팩션에만 의존 | 보존할 결정과 파일을 적어 /compact 실행 |
예를 들어 긴 구현을 이어가야 한다면 다음처럼 요약에 남길 내용을 직접 지정할 수 있습니다.
/compact 인증 흐름에서 확정한 인터페이스, 수정한 파일 목록, 남은 작업, 실행한 테스트와 결과를 보존해줘컨텍스트는 한계에 가까워진 뒤에만 확인할 필요가 없습니다. 작업이 길어지거나 주제가 갈라지기 시작할 때 /context를 열어 현재 작업에 필요하지 않은 정보가 얼마나 쌓였는지 점검하면 됩니다. 사용량만 보고 무조건 압축하기보다, 지금까지의 결정과 남은 작업을 그대로 설명할 수 있는지를 기준으로 /compact 실행 여부를 판단하는 편이 낫습니다.
2. CLAUDE.md를 살아 있는 프로젝트 설명서로 관리한다
두 번째 습관은 CLAUDE.md를 한 번 만들고 잊는 설정 파일이 아니라, 프로젝트와 함께 바뀌는 설명서로 다루는 것입니다. Claude Code는 현재 작업 디렉터리와 상위 경로의 CLAUDE.md를 세션 시작 시 읽으므로 빌드 명령어, 아키텍처 결정, 네이밍 규칙처럼 매번 알아야 하는 정보를 넣기에 적합합니다. 하위 디렉터리의 CLAUDE.md는 그 경로의 파일을 읽을 때 불러옵니다.
문제는 정보가 많을수록 지시를 더 잘 따르는 것은 아니라는 점입니다. 공식 문서는 CLAUDE.md를 200줄 미만으로 유지하는 것을 목표로 제시하며, 길고 충돌하는 지시는 컨텍스트를 더 사용하고 준수율을 낮출 수 있다고 설명합니다.
무엇을 남기고 무엇을 덜어낼까
CLAUDE.md를 처음부터 완벽하게 채울 필요는 없습니다. Claude가 같은 실수를 반복하거나 지난 세션과 같은 설명을 다시 입력하게 될 때, 필요한 규칙을 하나씩 추가하면 됩니다. 다만 특정 상황에만 필요한 정정까지 모두 넣으면 파일이 금방 비대해지므로, 모든 세션에 필요한 프로젝트 지침인지 먼저 구분해야 합니다.
남길 내용: 프로젝트 전용 빌드·테스트 명령어, 기본값과 다른 코드 스타일, 아키텍처 결정, 저장소 작업 규칙, 자주 놓치는 주의점
덜어낼 내용: 코드를 읽으면 알 수 있는 파일별 설명, 일반적인 언어 문법, 긴 튜토리얼, 특정 작업에서만 쓰는 절차, 자주 바뀌는 정보
간결함만큼 중요한 것은 최신성입니다. 모듈 위치, 패키지 매니저, 테스트 명령어가 바뀌었는데 예전 설명이 남아 있으면 Claude는 서로 다른 진실 사이에서 추측해야 합니다. 프로젝트의 규칙과 구조가 바뀔 때마다 CLAUDE.md도 함께 갱신해야 합니다.
# 명령어
- 의존성 설치: `pnpm install`
- 관련 테스트부터 실행: `pnpm test <path>`
- 작업을 완료하기 전에 `pnpm build` 실행
# 아키텍처
- 새로운 기본 UI 컴포넌트를 만들기 전에 `src/shared/ui`의 기존 컴포넌트 재사용
- API 핸들러는 `{ data, error, meta }` 형식으로 응답길어졌다면 로딩 범위를 나눈다
@path/to/file 형식으로 다른 파일을 불러오면 문서를 읽기 좋게 나눌 수는 있지만, 불러온 내용도 세션 시작 시 함께 로드되므로 컨텍스트 사용량은 줄지 않습니다. 컨텍스트를 실제로 아끼려면 특정 경로에서만 필요한 지침을 .claude/rules/의 경로 조건부 규칙으로 옮기거나, 특정 작업에서만 필요한 지식과 절차를 Skill로 분리해야 합니다.
또한 CLAUDE.md는 행동을 안내하는 컨텍스트이지 강제 설정이 아닙니다. any 타입 금지처럼 코드에서 기계적으로 찾을 수 있는 규칙은 린터나 타입 검사로 강제하고, 파일 편집이나 작업 종료 때 실행할 검사는 Hook으로 자동화하는 편이 안전합니다. CLAUDE.md에는 그 이유와 사용법을 적으면 됩니다.
3. 실행 전에 계획을 네 가지 질문으로 검토한다
세 번째 습관은 계획을 받자마자 실행하지 않고, 네 가지 질문으로 짧게 걸러보는 것입니다. 계획 검토의 목적은 완벽한 설계 문서를 만드는 데 있지 않습니다. 잘못된 방향으로 많은 파일을 수정하기 전에 범위와 검증 기준을 맞추는 데 있습니다.
여러 파일을 수정하거나 접근 방식이 불확실한 작업이라면 먼저 Plan Mode로 전환해 관련 코드를 탐색하고 계획을 요청합니다. 이때 수정할 범위와 검증 방법까지 답하게 하면 이어지는 체크리스트를 적용하기 쉽습니다.
인증 흐름을 먼저 조사한 뒤 구현 계획을 작성해줘.
수정할 파일과 바꾸지 않을 영역, 재사용할 기존 패턴,
실행할 테스트, 코드만 되돌려서는 복구하기 어려운 리스크를 포함해줘.
요청한 범위보다 많은 파일이나 기능을 건드리지는 않는가?
저장소에 이미 있는 컴포넌트·서비스·패턴을 재사용하는가?
구현 후 실행할 테스트와 확인 방법이 구체적으로 적혀 있는가?
코드만 되돌려서는 복구하기 어려운 리스크를 짚었는가?
수정 범위가 적절한가
좋은 계획은 바꿀 파일뿐 아니라 바꾸지 않을 영역도 보여줍니다. 버그 하나를 고치기 위해 관련 없는 공통 모듈까지 재설계하려 한다면 범위를 줄이거나, 리팩터링을 별도 세션으로 분리하는 편이 낫습니다.
기존 패턴을 따르는가
새로운 추상화는 그 자체로 비용입니다. 계획에 새 컴포넌트나 서비스가 등장했다면 저장소에 비슷한 역할을 하는 코드가 없는지, 기존 패턴을 확장할 수 없는지 먼저 확인해야 합니다. 프롬프트에 참고할 파일을 직접 지정하면 탐색 범위도 줄일 수 있습니다.
테스트 계획이 포함되어 있는가
계획에 “테스트를 돌린다”라고 적는 것만으로는 부족합니다. 어떤 명령을 실행하고, 어떤 입력과 경계 조건을 확인하며, 성공을 무엇으로 판단할지 계획에 적혀 있어야 합니다. 반복되는 검증 명령은 CLAUDE.md에 기록해 매번 실행하도록 안내하고, 실행 누락을 줄이려면 Stop Hook으로 자동화할 수 있습니다. 병합이나 배포를 막아야 하는 최종 기준은 CI에 두는 편이 안전합니다.
되돌리기 어려운 리스크를 인식하는가
여기서 되돌리기 어려운 작업이란 DB 마이그레이션, 공개 API 변경, 데이터 삭제, 권한 변경 등을 말합니다. 코드 한 줄을 되돌리는 것만으로는 복구되지 않을 수 있으므로, 구현 전에 백업·롤백·하위 호환 전략과 검증 순서를 확인해야 합니다.
작은 오탈자 수정까지 매번 긴 계획을 만들 필요는 없습니다. 여러 파일을 수정하거나 접근 방식이 불확실하거나 낯선 코드를 다루는 작업에서 이 체크리스트의 효과가 가장 큽니다.
4. 완료 판단을 검증 루프로 바꾼다
네 번째 습관은 코드 생성과 완료 판단 사이에 읽을 수 있는 증거를 두는 것입니다. Claude Code는 확인 수단이 없으면 결과가 그럴듯해 보이는 지점에서 멈출 수밖에 없습니다. 반대로 테스트 결과, 빌드 종료 코드, 스크린샷처럼 성공과 실패가 드러나는 신호를 주면 생성 → 검증 → 수정 루프를 스스로 이어갈 수 있습니다.
테스트와 빌드 결과를 확인한다
생성된 코드와 직접 관련된 테스트부터 실행하고, 실패 원인을 수정한 뒤 다시 실행합니다. UI 작업이라면 렌더링 결과나 스크린샷, API라면 대표 입력과 실패 응답처럼 실제 동작을 관찰할 방법도 함께 준비해야 합니다.
Claude가 “테스트를 통과했다”고 말하는 것보다 실행한 명령어와 결과를 남기게 하는 편이 좋습니다. 검증 가능한 출력은 사람이 같은 작업을 처음부터 반복하지 않고도 완료 여부를 빠르게 판단하게 해줍니다.
diff와 PR에서 예상 밖의 변경을 찾는다
테스트가 통과해도 요청하지 않은 변경까지 안전하다는 뜻은 아닙니다. PR이나 git diff에서 수정된 파일 범위를 계획과 대조하고, 특히 삭제된 코드와 설정, 의존성 변화, 테스트 제거를 살펴봐야 합니다.
한 줄씩 문체를 평가하기보다 “요구사항을 빠뜨렸는가?”, “범위 밖의 코드가 바뀌었는가?”, “기존 동작을 증명하던 검증이 사라졌는가?”처럼 실패 가능성이 큰 지점부터 보는 편이 효율적입니다.
실패를 재현 테스트로 고정한다
CI 실패나 운영 버그는 현재 변경을 고치는 데서 끝내지 않고, 같은 문제가 다시 발생하는지를 확인할 검증으로 남겨야 합니다. 기존 테스트가 놓친 입력이나 경계 조건을 먼저 재현하고, 수정 후 그 테스트가 통과하는지 확인합니다.
실패 로그만 보고 코드를 바꾸면 원인은 해결해도 회귀를 막을 증거가 남지 않습니다. 재현 가능한 실패를 테스트나 픽스처로 고정하면, 다음 변경에서도 기존 동작이 필요한 이유와 다시 깨졌는지를 함께 확인할 수 있습니다.
독립된 컨텍스트에서 한 번 더 리뷰한다
구현을 수행한 컨텍스트에는 선택의 이유와 시행착오가 함께 남아 있습니다. 별도 세션이나 새 컨텍스트의 서브 에이전트에 diff와 요구사항만 전달하면, 구현 과정을 정당화하는 맥락에서 떨어져 결과 자체를 다시 평가할 수 있습니다. Anthropic도 긴 작업이 끝난 뒤 새 컨텍스트의 서브 에이전트로 diff를 검토하는 적대적 리뷰 단계를 권장합니다.
새 컨텍스트의 서브 에이전트에서 현재 diff를 계획과 대조해 리뷰해줘.
요구사항 누락, 정확성 문제, 테스트되지 않은 경계 조건,
작업 범위를 벗어난 변경만 보고하고 스타일 취향은 제외해줘.리뷰어에게 무조건 문제를 찾으라고 하면 불필요한 추상화나 방어 코드가 늘어날 수 있습니다. 정확성이나 명시된 요구사항에 영향을 주는 문제만 보고하도록 범위를 제한하고, 각 지적도 코드와 재현 가능한 근거로 다시 확인해야 합니다.
5. 작업에서 얻은 교훈을 알맞은 곳에 남긴다
두 번째 습관이 작업 전에 제공할 프로젝트 지침을 관리하는 일이었다면, 마지막 습관은 작업 후에 발견한 교훈을 다음 세션에 남기는 일입니다. CLAUDE.md와 Auto Memory는 모두 다음 세션에 정보를 전달하지만, 작성 주체와 공유 범위, 적합한 내용이 다릅니다.
| 구분 | CLAUDE.md | Auto Memory |
|---|---|---|
| 작성 주체 | 사용자가 명시적으로 작성·관리 | Claude가 작업 중 유용하다고 판단한 내용을 기록 |
| 적합한 내용 | 코딩 규칙, 아키텍처, 빌드 명령어, 팀 워크플로 | 디버깅 단서, 발견한 패턴, 개인 선호, 작업 습관 |
| 공유 범위 | 프로젝트 파일을 Git에 커밋해 팀과 공유 가능 | 저장소별로 관리되지만 현재 머신에만 저장 |
| 로딩 방식 | 세션마다 로드 | MEMORY.md의 앞 200줄 또는 25KB 중 먼저 도달하는 범위까지 세션 시작 시 로드 |
| 관리 방법 | 코드처럼 리뷰하고 직접 갱신 | /memory로 열어 확인·수정·삭제 |
예를 들어 “이 프로젝트의 API 응답은 항상 { data, error, meta } 형태를 따른다”는 팀 규칙이라면 CLAUDE.md에 두는 편이 맞습니다. 반면 “이 저장소의 통합 테스트는 로컬 Redis가 실행 중일 때만 통과한다”처럼 작업 중 발견한 로컬 단서는 Auto Memory가 다음 세션을 위해 보관하기 적합합니다. 같은 사실이 팀원 모두에게 필요한 실행 전제라면 Auto Memory에만 두지 말고 CLAUDE.md나 프로젝트 문서로 옮겨야 합니다.
Claude에게 “기억해”라고 요청하면 Auto Memory에 저장할 수 있으며, Claude도 앞으로 유용하다고 판단한 학습 내용을 스스로 기록합니다. 저장 위치는 기본적으로 ~/.claude/projects/<project>/memory/이고, 같은 Git 저장소의 worktree끼리는 같은 메모리 디렉터리를 공유합니다. 다만 머신 로컬 자산이므로 Git이나 다른 컴퓨터, 클라우드 환경으로 자동 공유되지는 않습니다.
둘 중 어느 쪽도 절대적인 강제 장치는 아닙니다. 팀이 반드시 지켜야 하는 규칙은 CLAUDE.md에 명시하되, 위반을 기계적으로 찾을 수 있다면 린터·테스트·Hook·CI로 한 번 더 고정해야 합니다.
다섯 가지를 하나의 작업 루프로 연결하기
각 습관을 따로 적용하는 것보다 하나의 반복 가능한 흐름으로 연결하면 관리가 쉬워집니다.
세션을 시작할 때 목표, 범위, 완료 조건을 한 문장씩 적습니다.
구현 전 계획에서 기존 패턴, 테스트, 되돌리기 어려운 리스크를 확인합니다.
구현 후 테스트와 빌드를 실행하고 결과를 증거로 남깁니다.
diff와 독립 리뷰로 누락과 범위 밖 변경을 찾습니다.
반복된 교훈을 테스트, Hook,
CLAUDE.md, Auto Memory 중 알맞은 위치에 반영합니다.다음 작업이 관련 없다면
/clear하거나 새 세션을 시작합니다.
Claude Code의 생산성은 한 번에 생성한 코드의 양보다, 올바른 결과에 도달하기까지 필요한 수정 횟수와 검증 비용으로 판단하는 편이 정확합니다. 짧고 선명한 세션은 불필요한 맥락을 줄이고, 살아 있는 프로젝트 지침은 반복 설명을 줄이며, 구체적인 검증 루프는 그럴듯한 오답을 줄여줍니다.
처음부터 다섯 가지를 완벽하게 운영할 필요는 없습니다. 다음 세션에서는 먼저 작업의 목표와 완료 조건을 적고, 끝날 때 실행한 검증 결과를 확인해보세요. 그 두 가지만으로도 Claude에게 일을 맡기는 대화가 검증 가능한 개발 흐름으로 바뀌기 시작합니다.