💡 Anthropic Academy - Claude Code in Action을 수강하며 정리한 글입니다.
Code Assistant는 무엇일까요?
= 코드 작성부터 실행까지, 스스로 계획하고 행동하는 AI 에이전트다.
작동 방식
- Task 생성: e.g. 오류를 수정해줘
- Task가 내부 언어 모델로 전달
- 언어 모델이 Task를 분석하고 Context를 수집
- Task를 해결할 계획을 수립
- 문제 해결 Action 실행
LLM은 Task를 해결하기 위해 직접 액션을 실행하는 게 아니라 "어떤 도구를 어떤 인자로 호출할지"를 결정한다. 출력 형태는 구조화된 tool_use 블록이다.
{
"type": "tool_use",
"name": "read_file",
"input": {
"path": "/src/index.ts"
}
}LLM이 tool_use를 출력하면 Claude Code CLI가 로컬 머신에서 실제로 실행하고, 결과를 tool_result로 다시 LLM에 돌려준다.
LLM → tool_use 출력
↓
Claude Code CLI가 실제 파일 읽기 실행
↓
tool_result로 내용을 LLM에 반환
↓
LLM이 다음 단계 결정- LLM은 "무엇을 할지" 판단 (reasoning)
- Claude Code는 "실제로 실행" (execution)
- 이 루프가 반복되면서 태스크가 완성된다
도구의 종류
| 도구 | 설명 |
|---|---|
Read | 파일 읽기 |
Write | 파일 쓰기 |
Edit | 단일 파일 수정 |
MultiEdit | 여러 파일 동시 수정 |
Glob | 파일 패턴 검색 |
Grep | 파일 내용 검색 |
LS | 디렉토리 목록 조회 |
Bash | 터미널 명령 실행 |
프로젝트에서 Claude Code 시작하기
/init & CLAUDE.md
프로젝트에서 Claude Code를 처음 사용할 때는 /init 명령어 실행을 권장한다.
실행하면 현재 코드베이스를 스캔하고, 프로젝트 구조와 내용을 요약해서 CLAUDE.md 파일에 저장한다.
이후 모든 요청 시 CLAUDE.md를 자동으로 컨텍스트에 포함한다.
💡 이미
CLAUDE.md가 있는 경우엔/init이 기존 내용을 덮어쓰지 않고 보강하는 방식으로 동작한다.
CLAUDE.md 유형
| 파일 | 설명 |
|---|---|
CLAUDE.md | 프로젝트용. git에 포함해 팀원과 공유 |
CLAUDE.local.md | 개인용. .gitignore에 추가 권장 |
~/.claude/CLAUDE.md | 전역용. 모든 프로젝트에 적용 |
커스텀 지침 추가하기 — #
#을 사용하면 "메모리 모드"로 들어가 CLAUDE.md를 지능적으로 수정할 수 있다.
# 주석은 최소한으로 사용하세요. 복잡한 코드에만 주석을 다는 것이 좋습니다.Claude가 해당 지침을 자동으로 CLAUDE.md에 추가한다.
파일 선택하기 — @
특정 파일이나 URL을 컨텍스트로 넘길 때 @를 사용한다.
인증 시스템이 어떻게 작동하고 있어? @auth대화 흐름 제어하기
| 단축키 | 동작 |
|---|---|
ESC | 응답 중단 및 방향 수정 |
ESC 두 번 | 특정 시점으로 대화 되감기 |
/compact | 대화를 요약해 토큰 절약 |
/clear | 대화 기록 완전 초기화 |
Planning Mode
복잡한 작업에서 Claude가 변경사항을 바로 구현하지 않고, 실행 계획을 먼저 수립한 뒤 승인을 기다리게 하는 모드다.
활성화: Shift + Tab 두 번
Thinking Mode
복잡한 아키텍처 설계나 까다로운 버그 추적 등에서 사용을 권장한다. 모드마다 내부 추론에 사용하는 thinking budget(토큰)이 늘어나며, 그만큼 더 정교한 분석이 가능하다.
| 모드 | 추론 수준 |
|---|---|
Think | 기본 추론 |
Think more | 확장 추론 |
Think a lot | 심화 추론 |
Ultrathink | 최대 추론 |
커스텀 명령어 추가하기
.claude/commands폴더를 생성한다.[명령어].md파일을 만들고 실행할 내용을 작성한다.- Claude Code를 재시작한다.
/[명령어]로 실행한다.
$ARGUMENTS 변수로 인수를 받을 수 있다.
Write comprehensive tests for: $ARGUMENTS
Testing conventions:
* Use Vitest with React Testing Library
* Place test files in __tests__ directory
* Name test files as [filename].test.ts(x)Hooks
도구 실행 전후에 원하는 코드를 끼워 넣을 수 있는 기능이다.
| Hook | 실행 시점 |
|---|---|
PreToolUse | 도구 실행 전 |
PostToolUse | 도구 실행 후 |
Stop | Claude 응답 완료 시 |
UserPromptSubmit | 사용자 프롬프트 제출 시 |
SessionStart / SessionEnd | 세션 시작/종료 시 |
설정 파일 위치는 아래와 같다.
| 파일 | 적용 범위 |
|---|---|
~/.claude/settings.json | 전역 |
.claude/settings.json | 프로젝트 |
.claude/settings.local.json | 개인 |
{
"hooks": {
"PreToolUse": [
{
"matcher": "Read",
"hooks": [{ "type": "command", "command": "node /home/hooks/read_hook.ts" }]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit", // | 로 여러 도구에 동시 적용 가능
"hooks": [{ "type": "command", "command": "node /home/hooks/edit_hook.ts" }]
}
]
}
}MCP 서버 사용하기
Playwright를 예시로 MCP 서버를 연결해본다.
claude mcp add playwright npx @playwright/mcp@latest매번 권한 요청이 번거롭다면 사전 승인해둘 수 있다.
// .claude/settings.local.json
{
"permissions": {
"allow": ["mcp__playwright"],
"deny": ["mcp__playwright__navigate"] // 특정 도구만 차단도 가능
}
}