신호를 도구로 만들기 | Compound
한 사이클에서 만난 강한 신호는 그 자리에서, 약한 신호는 여러 사이클에 걸쳐 쌓인 뒤 Skill·Hook·Rule·CLAUDE.md로 만들어집니다
Overview
배포까지 끝났고, 한 사이클의 판단·실패·우회 흔적이 artifacts/feedme/learnings.md에 기록됐습니다. 이번 레슨은 SDD 6단계의 마지막인 Compound, 한 사이클에서 얻은 학습이 다음 사이클의 도구가 되는 과정을 살펴봅니다. 한 사이클만 돌렸으므로 도구 갱신을 직접 실행하기보다 개념과 시뮬레이션으로 다룹니다.
학습 목표
/compound호출 시점, 패턴 후보 검토, 승격 방식 선택, 이 세 가지 결정 지점을 구별합니다.- 강한 신호와 약한 신호를 구별해 즉시 승격할지 누적할지 가릅니다.
- 반복 유형을 보고 Rule·Hook·Skill·CLAUDE.md 중 어느 방식으로 만들지 판단합니다.
Compound가 만드는 가속
Compound는 한 장의 그림으로 정리됩니다.
각 사이클은 learnings에서 도구(Rule·Hook·Skill·CLAUDE.md)를 만들고, 그 도구가 다음 사이클에 적용되어 같은 실수를 미리 막아 줍니다. 사이클이 반복될수록 도구는 쌓이고, 사이클은 짧아집니다. 이 자기강화 루프가 Compound Engineering의 정신입니다.
두 종류의 학습: 즉시 승격과 누적 회고
learnings.md에 들어가는 학습은 신호의 강도에 따라 두 갈래로 갈립니다.
즉시 승격
강한 신호 — 1 사이클 안에서 처리언제
- /execute-plan Step 6 (구현 도중 발견)
applied 상태
- rule (즉시 적용)
예시
- 같은 에러를 두 번 만남
- plan에 빠진 규약을 발견
- 명백한 보안·데이터 손실 위험
누적 회고
약한 신호 — 여러 사이클 누적 후언제
- /self-improve (3~5 사이클 누적 후)
applied 상태
- not-yet (누적 대기) → rule (승격 후)
예시
- PR마다 반복되는 코드 톤 지적
- 매번 재발견되는 디렉터리 패턴
- 여러 feature에서 반복된 우회
즉시 승격은 강한 인사이트 1개로 충분합니다. 같은 에러를 두 번 만났다면 다음에도 일어날 가능성이 매우 높으므로, 그 자리에서 Rule이나 Hook으로 만듭니다. /execute-plan Step 6에서 자동으로 진행됩니다.
누적 회고는 약한 신호가 패턴으로 굳을 때까지 기다립니다. 한 번만 보인 어색함은 우연일 수 있지만, 3~5개 사이클에 걸쳐 같은 형태로 반복되면 도구로 만들 만한 신호입니다. /compound가 쌓인 약한 신호들을 한꺼번에 분석합니다.
약한 신호의 정의
/compound가 1차로 분석하는 입력은 모든 artifacts/*/learnings.md의 applied: not-yet 항목입니다. 즉시 도구로 만들어진 항목(applied: rule)은 이미 반영되었고, 일회성으로 판정된 항목(applied: discarded)은 의도적으로 제외됩니다.
not-yet 외에도 다음도 약한 신호에 해당합니다. 원리는 AI가 매끄럽게 끝내지 못해 사람이 한 번 더 손대야 했던 모든 부분입니다.
| 신호 | 의미 |
|---|---|
| 복구 경로를 거친 실패 | 빌드/테스트 실패 → 우회 → 재시도. 우회 자체가 학습 대상 |
| 같은 에러에 두 번 이상 걸림 | 한 번이면 우연, 두 번이면 패턴 |
| Human Review에서 반복 지적된 패턴 | 사용자가 같은 형태의 코드를 매번 고친다면 규칙 후보 |
| 수동 개입이 필요했던 상황 | AI가 끝내지 못해 사용자가 손댄 부분 |
이 신호들이 누적되면 한 사이클로는 보이지 않던 패턴이 보이기 시작합니다.
4가지 승격 방식: Rule · Hook · Skill · CLAUDE.md
같은 반복이라도 어떤 방식으로 도구화하느냐에 따라 비용이 달라집니다. 기준은 어떤 방식이 가장 적은 비용으로 재발을 막느냐입니다.
| 반복 유형 | 승격 대상 | 예시 |
|---|---|---|
| 같은 제약 위반이 반복됨 | Rule | .tsx에서 px 단위 금지, components/ui/* 직접 수정 금지 |
| 100% 기계적으로 잡아야 하는 것 | Hook | git commit 직전 bun run build(PreToolUse), Claude 가 파일을 편집한 직후 linter 자동 실행(PostToolUse) |
| 잘못된 사용 패턴(올바른 방법을 가르쳐야 함) | Skill | shadcn 컴포넌트 설치·조합법, 특정 라이브러리 도입 가이드 |
| 아키텍처 결정 변경 | CLAUDE.md | 순방향 의존성 순서, 패키지 매니저 결정 |
새 Skill은 라이브러리·도구 단위로 만듭니다. 더 작게 쪼개면 Skill이 쌓여 검색·관리 비용이 커지고, 더 크게 묶으면 description으로 트리거하기 어려워집니다.
시뮬레이션: 누적 learnings의 패턴 도출
본 챕터에서는 feedme.wiki 한 사이클만 돌렸지만, 4개 사이클이 쌓인 상태라면 /compound가 어떤 패턴을 발견하는지 살펴봅니다. 다음은 가상으로 쌓인 learnings 입니다.
artifacts/feedme/learnings.md:
- "변환 결과 영역에 px 단위로 hardcoded margin 발견 → spacing token으로 수정"
artifacts/share-link/learnings.md:
- "복사 버튼에 px hardcoded → spacing token으로 수정"
artifacts/comments/learnings.md:
- "댓글 카드 padding이 px → spacing token으로 수정"
artifacts/profile/learnings.md:
- "프로필 헤더 margin이 px → spacing token으로 수정"/compound가 분석한 결과는 다음과 같습니다.
패턴: .tsx에서 px 단위가 4개 feature에 걸쳐 반복 발견됨
승격 대상: Rule (제약 위반의 반복)
제안: .claude/rules/no-px-in-tsx.md 생성
description: tsx/jsx에서 px 단위 사용 금지
paths:
- "**/*.tsx"
- "**/*.jsx"
내용: spacing token (gap-2, p-4 등) 또는 CSS variable을 사용한다.
→ 사용자 승인 후 적용. 이후 사이클부터 AI가 자동으로 이 규칙을 따른다.비슷한 패턴을 100% 기계적으로 잡을 수 있다면 Hook(예: lint 규칙 추가), 잘못된 사용법이라면 Skill, 아키텍처 결정이라면 CLAUDE.md로 만듭니다. 사용자가 어느 방식으로 만들지 최종 결정합니다.
패턴 후보 검토 기준
/compound가 제안한 패턴 후보를 검토할 때는 네 가지 기준을 봅니다.
- 신호 누적량이 충분한가? 3~5개 사이클 미만이면 보류하고 더 쌓습니다.
- 반복 유형이 네 가지 중 어디에 해당하는가? 분류가 모호하면
applied: not-yet으로 두고 다음 사이클을 기다립니다. - 제안된 방식이 반복 유형과 매칭되는가? Rule·Hook·Skill·CLAUDE.md 매칭은 위 표를 따릅니다.
- 패턴이 spec 범위 안에 있는가? 범위를 벗어난 패턴은 거부하고 근거를
learnings.md에 남깁니다.
한 사이클로는 보이지 않는 이유
본 챕터에서 만든 learnings.md 한 개로는 /compound의 가치가 잘 보이지 않습니다. 신호가 한 사이클에 한 번만 나타나면 패턴인지 우연인지 구분이 어렵습니다.
Compound는 다음 feature 사이클부터 가치가 드러납니다. 같은 프로젝트에서 두 번째, 세 번째 feature를 SDD 사이클로 만들고 나면, 첫 사이클에서 못 보던 반복이 보이기 시작합니다. 그때 /compound를 호출하면, 쌓인 약한 신호가 한꺼번에 도구로 만들어집니다.
도구가 갱신되면 다음 사이클은 더 빠릅니다. Rule이 추가되어 같은 에러를 미리 막고, Skill이 추가되어 같은 라이브러리 사용법을 다시 가르치지 않아도 됩니다. 앞에서 본 플라이휠이 두 번째 사이클부터 돌기 시작합니다.
핵심 포인트 정리
- 두 종류의 학습: 강한 신호는
/execute-planStep 6에서 즉시 도구로 만들어지고, 약한 신호는/compound에서 쌓인 뒤 만들어집니다. - 약한 신호 = 사람 손이 닿은 흔적: 우회·재시도·반복 지적·수동 개입이 모두 약한 신호. 한 번이면 우연, 여러 번이면 패턴
- 4가지 승격 방식: 제약 위반 → Rule, 기계적 검사 → Hook, 잘못된 사용법 → Skill, 아키텍처 결정 → CLAUDE.md
- 누적이 핵심: 한 사이클로는 보이지 않습니다. 3~5개 사이클이 쌓여야 약한 신호가 패턴으로 드러나고, 그때 도구로 만들어집니다.
FAQ
-
Q: 한 사이클만 돈 지금,
/compound를 호출하면 어떻게 되나요?- A: 한 항목으로는 패턴이 약해서 의미 있는 제안이 나오지 않습니다. 두세 번째 사이클을 더 돈 뒤 호출하는 것이 효과적입니다.
-
Q: applied: discarded는 무엇인가요?
- A: 일회성으로 판정된 항목입니다. 패턴이 아니라 한 번의 우연으로 결론 났을 때 표시합니다.
/compound의 분석 대상에서 제외됩니다.
- A: 일회성으로 판정된 항목입니다. 패턴이 아니라 한 번의 우연으로 결론 났을 때 표시합니다.
-
Q: 같은 패턴을 Rule로 할지 Hook으로 할지 애매하면?
- A: AI가 판단하기 어려운 미묘한 위반(맥락에 따라 허용 여부가 달라짐)은 Rule, 100% 기계적으로 패턴 매칭으로 잡히는 것은 Hook입니다. 판단이 어려우면 Hook을 먼저 써보고, 오탐이 많으면 Rule로 바꿉니다.
이어서 배울 내용
SDD 6단계 흐름을 처음부터 끝까지 살펴봤습니다. 다음 챕터부터는 한 Claude 사이클을 둘 이상 동시에 돌리는 단계로 넘어갑니다. 먼저 git worktree로 각 Claude에게 독립된 작업 폴더를 주는 격리 방법을 익히고, 이어 여러 Claude가 직접 협업하는 Agent Teams를 배웁니다.