# Lesson 09 Hooks

> AI 에이전트 강의 패키지의 9강 (심화 트랙 2) — 비개발자가 자동화 hook 1개를 만들어 반복 작업을 자동 트리거할 때 사용하는 30분 대화형 강의. 파일 저장 시 / 커밋 전 / 자유 입력 중 하나를 선택해 트리거-액션 정의 → 안전한 작성 → 시연까지 함께 진행한다. 사용자가 "9강 시작", "hook", "훅", "자동화", "파일 저장 시 자동", "커밋 전 검사", "반복 작업 자동화" 같은 표현을 쓰거나, 8강 끝난 후 자연스럽게 이어지는 강의에 진입하려 할 때 반드시 이 스킬을 사용한다. 단순 hook 작성 도움이 아니라, 한 청크씩 게임처럼 진행되는 30분짜리 가이드형 학습 흐름이라는 점이 핵심이다.

- Skill: `matthewoong/lesson-09-hooks` (Agent Skill, multi-file: 14 files)
- Install (CLI): `npx skillmds@latest add matthewoong/lesson-09-hooks`
- Raw SKILL.md: https://api.skillmd.com/api/skills/matthewoong/lesson-09-hooks/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Matthewoong (https://skillmd.com/u/matthewoong)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/matthewoong/lesson-09-hooks

---


# Lesson 09 — 자동화 Hooks (심화 트랙 2)

> 학습자가 끝나면 hook 1개를 만들어 *반복 작업*을 자동 트리거하고, 안전성까지 점검한다.

---

## 0. 시작하기 전에

| 문서 | 언제 |
|---|---|
| `_shared/teaching-protocol.md` | 이론 청크 |
| `_shared/guided-practice-protocol.md` | 가이드 실습 |
| `_shared/learner-profile-schema.md` | 진도·draft |
| `_shared/style-guide.md` | 톤·분기·예시 |
| `_shared/menu-template.md` | 메뉴 |

---

## 1. 진입 시 행동
1·8강과 동일 패턴. `progress["09-hooks"]`. 헤더 `📘 [Lesson 9 · 청크 X/Y]`.

---

## 2. 진도 갱신 + draft 키 명세

| 시점 | 갱신 |
|---|---|
| 9강 첫 진입 | `status = "in_progress"`, `current_chunk = 1` |
| 청크 통과 | `current_chunk += 1` |
| 청크 3 답변 | `draft.trigger_event = <학습자가 고른 트리거>` |
| 청크 4 답변 | `draft.action = <트리거 시 실행할 액션>` |
| 청크 5 답변 | `draft.edge_cases = [<엣지 케이스 메모>]` |
| 실습 통과 | `practice_status = "done"`, `status = "completed"` |

### 9강이 사용하는 `draft` 키

| 키 | 시점 | 형식 |
|---|---|---|
| `trigger_event` | 청크 3 | string |
| `action` | 청크 4 | string |
| `edge_cases` | 청크 5 | array |

---

## 3. 이론 lesson 흐름

청크 8개.

### 9강에서 *왜* 한 청크씩 가는가
hook은 *자동으로 발사되는 코드*라 잘못 만들면 무한 루프나 의도치 않은 부작용을 만듭니다. 한 청크씩 *트리거 → 액션 → 안전 점검 → 다음*으로 가야 학습자가 *어떤 위험이 있을지* 의식하면서 만들 수 있습니다.

---

## 4. 가이드 실습 — 3개 옵션 (`practice/options/`)

### 4-0. 진입 시 draft 정리

```
🎉 이론 끝! 이제 진짜 hook을 만들어볼 시간이에요.

📝 트리거 이벤트: <draft.trigger_event>
📝 액션: <draft.action>
📝 엣지 케이스:
   - <draft.edge_cases[0]>
   - <draft.edge_cases[1]>

이걸 토대로 진짜 hook을 만들어볼게요.
```

### 4-1. 옵션 제시 (3개)

```
어떤 hook을 만들어보시겠어요?

  (1) 파일 저장 시 — 예: 저장하면 자동 포맷팅
  (2) 커밋 전 — 예: 커밋하기 전에 검사 실행
  (3) 다른 트리거 — {{name}}님이 직접 선택

번호로 답해주세요.
```

각 옵션 → `practice/options/<id>.md` 로드.

### 4-2. 가이드 실습 7단계
사전 점검(도구별 hook 지원) → 안전 패턴 안내 → 정의 → 등록 → 시연 → 검증.

### 4-3. 검증 기준

| 항목 | 통과 기준 |
|---|---|
| 트리거가 *실제로 발사*됨 | ✅ |
| 액션이 *예상대로* 동작 | ✅ |
| 엣지 케이스(예: 무한 루프 방지)가 *적어도 1개* 처리됨 | ✅ |

3개 중 2개 이상 ✅.

---

## 5~7. (1·8강 동일 패턴)

자리표시자 / 도구 비종속 / 종료 시 행동.

다음 강의: 10-work-decomposition.

---

## 8. 강의 작성자 메타

- **트랙**: 심화 2강
- **선행**: 기초 1~7강 + 심화 8강 (권장)
- **분량**: 약 30분
- **외부 자료**: 도구별 hook 기능 (Claude Code 우선, 다른 도구는 가능한 만큼)
- **비용**: 부분적
- **학습 목표**:
  - hook의 트리거-액션 모델을 이해
  - 본인 환경에 hook 1개를 만들고 시연
  - 안전한 hook 작성 패턴 (무한 루프 방지 등) 적용
- **다음 강의**: 10-work-decomposition

---

## 9. 빠른 자기 점검
- [ ] 학습자 프로필 읽음
- [ ] `📘 [Lesson 9 · 청크 X/Y]`
- [ ] 한 청크만, 끝에 ❓/🛠/🔀
- [ ] 자리표시자 채움
- [ ] 도구명 노출 X
- [ ] 시도 전 답 X
- [ ] `progress["09-hooks"]` 갱신
- [ ] 9강 추가: hook의 *부작용 가능성*을 학습자에게 안내했는가

