Claude Code Hooks 사용법: 코드 작업 자동화하는 방법

Quick Answer
먼저 보는 핵심 답변
Claude Code Hooks를 설정해 파일 수정 후 포맷·검사, 위험 명령 차단, 승인 알림과 작업 완료 검증을 자동화하는 방법을 이벤트·설정 범위·보안 기준과 함께 설명합니다.
Claude Code Hooks는 Claude가 도구를 실행하기 전, 파일을 수정한 뒤, 권한을 요청하거나 작업을 마칠 때 지정한 검사를 자동으로 실행하는 기능입니다. 코드 포맷, 린트, 보호 파일 차단과 알림처럼 매번 반드시 같은 방식으로 처리해야 하는 작업에 적합합니다. 다만 Hook은 사용자의 셸 권한으로 명령을 실행하므로 편리함보다 실행 범위와 실패 동작을 먼저 설계해야 합니다.
프로젝트에서 공유할 Hook은
.claude/settings.json의 hooks에 설정합니다. 파일 수정 뒤 검사하려면 PostToolUse, 실행 전에 위험 작업을 막으려면 PreToolUse, 입력이 필요할 때 알림을 받으려면 Notification을 사용합니다. 처음에는 읽기·검사 중심의 명령 하나로 시작하고 /hooks에서 로드 위치와 matcher를 확인하세요.Claude Code Hooks란 무엇인가
Hook은 Claude Code의 생명주기에서 정해진 이벤트가 발생하면 사용자 정의 handler를 호출하는 자동화 장치입니다. “필요하면 포맷해줘”라는 프롬프트는 모델의 판단에 의존하지만, PostToolUse Hook은 조건이 맞는 도구 호출이 끝날 때마다 실행됩니다. 반복 실행이 중요한 포맷·검사·감사 기록에는 Hook이 더 예측 가능합니다.
Anthropic 공식 문서 기준 handler는 셸 명령인 command 외에도 HTTP 엔드포인트, 연결된 MCP 도구, 단일 모델 판단인 prompt, 도구를 사용하는 agent 유형을 지원합니다. agent Hook은 실험적 기능이므로 운영 자동화는 단순한 command Hook부터 검증하는 편이 안전합니다.
Hooks와 CLAUDE.md·Skills의 차이
| 기능 | 담당 역할 | 적합한 예 |
|---|---|---|
| CLAUDE.md | Claude가 참고할 프로젝트 지침 | 코딩 규칙, 테스트 명령, 금지 영역 |
| Skills | 필요할 때 불러오는 재사용 절차 | 릴리스 노트, 장애 분석, 리뷰 순서 |
| Hooks | 정해진 이벤트에서 자동 실행 | 포맷, 검사, 차단, 알림, 감사 로그 |
| Permissions | 도구와 경로의 허용·질문·거부 정책 | 운영 명령 차단, 읽기 범위 제한 |
규칙을 설명하려면 CLAUDE.md, 전문적인 작업 순서를 재사용하려면 Claude Skills, 실행 시점을 강제하려면 Hook을 선택하세요. Hook을 보안 경계 하나로만 사용하지 말고 권한 설정과 저장소 보호 규칙을 함께 적용해야 합니다.
가장 많이 쓰는 Hook 이벤트
| 이벤트 | 실행 시점 | 활용 예 |
|---|---|---|
SessionStart | 세션 시작·재개 | 환경 정보와 작업 문맥 준비 |
UserPromptSubmit | 프롬프트 처리 전 | 입력 형식 검사와 공통 문맥 추가 |
PreToolUse | 도구 호출 전 | 보호 파일 수정·위험 명령 차단 |
PermissionRequest | 권한 대화상자 표시 시 | 추가 정책 판단과 알림 |
PostToolUse | 도구 호출 성공 후 | 포맷·정적 검사·변경 기록 |
PostToolUseFailure | 도구 호출 실패 후 | 오류 수집과 진단 안내 |
Notification | Claude가 사용자 입력을 기다릴 때 | 데스크톱·메신저 알림 |
PreCompact·PostCompact | 문맥 압축 전·후 | 중요 상태 저장과 문맥 재주입 |
Stop | 주 에이전트가 응답을 마칠 때 | 완료 조건과 테스트 결과 확인 |
SessionEnd | 세션 종료 시 | 정리 작업과 감사 기록 |
이벤트 목록과 지원 입력은 업데이트될 수 있습니다. 이름을 기억해서 설정하기보다 공식 Hooks reference와 현재 Claude Code의 /hooks 화면을 함께 확인하세요.
Hook 설정 위치와 적용 범위
| 파일 | 적용 범위 | 공유 여부 |
|---|---|---|
~/.claude/settings.json | 현재 사용자의 모든 프로젝트 | 로컬 사용자 설정 |
.claude/settings.json | 현재 프로젝트 | 저장소에 커밋 가능 |
.claude/settings.local.json | 현재 프로젝트의 개인 설정 | 일반적으로 Git 제외 |
| 관리형 설정 | 조직 정책 범위 | 관리자가 배포·강제 |
팀 전체가 같은 포맷과 검사를 써야 한다면 프로젝트 설정에 두고 코드 리뷰를 받으세요. 개인 알림과 로컬 전용 경로는 사용자 설정이나 local 설정에 두는 편이 적절합니다. 비밀값은 어느 설정 파일에도 직접 적지 말고 승인된 시크릿 관리 방식을 사용해야 합니다.
Hook 설정의 3단계 구조
- 이벤트: 언제 실행할지 정합니다.
- matcher 그룹: 어떤 도구나 조건에 반응할지 좁힙니다.
- handler: 실제 command, HTTP, MCP, prompt 또는 agent 작업을 정의합니다.
matcher가 너무 넓으면 모든 도구 호출에서 무거운 검사가 반복됩니다. 예를 들어 파일 작성 뒤에만 실행하려면 Edit|Write처럼 대상 도구를 제한합니다. 도구의 정확한 이름은 Claude Code Tools reference에서 확인할 수 있습니다.
가장 단순한 PostToolUse Hook 만들기
다음 예시는 Claude가 파일을 작성하거나 수정한 뒤 프로젝트의 포맷 검사를 실행합니다. 프로젝트에 실제로 존재하는 스크립트 이름으로 바꾼 뒤 적용하세요.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "pnpm run format:check",
"timeout": 60
}
]
}
]
}
}
포맷 검사를 저장소 전체에 매번 실행하면 대형 프로젝트에서 느려질 수 있습니다. 처음에는 검사 전용 명령으로 동작을 확인하고, 필요하면 Hook의 표준 입력에서 수정된 파일 경로를 안전하게 읽는 프로젝트 스크립트로 최적화하세요. 경로를 그대로 셸 문자열에 이어 붙이면 공백과 특수문자 때문에 오류나 명령 삽입 위험이 생길 수 있습니다.
PreToolUse로 보호 파일 수정 막기
PreToolUse는 도구가 실행되기 전에 입력을 확인할 수 있어 배포 설정, 마이그레이션과 비밀 파일 보호에 사용할 수 있습니다. 복잡한 검증 로직은 JSON 안의 긴 한 줄 명령보다 저장소에서 리뷰할 수 있는 별도 스크립트로 관리하세요.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/guard-protected-files.sh",
"args": [],
"timeout": 10
}
]
}
]
}
}
스크립트는 표준 입력으로 전달된 JSON에서 파일 경로를 읽고, 프로젝트 루트 기준으로 정규화한 뒤 허용 범위를 판정해야 합니다. 심볼릭 링크, 대소문자와 상위 경로 이동도 고려하세요. 단순 문자열 포함 검사만으로 보안 통제를 완성했다고 판단하면 안 됩니다.
알림 Hook으로 승인 대기 놓치지 않기
Notification Hook은 Claude Code가 권한이나 추가 입력을 기다리는 시점에 알림을 보낼 때 유용합니다. macOS의 osascript, Linux의 데스크톱 알림 도구, Windows PowerShell처럼 운영체제마다 명령이 다르므로 팀 공용 설정에 특정 운영체제 명령을 바로 넣지 마세요.
알림에는 소스코드, 프롬프트 전문, 토큰이나 고객 정보를 포함하지 않는 것이 좋습니다. 외부 웹훅을 쓴다면 허용된 목적지, 인증 방식, 재시도와 로그 보존 정책을 먼저 확인하세요.
Stop Hook으로 완료 조건 확인하기
작업이 끝나기 전에 테스트나 산출물 존재를 확인하려면 Stop Hook을 사용할 수 있습니다. 단순 파일·명령 판정은 command Hook이 적합하고, 상태를 읽고 판단해야 한다면 prompt 또는 실험적인 agent Hook을 고려할 수 있습니다.
Stop Hook이 계속 실패하면 Claude가 종료를 반복해서 시도할 수 있습니다. 검사에 명확한 성공 조건, 제한 시간과 탈출 조건을 두고 사용자 취소를 막지 않도록 설계하세요. 전체 테스트가 긴 저장소라면 매 종료마다 모두 실행하기보다 변경 범위 검사와 CI를 나누는 편이 현실적입니다.
command·prompt·agent·HTTP·MCP 선택법
| 유형 | 선택 기준 | 주의점 |
|---|---|---|
| command | 결과가 명확한 로컬 검사 | 셸 권한·경로·종료 코드 검토 |
| prompt | 입력 JSON만으로 가능한 예·아니오 판단 | 모델 판단은 결정적 검사보다 변동 가능 |
| agent | 파일과 명령을 확인해야 하는 복합 검증 | 실험적 기능, 시간과 사용량 증가 |
| HTTP | 중앙 감사·알림 서비스 연동 | 데이터 전송, 인증, 허용 URL 관리 |
| MCP tool | 연결된 조직 도구로 검사·기록 | MCP 서버 권한과 출력 신뢰성 확인 |
입력 JSON과 종료 코드 이해하기
command Hook은 이벤트 정보를 표준 입력의 JSON으로 받고 종료 코드, 표준 출력과 표준 오류로 결과를 전달합니다. 공식 reference에 따르면 종료 코드만 사용하는 방식과 종료 코드 0에서 구조화 JSON을 출력하는 방식을 섞지 않는 것이 중요합니다. 종료 코드 2를 쓰면 JSON 출력은 무시됩니다.
구조화 JSON을 반환할 때 표준 출력에는 JSON 객체만 있어야 합니다. 셸 초기화 파일이나 검사 도구가 안내 문구를 출력하면 파싱 오류가 날 수 있으므로 진단 메시지는 표준 오류 또는 별도 로그로 분리하세요. Hook 출력은 Claude의 문맥에 들어갈 수 있으므로 비밀값과 불필요한 대용량 로그도 제거해야 합니다.
/hooks에서 설정 확인하기
- Claude Code에서
/hooks를 입력합니다. - 설정한 이벤트 옆의 Hook 개수를 확인합니다.
- 항목을 열어 matcher, handler 유형과 출처 파일을 확인합니다.
- 읽기 전용 테스트 프로젝트에서 대상 이벤트를 한 번 발생시킵니다.
- 예상 명령이 한 번만 실행되는지와 실패 메시지를 기록합니다.
/hooks 화면은 현재 설정을 확인하는 읽기 전용 브라우저입니다. 추가·수정·삭제는 설정 JSON을 편집하거나 Claude에게 설정 변경을 요청해야 합니다. 변경 후 목록에 보이지 않으면 JSON 문법과 파일 위치부터 확인하세요.
Hook이 실행되지 않을 때 확인할 것
| 증상 | 가능한 원인 | 확인 방법 |
|---|---|---|
/hooks에 보이지 않음 | 잘못된 파일 위치·JSON 오류 | settings 파일과 중첩 구조 확인 |
| 특정 작업에서만 누락 | matcher가 실제 도구 이름과 다름 | 도구 이름과 이벤트 입력 확인 |
| 명령을 찾지 못함 | PATH·작업 디렉터리 차이 | 절대 프로젝트 경로와 실행 환경 확인 |
| JSON validation failed | stdout에 다른 문구가 섞임 | JSON 외 출력 제거, stderr로 이동 |
| 작업 종료가 반복됨 | Stop Hook의 영구 실패 | 종료 조건·제한 시간·검사 범위 축소 |
| 중복 실행처럼 보임 | 여러 설정 위치에서 같은 이벤트 등록 | /hooks의 Source 항목 비교 |
보안 사고를 줄이는 체크리스트
- 저장소의 Hook 설정과 스크립트를 일반 코드처럼 리뷰합니다.
- 외부 프로젝트를 열기 전에
.claude/settings.json과 실행 스크립트를 확인합니다. - 사용자 입력과 파일 경로를 셸 명령에 직접 연결하지 않습니다.
- 비밀값은 설정과 출력에 기록하지 않고 최소 권한으로 전달합니다.
- 네트워크 전송 Hook은 목적지 허용 목록, 인증과 보존 정책을 적용합니다.
- 삭제, 배포와 운영 데이터 변경은 Hook만 믿지 않고 별도 권한과 사람 승인을 둡니다.
- 검사 실패 시 무조건 통과시키지 말고 사용자에게 원인과 다음 행동을 보여줍니다.
disableAllHooks가 조직 관리형 Hook까지 해제한다고 가정하지 않습니다.
Anthropic 권한 문서상 PreToolUse Hook의 허용 결과가 기존 deny·ask 권한 규칙을 우회하지는 않습니다. 반대로 차단 Hook은 allow 규칙보다 먼저 작업을 막을 수 있습니다. 두 체계를 따로 검토해야 예상치 못한 허용과 영구 차단을 줄일 수 있습니다.
팀에 도입하는 5단계
- 반복 비용이 크고 판정이 명확한 작업 하나를 고릅니다.
- 개인 local 설정에서 읽기·검사 전용 Hook으로 시작합니다.
- 정상 파일, 보호 파일, 공백이 있는 경로와 실패 명령을 시험합니다.
- 실행 시간, 오탐, 누락과 개발자가 우회한 횟수를 기록합니다.
- 효과가 확인된 설정과 스크립트만 프로젝트 설정으로 옮겨 리뷰합니다.
첫 주에는 JavaScript·TypeScript 파일 수정 뒤 포맷 검사만 적용합니다. 둘째 주에 실행 시간과 실패 원인을 확인한 뒤 보호 파일 차단이나 완료 검사를 별도 Hook으로 추가하세요. 여러 자동화를 한꺼번에 켜면 어떤 Hook이 작업을 늦추거나 막았는지 찾기 어렵습니다.
Hooks 자동화 품질을 측정하는 방법
| 지표 | 기록 방법 | 좋은 신호 |
|---|---|---|
| 실행 시간 | Hook별 평균·최대 소요 시간 | 개발 흐름을 방해하지 않는 범위 |
| 유효 차단 | 실제 위험을 막은 횟수 | 재현 가능한 근거가 있음 |
| 오탐 | 정상 작업을 막은 횟수 | matcher와 규칙 수정 후 감소 |
| 실패 복구 | 원인 파악과 재실행 시간 | 메시지만 보고 다음 행동을 이해 |
| 우회 사용 | Hook 비활성화·수동 우회 횟수 | 정상 업무에서 불필요한 우회가 적음 |
“자동화했으니 좋아졌다”는 평가보다 실제 오류를 얼마나 일찍 발견했고 개발 시간을 얼마나 방해했는지 함께 측정해야 합니다. 이 글에서는 특정 절감률이나 성능 수치를 직접 측정하지 않았으므로 팀 환경에서 자체 기록을 남겨 판단하세요.
직접 검증 기록표
Hook은 설정 화면보다 실제 이벤트에서 검증해야 합니다. 다음 항목을 한 줄씩 기록하면 matcher 오류와 과도한 자동화를 구분하기 쉽습니다.
| 기록 항목 | 작성 예시 | 통과 기준 |
|---|---|---|
| 이벤트·matcher | PostToolUse · Edit|Write | 대상 작업에서만 1회 실행 |
| 실행 명령 | 변경 파일 lint | 프로젝트 전체를 불필요하게 검사하지 않음 |
| 성공·실패 입력 | 정상 TS·문법 오류 TS | 두 결과가 명확히 구분됨 |
| 소요 시간·로그 | 초 단위·비민감 진단 | 작업을 과도하게 지연하거나 비밀값을 남기지 않음 |
편집부 결론
Claude Code Hooks는 포맷, 검사, 보호 파일 차단과 알림을 모델의 선택이 아니라 정해진 시점에 실행하도록 만드는 기능입니다. 처음에는 PostToolUse의 가벼운 검사 하나로 시작하고 /hooks에서 실제 로드 위치와 matcher를 확인하세요. 운영 데이터와 배포를 다루는 자동화는 최소 권한, 별도 승인, 시간 제한과 실패 복구 절차를 함께 설계해야 합니다.
이 글은 2026년 9월 6일 Anthropic 공식 문서를 분석해 작성했으며 특정 조직 저장소에서 Hooks의 장기 효과를 직접 측정한 후기는 아닙니다. Claude Code의 이벤트와 handler 유형은 변경될 수 있으므로 적용 직전 공식 reference와 현재 버전을 확인하세요.
공식 문서와 함께 읽을 글
Claude Code 권한과 Hook 우선순위 확인하기
Claude Code Hooks와 MCP를 연동해 외부 도구 검사하기
Agent Teams의 Task 완료 조건을 Hook으로 검증하기
Hooks·Skills·MCP를 Claude Code Plugin으로 통합하기
Claude Code Skills로 반복 프롬프트 만들기
Claude Code Subagent로 개발 작업 병렬 처리하기
자주 묻는 질문
Claude Code Hooks는 무엇을 자동화할 수 있나요?
파일 수정 후 포맷·린트, 도구 실행 전 위험 작업 차단, 권한 요청 알림, 세션 시작 문맥 준비와 작업 종료 전 완료 조건 확인 등을 자동화할 수 있습니다.
Claude Code Hook은 어디에 설정하나요?
모든 프로젝트에 적용하려면 ~/.claude/settings.json, 팀과 공유할 프로젝트 설정은 .claude/settings.json, 개인 프로젝트 설정은 .claude/settings.local.json에 정의합니다.
파일 수정 후 자동 포맷에는 어떤 이벤트를 쓰나요?
PostToolUse 이벤트에 Edit|Write matcher를 적용할 수 있습니다. 저장소 전체 검사 비용이 크면 수정된 파일만 안전하게 처리하는 별도 스크립트를 사용하세요.
위험한 명령을 실행 전에 막을 수 있나요?
PreToolUse Hook에서 도구 입력을 검사해 차단할 수 있습니다. Hook 하나만 보안 경계로 믿지 말고 deny 권한, 브랜치 보호와 사람 승인을 함께 사용해야 합니다.
설정한 Hook은 어떻게 확인하나요?
Claude Code에서 /hooks를 열면 이벤트별 개수, matcher, handler 유형, 출처 파일과 명령을 확인할 수 있습니다. 이 화면은 읽기 전용입니다.
Hook과 Claude Skills는 무엇이 다른가요?
Skills는 Claude가 업무에 맞춰 불러오는 재사용 절차이고, Hooks는 특정 생명주기 이벤트에서 자동 실행되는 handler입니다. 작업 지식은 Skill, 반드시 실행할 기계적 검사는 Hook에 두는 방식이 적합합니다.
Claude Code Hooks가 실행되지 않는 이유는 무엇인가요?
설정 파일 위치, JSON 문법, 이벤트 이름, matcher와 실제 도구 이름, PATH와 스크립트 실행 권한을 확인하세요. /hooks에 표시되는 Source가 예상 위치와 같은지도 봐야 합니다.
외부 프로젝트의 Hook을 그대로 실행해도 안전한가요?
안전하다고 가정하면 안 됩니다. Hook은 사용자 권한으로 명령을 실행할 수 있으므로 설정, 스크립트, 네트워크 목적지와 비밀정보 접근을 먼저 검토하고 격리된 환경에서 시험하세요.
Evidence & Limitations
근거·검증 범위·업데이트 기록
확인한 근거
Anthropic Claude Code 공식 문서를 기준으로 핵심 사실을 확인하고, 사실과 편집부 해석을 구분했습니다.
경험 정보와 한계
직접 사용 후기나 자체 성능 시험이 아닌 공개 원문·공식 문서 기반 분석입니다. 실제 화면과 기능은 계정·기기·배포 시점에 따라 다를 수 있습니다.
게시·수정 기록
최초 게시 2026.09.06 22:43 · 최종 수정 2026. 09. 07.
전문 검토 영역
IT 매거진 편집부가 AI·소프트웨어·개발·모바일·보안·테크 비즈니스 관점에서 구성하고 팩트체크 데스크가 출처와 표현을 검토했습니다.
검증에 사용한 주요 공식 자료
Related Articles
이 주제를 더 깊게 읽어보세요
현재 기사와 연결되는 배경·기술·시장 분석을 골라 바로 이동할 수 있습니다.


