Hooks동작원리 - 이벤트 기반 자동화

목차

    Hooks동작원리 - 이벤트 기반 자동화

    특정 이벤트가 발생할 때 자동으로 무언가 실행되면 좋겠다고 생각한 적 있으신가요?

    "파일 저장할 때마다 린트 실행", "세션 시작할 때 환경 체크" 같은 자동화를 Hooks로 구현할 수 있습니다.

    이 글에서는 Hooks의 동작 원리와 설정 방법을 알아봅니다.

    Hooks란?

    🎭 왜왜씨와 딱딱씨의 대화
    🤔
    왜왜씨

    Hooks가 뭔가요? Git hooks랑 같은 건가요?

    🎯
    딱딱씨

    비슷한 개념이야! Git hooks가 "커밋 전에 실행"처럼 동작하듯, Claude Code Hooks는 "이 이벤트 때 실행"을 설정하는 거야.

    🤔
    왜왜씨

    어떤 이벤트에 설정할 수 있어요?

    🎯
    딱딱씨

    세션 시작, 프롬프트 전송, 도구 실행 전/후, 알림 등 20가지 이상의 이벤트가 있어!

    Hooks의 핵심

    이벤트 = 언제 실행할지 (트리거)
    명령 = 무엇을 실행할지 (액션)

    이벤트 발생 → 명령 자동 실행

    주요 Hook 이벤트

    이벤트 발생 시점 활용 예시
    SessionStart 세션 시작 시 환경 체크, 인사말
    PreToolUse 도구 실행 전 실행 전 검증
    PostToolUse 도구 실행 후 결과 로깅, 알림
    UserPromptSubmit 사용자 입력 후 입력 전처리
    Notification 알림 발생 시 Slack 알림 전송
    🎯 딱딱씨의 팁

    SessionStart는 가장 많이 쓰이는 Hook입니다. 프로젝트에 들어올 때 자동으로 환경을 체크하거나 안내를 보여줄 수 있어요!

    Hooks 설정 방법

    Hooks는 settings.json에 설정합니다.

    위치: ~/.claude/settings.json 또는 .claude/settings.json

    기본 구조

    {
      "hooks": {
        "이벤트명": [
          {
            "command": "실행할 명령어",
            "timeout": 5000
          }
        ]
      }
    }

    실전 예제: 세션 시작 시 환경 체크

    {
      "hooks": {
        "SessionStart": [
          {
            "command": "echo '환경 체크 중...' && node -v && npm -v",
            "timeout": 10000
          }
        ]
      }
    }
    🎭 왜왜씨와 딱딱씨의 대화
    🤔
    왜왜씨

    timeout은 뭔가요?

    🎯
    딱딱씨

    명령 실행 최대 대기 시간이야. 밀리초 단위라서 10000은 10초. 이 시간 내에 완료 안 되면 중단돼.

    실전 Hook 예제

    예제 1: 파일 수정 후 자동 린트

    {
      "hooks": {
        "PostToolUse": [
          {
            "matcher": "Edit|Write",
            "command": "npm run lint --fix",
            "timeout": 30000
          }
        ]
      }
    }

    matcher를 사용하면 특정 도구 실행 후에만 Hook이 동작합니다.

    예제 2: 알림을 Slack으로 전송

    {
      "hooks": {
        "Notification": [
          {
            "command": "curl -X POST -H 'Content-Type: application/json' -d '{\"text\":\"Claude 알림\"}' $SLACK_WEBHOOK"
          }
        ]
      }
    }

    예제 3: 세션 시작 시 브리핑

    {
      "hooks": {
        "SessionStart": [
          {
            "command": "cat ~/.claude/daily-brief.txt",
            "timeout": 5000
          }
        ]
      }
    }
    🎯 딱딱씨의 팁

    Hook 명령의 출력은 Claude에게 전달됩니다. 환경 정보를 출력하면 Claude가 해당 정보를 참고해서 작업할 수 있어요!

    Hook 활용 팁

    💡 Hook 활용 아이디어

    • SessionStart - 오늘 할 일 목록 표시
    • PostToolUse(Edit) - 파일 수정 후 자동 포맷팅
    • PostToolUse(Bash) - 명령 실행 로그 기록
    • Notification - 중요 알림 외부 전송

    ⚠️ 주의: Hook 명령이 오래 걸리면 전체 작업이 느려집니다.
    빠른 명령을 사용하고 적절한 timeout을 설정하세요!

    핵심 정리

    Hooks = 이벤트 기반 자동 실행
    이벤트 = SessionStart, PreToolUse, PostToolUse 등
    설정 위치 = settings.json의 hooks 섹션
    matcher = 특정 도구에만 적용
    timeout = 최대 실행 시간 (밀리초)

    다음 글 예고

    👉 테스트와 디버깅 : 스킬이 제대로 동작하는지 검증하는 법


    Hooks로 반복 작업을 자동화하세요!
    한 번 설정하면 계속 동작합니다! ⚡

    댓글

    이 블로그의 인기 게시물

    n8n으로 업무 자동화 시작하기 : 왜 필요하고 어떻게 활용할까?

    n8n 데이터 처리 노드 : Set, Split, Merge 완벽 정리

    n8n 트리거 노드 : 3가지 유형으로 자동화 시작하기