개요
Claude Code Hooks는 도구 실행 전후에 사용자 정의 명령을 자동으로 실행할 수 있는 강력한 기능입니다. 코드 포매팅 자동화, 민감한 파일 보호, 알림 전송 등 다양한 워크플로우를 구현할 수 있습니다.

Hooks란 무엇인가?
Hooks는 Claude Code 애플리케이션이 특정 이벤트 발생 시 자동으로 호출하는 사용자 정의 스크립트입니다. Claude AI가 아닌 Claude Code 시스템이 실행하므로, 결정론적이고 예측 가능한 자동화가 가능합니다.
주요 사용 사례
| 사용 사례 | 설명 |
|---|---|
| 자동 포매팅 | 파일 수정 후 Prettier, Black 등 자동 실행 |
| 린팅 | 코드 작성 시 ESLint, Pylint 자동 검사 |
| 파일 보호 | .env, secrets 등 민감한 파일 접근 차단 |
| 알림 | 작업 완료 시 Slack, 시스템 알림 전송 |
| 환경 설정 | 세션 시작 시 가상환경 자동 활성화 |
Hook 이벤트 종류

Claude Code는 다양한 라이프사이클 이벤트를 지원합니다:
1. PreToolUse
도구 실행 직전에 호출됩니다. 도구 호출을 차단하거나 수정할 수 있습니다.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/path/to/validate-command.sh"
}
]
}
]
}
}
2. PostToolUse
도구 실행 직후에 호출됩니다. 결과 검증이나 후처리에 사용합니다.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "prettier --write \"$CLAUDE_PROJECT_DIR\"/**/*.{js,ts}"
}
]
}
]
}
}
3. SessionStart
세션 시작 시 호출됩니다. 환경 설정에 유용합니다.
{
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"hooks": [
{
"type": "command",
"command": "echo 'source ~/.venv/bin/activate' >> \"$CLAUDE_ENV_FILE\""
}
]
}
]
}
}
4. Stop / SubagentStop
Claude가 작업을 완료하려 할 때 호출됩니다. 작업 완료 여부를 검증할 수 있습니다.
5. UserPromptSubmit
사용자가 프롬프트를 제출할 때 호출됩니다. 입력 검증이나 컨텍스트 추가에 사용합니다.
설정 방법
Hooks는 settings.json 파일에서 구성합니다:
| 위치 | 용도 |
|---|---|
~/.claude/settings.json |
전역 설정 (모든 프로젝트) |
.claude/settings.json |
프로젝트 설정 (팀 공유) |
.claude/settings.local.json |
로컬 설정 (개인용) |

기본 구조
{
"hooks": {
"이벤트명": [
{
"matcher": "도구패턴",
"hooks": [
{
"type": "command",
"command": "실행할 명령"
}
]
}
]
}
}
Matcher 패턴
- 정확히 일치:
"Write"- Write 도구만 - 정규식:
"Edit|Write"- Edit 또는 Write - 와일드카드:
"*"- 모든 도구
실전 예제
예제 1: Python 파일 자동 포매팅
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "black \"$CLAUDE_PROJECT_DIR\" --quiet"
}
]
}
]
}
}
예제 2: 민감한 파일 보호
#!/usr/bin/env python3
import json
import sys
input_data = json.load(sys.stdin)
file_path = input_data.get("tool_input", {}).get("file_path", "")
PROTECTED = [".env", "secrets", "credentials"]
for pattern in PROTECTED:
if pattern in file_path:
print(f"접근 차단: {file_path}", file=sys.stderr)
sys.exit(2) # 종료 코드 2 = 차단
sys.exit(0)
예제 3: 작업 완료 알림
#!/bin/bash
# macOS 알림
osascript -e 'display notification "Claude Code 작업 완료!" with title "Claude Code"'
Hook 입출력
입력 (stdin)
Hooks는 JSON 형식으로 컨텍스트를 받습니다:
{
"session_id": "abc123",
"hook_event_name": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "/path/to/file.txt",
"content": "파일 내용"
}
}
출력 (종료 코드)
| 종료 코드 | 의미 |
|---|---|
| 0 | 성공, 계속 진행 |
| 2 | 차단, stderr를 Claude에 표시 |
| 기타 | 비차단 오류, 경고만 표시 |
프롬프트 기반 Hooks
LLM을 활용한 지능형 결정도 가능합니다:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "prompt",
"prompt": "모든 작업이 완료되었는지 평가하세요. 완료되면 {\"ok\": true}, 아니면 {\"ok\": false, \"reason\": \"이유\"} 반환"
}
]
}
]
}
}
보안 주의사항
Hooks는 시스템에서 임의의 명령을 실행하므로 주의가 필요합니다:
- 입력 검증 - 모든 입력 데이터를 검증하세요
- 변수 인용 -
$VAR대신"$VAR"사용 - 절대 경로 - 스크립트는 절대 경로로 지정
- 민감 파일 제외 - .env, .git 등 주의
마무리
Claude Code Hooks는 개발 워크플로우를 자동화하는 강력한 도구입니다. 코드 품질 관리부터 보안까지, 반복적인 작업을 자동화하여 생산성을 크게 높일 수 있습니다.
핵심 포인트:
- PreToolUse로 사전 검증, PostToolUse로 후처리
- 종료 코드 2로 작업 차단
- settings.json에서 범위별 구성 가능
- 프롬프트 기반 hooks로 지능형 결정 가능
이 글은 Claude Code를 활용하여 작성되었습니다.
참고 자료:
'claude code' 카테고리의 다른 글
| [공식문서읽기] Claude Code의 핵심: 에이전트 루프와 도구 완벽 이해 (0) | 2026.02.25 |
|---|---|
| [공식문서읽기] Claude Code Plugins 완벽 가이드 - 확장 기능으로 개발 생산성 극대화하기 (0) | 2026.02.24 |
| [공식문서읽기] 클로드 코드 에이전트 팀 - 여러 AI가 협업하는 새로운 개발 패러다임 (0) | 2026.02.24 |
| [공식문서읽기] Claude Code Agent 완벽 가이드 - AI 서브에이전트로 개발 생산성 높이기 (0) | 2026.02.24 |
| [공식문서읽기] Claude Code Skills 가이드 - AI 코딩 어시스턴트 확장하기 (0) | 2026.02.20 |