메인 콘텐츠로 건너뛰기

Claude Code 활용 베스트 프랙티스 정리

요약

클립으로 정리됨 (생성형 AI 활용)

출처 및 참고 : https://www.anthropic.com/engineering/claude-code-best-practices

핵심 요약

Claude Code는 "터미널에서 동작하는, 매우 유연한 에이전틱 코딩 도구"입니다. 강점은 자동 컨텍스트 수집, bash·MCP·GitHub 등 도구 결합, 그리고 반복·계획 중심 워크플로우입니다. 핵심은 환경(설정·CLAUDE.md·도구 권한)을 잘 튜닝하고, 작업마다 계획→실행→검증 구조를 일관되게 적용하는 것입니다.

Claude Code의 역할과 설계 철학

Claude Code는 IDE 플러그인이 아니라, CLI에서 돌아가는 "코딩 에이전트 런타임"에 가깝습니다. 즉, 모델에게 바로 프롬프트를 던지는 대신, 파일 시스템·bash·Git·MCP 서버 등을 한데 묶어 "도구가 달린 Claude"를 구동하는 느낌입니다.

설계 철학은 크게 두 가지입니다. 첫째, 가능한 한 저수준·비의견적입니다. 특정 워크플로우를 강제하지 않고, "원시 모델 + 도구"에 가까운 형태로 제공해 사용자가 자신의 방식으로 스크립트화·자동화할 수 있습니다. 둘째, 보수적 안전성입니다. 파일 수정, bash 실행 등 시스템에 영향을 줄 수 있는 작업은 기본적으로 모두 권한 승인을 요청하며, 사용자가 명시적으로 허용해야 합니다.

이 철학 때문에 처음엔 러닝 커브가 느껴질 수 있지만, 한 번 본인/팀의 패턴을 잡아두면 강력한 "코딩 동반자 + 자동화 엔진"이 됩니다.

CLAUDE.md로 환경과 컨텍스트를 설계하기

Claude Code의 컨텍스트 수집의 중심은 CLAUDE.md입니다. 이 파일은 "이 프로젝트에서 Claude가 항상 알고 있어야 할 것"을 적어두는 메모이자, 일종의 시스템 프롬프트입니다.

여기에 넣기 좋은 내용은 반복해서 설명하기 귀찮은 것들입니다. 예를 들어 프로젝트별 자주 쓰는 명령, 코드 스타일 규칙, 테스트 방법, 브랜치 전략, 개발 환경 특이사항 등이 여기에 들어갑니다.

# Bash commands
- npm run build: Build the project
- npm run typecheck: Run the typechecker

# Code style
- Use ES modules (import/export) syntax, not CommonJS
- Destructure imports when possible

# Workflow
- Typecheck when done with a series of changes
- Prefer single tests over full test suite for speed

CLAUDE.md는 여러 계층에 둘 수 있습니다. 레포 루트, 하위 디렉터리별, 상위 디렉터리(모노레포 구성), 홈 디렉터리(~/.claude/CLAUDE.md) 등에 두면, Claude가 상황에 맞게 자동으로 합쳐서 읽습니다.

중요한 점은 "한번 써두고 끝내지 말고" 지속적으로 다듬는 것입니다. 작업하다가 Claude에게 반복해서 설명한 내용이 생기면 # 키로 바로 지시를 추가해 CLAUDE.md에 반영하게 하고, 주기적으로 이 파일을 검토해 불필요한 내용은 줄이고 중요한 지침에는 "중요", "반드시 지켜야 함" 같은 표현을 붙여 모델의 준수율을 올립니다.

이 파일은 팀과 공유할 수 있으니, 사실상 "인간 + Claude 공용 개발 규칙서"로 운영하는 것이 좋습니다.

도구 권한과 확장: permissions, bash, MCP, gh, 슬래시 커맨드

Claude Code는 다양한 도구를 사용할 수 있지만, 무엇을 얼마나 자동으로 허용할지는 직접 설계해야 합니다.

기본적으로 파일 수정, 각종 bash 명령, MCP 도구 호출, URL 접근 등은 권한을 요구하며, 특정 작업에 대해 "Always allow"를 선택하면 이후 자동으로 허용됩니다. 보다 정교하게 관리하고 싶다면 /permissions 명령으로 세밀하게 허용 목록을 조정할 수 있습니다. 예를 들어, 파일 편집 전체를 허용하거나, git commit:*에만 권한을 줄 수도 있습니다.

설정은 .claude/settings.json (프로젝트별, git에 커밋 가능) 또는 ~/.claude.json (글로벌)에 JSON 형태로 직접 편집할 수도 있고, 세션 단위로만 --allowedTools 플래그를 쓸 수도 있습니다. 팀 단위로는 .claude/settings.json을 체크인해 "이 레포에서 Claude가 해도 좋은 일/하면 안 되는 일"을 공유하는 것이 좋습니다.

bash 쪽에서는 Claude가 당신의 쉘 환경을 그대로 상속받습니다. 즉, 전역으로 설치된 CLI, 로컬 스크립트, 사내 도구 등도 "어떻게 쓰는지 알려주기만 하면" 활용할 수 있습니다. 사용 예를 보여주거나, --help를 먼저 실행해 문서를 확인하도록 지시하고, 자주 쓰는 것은 CLAUDE.md에 정리해 두면 Claude가 능동적으로 제안합니다.

MCP(Model Context Protocol)를 통한 확장도 중요합니다. Claude Code는 MCP 서버이자 클라이언트로 동작하므로, Puppeteer, Sentry, iOS 시뮬레이터 등 각종 MCP 서버를 .mcp.json이나 글로벌 설정에 연결해두면, 해당 레포를 체크아웃한 사람은 추가 설정 없이 곧바로 이 도구들을 사용할 수 있습니다.

반복되는 시나리오는 슬래시 커맨드로 템플릿화할 수 있습니다. .claude/commands/*.md에 프롬프트를 작성하면 /project:... 형태로 호출할 수 있고, $ARGUMENTS로 인자도 받을 수 있습니다.

Please analyze and fix the GitHub issue: $ARGUMENTS.

1. Use `gh issue view` to get issue details
2. Understand the problem
3. Search the codebase for relevant files
...

이렇게 만들어두면 /project:fix-github-issue 1234처럼 "이슈 번호만 던져서 자동 해결 루프"를 돌리는 식의 워크플로우도 구축할 수 있습니다.

대표 워크플로우 1: 탐색 → 계획 → 구현 → 커밋

Claude Code를 가장 안정적으로 활용하는 기본 패턴은 "분리된 단계"를 두는 것입니다. 특히 곧바로 코드를 작성시키지 않고, 탐색과 계획을 먼저 시키는 것이 성능을 크게 올립니다.

먼저 관련 파일들을 읽게 합니다. "로깅을 담당하는 파일을 찾아 읽어줘", "logging.py와 관련된 설정을 파악해줘"처럼, 대략적 설명 + 구체 파일명을 섞어서 지시하고, 이 단계에서는 "코드는 아직 쓰지 말 것"을 명시합니다. 필요하면 서브 에이전트 사용을 지시해 부분 조사·검증을 분산시키는 것도 유리합니다.

그다음 "이 문제를 어떻게 풀지 생각해서 계획을 세워달라"고 요청합니다. 여기서 think, think hard, think harder, ultrathink 같은 표현을 써서 추가적인 사고 리소스를 쓰도록 유도할 수 있고, 계획이 마음에 들면 이 내용을 문서/이슈로 저장해두면 나중에 구현이 꼬여도 이 지점으로 돌아오기 쉽습니다.

계획에 동의한 뒤에야 구현을 시작하게 합니다. "계획의 1번부터 순서대로 구현하라", "각 단계를 끝낸 뒤 스스로 검증하고 다음으로 넘어가라" 등을 명시하면 좋습니다. 마지막으로, 코드가 만족스러우면 Claude에게 커밋 메시지 작성, 커밋, PR 생성까지 맡길 수 있습니다.

핵심은 "탐색/설계/구현/배포"를 혼합하지 않고, Claude에게도 인간과 같은 개발 프로세스를 따르게 한다는 점입니다.

대표 워크플로우 2: 테스트 주도 개발(TDD)과 반복 수정

테스트로 명확한 목표를 주면 에이전트의 품질이 눈에 띄게 올라갑니다. Claude Code는 TDD와 매우 궁합이 좋습니다.

먼저 원하는 동작을 자연어로 설명하고, 그에 맞는 테스트를 만들도록 요청합니다. 이때 "테스트 먼저 작성 중이며, 아직 구현 코드를 만들지 말 것", "테스트에서 기능을 몰래 구현하지 말 것"처럼 테스트 전용 단계라는 것을 강조하면 좋습니다.

테스트를 만들었다면 Claude에게 직접 테스트를 실행하게 하고, "현재는 실패해야 정상"이라고 알려줍니다. 실패 상태와 에러 메시지를 함께 살펴보고, 테스트가 정확히 원하는 행위를 검증하는지 확인한 뒤 이 상태를 커밋하게 할 수 있습니다.

그다음 구현 단계로 넘어가면서 "테스트는 수정하지 말고, 이 테스트를 모두 통과하는 최소한의 구현을 작성하라"고 지정합니다. Claude가 코드를 작성하고, 테스트를 돌리고, 실패 원인을 분석하고, 코드를 다시 수정하는 루프를 몇 번 반복하게 하면 점점 정상적인 구현에 가까워집니다. 필요할 경우 서브 에이전트를 동원해 "테스트에 과적합하지 않고 일반적인 케이스에도 맞는지" 검토하게 할 수도 있습니다.

마지막에 모든 테스트가 통과하면 해당 구현을 커밋시키는 것으로 마무리하면 됩니다. 이 패턴은 "사양이 명확하고 검증이 쉬운 작업"에 특히 잘 맞습니다.

대표 워크플로우 3: UI/시각 결과 + 스크린샷 기반 반복

UI 구현이나 데이터 시각화처럼 "눈으로 보는 결과가 중요한 작업"에는 시각 목표를 제공하는 방식이 좋습니다.

먼저 Claude가 브라우저 스크린샷을 찍을 수 있는 도구를 연결합니다. 예를 들어 Puppeteer MCP 서버나 iOS 시뮬레이터 MCP 서버를 사용하거나, 최소한 수동으로 스크린샷을 복사해 붙여 넣는 방식도 가능합니다.

그다음 디자인 시안이나 기대하는 화면을 이미지로 제공하고, "이 모양과 최대한 똑같게 구현하라"고 요청합니다. 구현 후에는 화면을 캡처해 Claude에게 다시 보여주고, 차이점을 분석하게 한 뒤 코드를 수정하는 과정을 2~3회 반복하면 완성도가 크게 올라갑니다.

이때 "시각적으로 보기 좋게", "디자인 관점에서 다듬어 달라" 같은 표현을 명시적으로 넣으면, 그냥 동작만 맞추는 것이 아니라 사람 눈에 보기 좋은 수준까지 끌어올리도록 유도할 수 있습니다.

대표 워크플로우 4: Safe YOLO 모드와 코드베이스 탐색

작은·기계적인 수정에는 "감시를 줄이고 속도를 올리는 모드"도 유용합니다. claude --dangerously-skip-permissions 옵션을 쓰면 모든 권한 확인을 건너뛰고 Claude가 알아서 명령을 실행하게 할 수 있습니다. 이 모드는 린트 에러 일괄 수정, 반복적인 보일러플레이트 생성 등 비교적 되돌리기 쉬운 작업에 잘 맞습니다.

다만 이 옵션은 파일 삭제, 잘못된 명령 실행, 프롬프트 인젝션에 의한 데이터 유출 등 위험을 수반하므로, 가능한 한 네트워크가 없는 컨테이너나 격리된 개발 환경에서만 사용하는 것이 좋습니다.

반대로, "코드를 이해하는 용도"로는 상시 감독이 크게 필요하지 않습니다. 새로운 레포를 접했을 때 Claude에게 "로깅 구조 설명", "새 엔드포인트 추가하는 절차", "특정 타입/클래스가 처리하는 엣지 케이스", "이 줄의 Rust async 문법 의미" 등을 물으면, 관련 파일·역사를 뒤져서 설명하게 할 수 있습니다. Anthropic 내부에서도 이 방식이 핵심 온보딩 수단으로 쓰일 정도로, 코드베이스 Q&A 용도로 Claude Code를 상시 활용하는 것이 추천됩니다.

대표 워크플로우 5: Git / GitHub / Jupyter 통합

Claude Code는 Git과 GitHub를 적극적으로 활용하도록 설계되어 있으며, gh CLI를 설치해두면 더 강력해집니다.

Git 측면에서는 단순 커밋 메시지 작성뿐 아니라, "이 버전 태그에 어떤 변경이 포함됐는지", "이 기능의 원 작성자가 누구인지", "이 API 설계가 왜 이렇게 되었는지" 같은 질문에 답하기 위해 Git 로그를 탐색하게 할 수 있습니다. 또한 rebase 충돌 해결, 특정 커밋 되돌리기, 패치 재적용 등 복잡한 Git 작업도 Claude에게 절차를 맡기고, 중간중간 승인만 해주는 패턴이 유용합니다.

GitHub에서는 gh CLI를 이용해 이슈 조회·PR 생성·리뷰 의견 반영·빌드 실패 원인 파악 등 대부분의 일상 작업을 자동화할 수 있습니다. 예를 들어 "내 PR에 달린 리뷰 코멘트들을 반영하고 다시 푸시해달라" 같은 지시를 내리면, 이슈/PR 내용을 읽고, 코드 수정, 테스트 실행, 푸시까지 한 번에 처리하게 할 수 있습니다.

연구·데이터 분석 쪽에서는 Jupyter 노트북과 나란히 Claude Code를 띄워두는 패턴이 좋습니다. Claude에게 노트북 파일을 읽게 하고, 셀 추가·정리, 그래프 미적 개선, 결과 해석 등을 맡기면, 데이터 분석의 "문서화·발표 준비" 단계가 크게 단축됩니다. 특히 "동료에게 보여줄 예쁜 노트북으로 정리해달라"고 구체적으로 요청하면 가독성과 시각적 품질이 좋아집니다.

프롬프트·협업 요령: 구체성, 컨텍스트, 코스 코렉션

Claude Code 성능에 가장 직결되는 요소 중 하나가 "처음 지시의 구체성"입니다. "foo.py에 테스트를 추가해줘"보다는 "로그아웃된 사용자가 foo.py의 이 함수를 호출했을 때를 검증하는 테스트를 하나 추가해달라, mocks는 사용하지 말라"처럼, 목적·범위·제약을 함께 적는 편이 훨씬 좋은 결과를 줍니다.

이미지, 파일, URL 등 가능한 많은 직접 컨텍스트를 제공하면 지시를 딱 맞게 이해하기 쉽습니다. 디자인 시안 스크린샷, 분석할 차트 이미지, 참고할 문서 URL 등을 그대로 붙여 넣고, "이걸 기준으로 맞춰 달라"고 말하는 식입니다. 파일 경로는 탭 자동완성을 이용해 명시적으로 지정하면 Claude가 잘못된 파일을 건드릴 위험을 줄일 수 있습니다.

또한 "한 번 시키고 결과만 기다리기"보다, 중간중간 방향을 잡아주는 것이 중요합니다. 작업 전에 "먼저 계획만 세우고, 내가 확인한 뒤에 구현을 시작하자"고 요청하고, 실행 도중 마음에 안 들면 ESC로 즉시 중단해 지시를 수정할 수 있습니다. ESC를 두 번 누르면 과거 프롬프트를 수정해 다른 가지로 분기할 수 있고, 이미 만들어진 변경사항은 "이전 방식이 더 마음에 든다, 변경을 되돌려 달라"고 지시해 다시 롤백시킬 수도 있습니다.

세션이 길어지면 이전 대화·파일 내용이 계속 쌓여 모델이 산만해지므로, 작업 단위가 바뀔 때마다 /clear로 컨텍스트를 정리하는 습관이 좋습니다. 또, 대형 작업(대규모 린트 수정, 마이그레이션 등)은 Markdown 체크리스트를 만들어 "에러/작업 목록을 파일에 정리하고, 하나씩 처리하며 체크해 나가라"는 식으로 진행하면 누락이 줄어듭니다.

데이터 전달 방식 역시 상황에 맞게 섞어 쓸 수 있습니다. 짧은 로그·코드는 그냥 붙여 넣고, 긴 로그나 CSV는 cat logs.txt | claude처럼 파이프로 넘기거나, Claude에게 직접 bash 명령을 실행해 파일을 읽게 할 수 있습니다. "이 파일을 읽고, 문제가 되는 구간만 요약해달라"처럼 명확한 요구와 함께 전달하는 것이 좋습니다.

Headless 모드로 CI·자동화에 녹여 넣기

Interactive 모드와 별개로, claude -p "..." 형태로 사용하는 headless 모드는 CI, GitHub Actions, 사내 자동화 스크립트에 Claude Code를 통합할 때 핵심입니다. --output-format stream-json 옵션을 쓰면 스트리밍 JSON 형태로 결과를 받아 다음 단계 프로그램에서 파싱하기도 좋습니다.

예를 들어 이슈가 생성될 때마다 자동으로 라벨을 붙이는 작업을 만들 수 있습니다. 새 이슈의 제목·본문을 Claude에 넘기고, "이 이슈를 버그/문서/개선 등 중 하나로 분류하고, 라벨 목록을 JSON 배열로 반환하라"고 지시한 뒤, 해당 JSON을 받아 GitHub API로 라벨을 설정하는 식입니다.

또 다른 대표 사례는 "AI 기반 린터"입니다. 기존 린트로 잡기 어려운 타이포, 오해를 부를 함수명, 낡은 주석 등을 Claude에 검사시키고, 결과를 CI에서 리포트하게 할 수 있습니다. 이때는 Git diff나 변경 파일 목록을 입력으로 주고, "지적 사항만 간결하게 목록으로 출력하라"고 구조화된 프롬프트를 작성하는 것이 중요합니다.

대규모 마이그레이션처럼 파일 수가 많은 작업에는 팬아웃 패턴이 쓰입니다. 우선 처리할 파일 리스트를 생성하는 스크립트를 만들고, 각 파일에 대해 claude -p "이 파일을 A 프레임워크에서 B 프레임워크로 마이그레이션해라, 완료 시 OK/FAIL만 반환하라" --allowedTools Edit Bash(git commit:*)처럼 반복 호출하여 병렬로 처리하게 할 수 있습니다. 또는 claude -p "..." --json | your_command 형태로 파이프라인에 끼워 넣어, Claude의 결과를 곧바로 다른 프로그램에서 후처리하도록 구성할 수도 있습니다.

멀티 Claude·멀티 레포 전략으로 병렬 작업하기

여러 Claude 인스턴스를 병렬로 사용하는 것도 강력한 패턴입니다. 한 인스턴스는 "코드를 작성"하고, 다른 인스턴스는 "그 코드를 리뷰"한 뒤, 세 번째 인스턴스가 "리뷰 내용을 반영해서 코드 수정"을 담당하게 하는 식입니다. 각 인스턴스는 서로 다른 대화 히스토리를 가지므로, 사람이 코드 작성자/리뷰어 역할을 나누는 것처럼 더 독립적인 관점과 검증을 얻을 수 있습니다.

TDD에서도 비슷한 구조를 만들 수 있습니다. 첫 번째 Claude에게 테스트만 작성하게 하고, 두 번째 Claude에게는 "이 테스트를 만족시키는 구현만" 맡기는 방식입니다. 이렇게 역할을 분리하면, 한 인스턴스가 테스트와 구현을 동시에 조작해버리는 위험을 줄일 수 있습니다.

물리적인 레포 구조 측면에서는 두 가지 접근이 있습니다. 하나는 아예 레포를 3~4번 클론한 뒤, 각 폴더에서 다른 작업을 돌리는 방법이고, 다른 하나는 Git worktree를 쓰는 것입니다. worktree는 하나의 Git 히스토리를 공유하면서, 다른 디렉터리에 별도 브랜치 작업 공간을 만들 수 있는 기능입니다.

git worktree add ../project-feature-a feature-a
cd ../project-feature-a
claude

이렇게 여러 worktree에서 각각 Claude 세션을 띄우면, 한쪽에서는 인증 시스템 리팩터링, 다른 쪽에서는 대시보드 UI 추가 등 서로 독립적인 작업을 동시에 진행할 수 있습니다. 각 worktree용 터미널/에디터 창을 분리해두고, 작업이 끝나면 git worktree remove ...로 정리하는 습관을 들이면 깔끔하게 운영할 수 있습니다.

인사이트

Claude Code를 "코드 자동 생성기"로만 보면 성능이 제한적입니다. 이 도구의 진짜 힘은, 환경 튜닝(설정·CLAUDE.md·도구 권한) + 명확한 컨텍스트 제공(파일·이미지·URL) + 단계적 워크플로우(탐색→계획→구현→검증) + 자동화(headless, 멀티 인스턴스)를 결합했을 때 나타납니다.

실무에서 바로 적용할 수 있는 최소 팁을 정리하면 다음과 같습니다. (1) 레포마다 CLAUDE.md를 만들고, 자주 하는 설명·명령을 계속 추가/정제한다. (2) 처음 지시할 때 "무엇을, 왜, 어떻게, 어디까지"를 최대한 구체적으로 말한다. (3) 코드 작업은 계획과 구현을 분리하고, 가능하면 테스트나 시안 같은 "명확한 목표물"을 먼저 만든다. (4) 위험한 자동화는 반드시 격리된 환경(컨테이너, 별도 브랜치/워크트리)에서 돌린다. (5) 반복되는 작업은 슬래시 커맨드와 headless 모드로 점진적으로 자동화한다.

이 다섯 가지만 꾸준히 실천해도 Claude Code는 "자동 완성 도구"에서 "팀의 한 명 같은 에이전트"로 역할이 달라질 것입니다.

출처 및 참고 : Claude Code Best Practices \ Anthropic

이 노트는 요약·비평·학습 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.