오늘 방문 /누적 방문 /완성한 레슨 소개 ↗
SECONDTEAM
Skill·Hook
🧩 레슨

Hook 실전 — 이 사이트의 실습도 hook으로 돈다

지금 이 사이트의 실습 튜터가 바로 hook 작품이에요. 실물 구조를 뜯어봐요.

① 비밀 하나 공개
이 사이트도 hook으로 돌아가요
혹시 이 사이트의 실습(테트리스)을 해보셨나요? 실습 중에 여러분이 터미널에 친 말이 자동으로 기록되고, /다음을 치면 개인화된 정리 페이지가 사이트에 떴죠. 그 마법의 정체가 바로 hook이에요.

오늘은 그 실물 구조를 해부하고, 같은 원리의 미니 hook을 내 손으로 만들어봅니다. 개념 레슨이 아니라 건축 실습이에요.

설명을 따라 진행하면, 여기서 직접 쳐보게 돼요 👇
~/my-shop
$ _
📚 「Hook 실전 — 이 사이트의 실습도 hook으로 돈다」 레슨 내용 전체 텍스트로 훑어보기
이 사이트도 hook으로 돌아가요
혹시 이 사이트의 실습(테트리스)을 해보셨나요? 실습 중에 여러분이 터미널에 친 말이 자동으로 기록되고, /다음을 치면 개인화된 정리 페이지가 사이트에 떴죠. 그 마법의 정체가 바로 hook이에요.

오늘은 그 실물 구조를 해부하고, 같은 원리의 미니 hook을 내 손으로 만들어봅니다. 개념 레슨이 아니라 건축 실습이에요.

이 사이트 실습 튜터의 실제 구조예요. 화살표를 따라가보세요.

hook 튜터의 한 바퀴
① 교육생이 터미널에 프롬프트 입력
UserPromptSubmit hook이 끼어들어 → .lecture/log.jsonl에 기록 (교육생은 모름)
③ /다음 입력 → Claude가 로그를 읽고 개인화 lesson 생성 → 서버로 전송
④ 사이트가 그 lesson을 표시

핵심은 ② — 사람도 AI도 아닌 'hook'이 모든 프롬프트를 빠짐없이 기록한다는 거예요. AI에게 "기록해줘"라고 부탁했다면 가끔 잊었겠죠. hook은 못 잊어요.

위 구조도에서 hook이 맡은 일은 정확히 무엇일까요?
맞아요. 분석은 AI(/다음)가, 기록은 hook이. 창의적인 일은 AI에게, 빠지면 안 되는 일은 hook에게 — 이 역할 분담이 hook 설계의 정석이에요.

hook은 어디에 등록돼 있을까요? 실습 폴더의 .claude/settings.json을 열어보면 실물이 보여요.

cat .claude/settings.json — hook 등록부를 들여다봐요
읽는 법: "UserPromptSubmit 이벤트가 일어나면 → 이 스크립트를 실행하라." hook = 이벤트 + 실행할 명령, 이게 전부예요.

끼어들 수 있는 순간(이벤트)이 여러 개 있어요. 대표 네 가지만 알아두면 돼요.

대표 이벤트 4종
· UserPromptSubmit — 내가 말한 직후 (우리 튜터가 쓰는 것)
· PreToolUse — Claude가 도구(파일 수정·명령 실행)를 쓰기 직전 — 검문소
· PostToolUse — 도구를 쓴 직후 — 기록계
· Stop — Claude가 답을 마쳤을 때 — 마무리 검사

특히 PreToolUse가 강력해요. '직전'에 끼어든다는 건 — 막을 수도 있다는 뜻이거든요.

PreToolUse hook 스크립트가 exit 2(거부 신호)로 끝나면 무슨 일이 일어날까요?

맞아요. exit 2 = 차단. 예를 들어 'main 브랜치에 직접 push 금지' 규칙을 CLAUDE.md에 글로 쓰면 AI가 가끔 잊지만, PreToolUse hook으로 막으면 물리적으로 불가능해져요. '부탁'과 '강제'의 차이입니다.

이제 내 손으로! 프롬프트를 칠 때마다 시각과 함께 한 줄 기록하는 미니 hook 스크립트를 만들어요. (우리 튜터의 초간단 버전)

echo 'echo "👋 $(date "+%H:%M:%S") 프롬프트 감지" >> hook-log.txt' > my-hook.sh — 기록 스크립트를 만들어요
chmod +x my-hook.sh — 실행 권한을 줘요
스크립트 내용은 한 줄 — "지금 시각과 함께 hook-log.txt에 도장을 찍어라." 이게 hook의 몸체예요.

등록부(settings.json) 편집은 직접 안 해도 돼요 — 그것도 Claude에게 시키면 되거든요. 바이브코딩답게.

my-hook.sh를 이 폴더의 UserPromptSubmit hook으로 등록해줘 — 등록을 말로 시켜요

진짜 도는지 확인! 아무 말이나 걸고, 기록 파일을 열어봐요.

안녕! 오늘 가게 잘 되고 있어? — 아무 말이나 걸어봐요
cat hook-log.txt — 기록이 쌓였는지 확인
보이시죠? 내가 말한 순간, 내가 만든 hook이 자동으로 돌았어요. 이 사이트의 튜터와 똑같은 원리 — 규모만 다를 뿐이에요.
CLAUDE.md에 "모든 프롬프트를 기록해줘"라고 쓰는 것과, UserPromptSubmit hook의 결정적 차이는?
정확해요. LLM은 확률적이라 잊을 수 있고, 코드는 결정적이라 못 잊어요. 그래서 잘 만든 AI 시스템은 — 판단은 AI에게, 보장해야 하는 건 hook에게 맡깁니다.
한 줄로
hook = 정해진 순간에 반드시 실행되는 코드. 이 사이트의 실습 튜터도, 방금 당신이 만든 미니 기록계도 같은 원리예요. AI 시대의 신뢰는 '부탁'이 아니라 이런 장치에서 나옵니다.
다음 레슨에서
도구함이 차곡차곡 쌓였어요 — Skill, CLAUDE.md, hook, MCP… 그런데 뭘 어디에 써야 할지 헷갈리기 시작했죠? 다음 레슨에서 한 장의 구분법으로 정리합니다. 🗺️