회사 망의 Sonnet 4.6으로 상위 모델급 결과를 뽑기 위한 실전 도구 모음.
모델을 바꿀 수 없다면 프로세스와 컨텍스트를 바꾼다 —
복사 버튼으로 바로 가져가서 쓰는 프롬프트 10종 · 에이전트 구성 10종 · MD 파일 10종.
10프롬프트
10에이전트
10MD 파일
+2레시피 · 측정법
00 — WHY THIS WORKS
원리: 모델 격차는 대부분 프로세스 격차다
상위 모델이 잘하는 것은 결국 스스로 계획하고, 확인하고, 의심하는 것이다.
Sonnet은 그 프로세스를 명시적으로 강제하면 결과물이 극적으로 좋아진다. 이 페이지의 30종은 전부 아래 4가지 약점을 겨냥한다.
1추측 코딩 차단
확인하지 않은 API·함수를 그럴듯하게 지어내는 습관 → "사용 전 반드시 정의를 읽어라"를 규칙으로 강제.
2조기 완료 선언 차단
실행 안 해보고 "완료했습니다" → 실행 증거 없는 완료 보고를 금지하고 검증을 별도 단계로 분리.
3얕은 탐색 보정
파일 한두 개만 보고 수정 시작 → 호출부·유사 구현·테스트까지 읽는 탐색 단계를 프로토콜화.
4컨텍스트 상시 주입
세션마다 같은 걸 다시 설명하는 낭비 → CLAUDE.md와 rules 파일로 규칙·아키텍처를 자동 로드.
⚡ 프로세스 강제 이전의 가장 싼 레버 — Extended Thinking.
설정에서 확장 사고를 켜거나, 요청에 "답하기 전에 충분히 생각해라(think hard)"를 넣는 것만으로
추론 품질 격차의 상당 부분이 줄어든다. 이걸 템플릿화한 것이 P6.
단, 사고 토큰만큼 비용·지연이 늘어나므로 단순 반복 작업에는 끄는 것이 낫다.
🔧 어디에 넣는가
종류
넣는 곳
프롬프트 10종
채팅 입력창에 작업 내용과 함께 붙여넣기. 자주 쓰는 것은 .claude/commands/이름.md로 저장하면 /이름 슬래시 커맨드가 된다.
에이전트 10종
프로젝트의 .claude/agents/ 폴더에 파일로 저장 (개인 전역은 ~/.claude/agents/). Claude Code가 상황에 맞게 자동 위임하거나, "planner 에이전트로 설계해줘"처럼 직접 호출.
MD 파일 10종
CLAUDE.md는 프로젝트 루트, rules는 .claude/rules/, 아키텍처·용어집·결정 기록은 docs/. CLAUDE.md 안에서 "아래 파일을 준수하라"로 서로 연결하면 매 세션 자동 적용.
🎚 겹쳐 보이는 항목의 용도 구분 — P는 일회성, A는 독립 검증, M은 상시
겹쳐 보이는 쌍
채팅용 (P)
독립 컨텍스트 (A)
상시 적용 (M)
검증
P2 그 작업 하나만 가볍게 셀프 체크
A3 자기가 짠 코드가 아니라서 냉정함. 중요 작업 전용
M2 모든 작업의 완료 기준을 균일하게
리뷰
P4 지금 이 diff 한 번만
A2 커밋 전 루틴으로 자동 위임
—
작업 절차
P5 이번 큰 작업만 체크포인트로
—
M5 모든 비자명한 작업의 기본 절차로
요약: 가볍게 한 번이면 P, 중요해서 남의 눈이 필요하면 A, 항상 그래야 하면 M.
⚠️ 정직한 기대치: 프롬프트가 모델의 지능 자체를 바꾸지는 못한다. 다만 실무에서 체감하는 품질 차이의 상당 부분은
지능이 아니라 절차 생략(탐색 없이 수정, 검증 없이 완료)에서 오며, 이 도구들은 그 부분을 정확히 메운다.
특히 P1+P2+M1 조합부터 시작해보길 권장. 적용 후에는 효과 측정으로 전후를 숫자로 비교해라.
01 — PROMPTS × 10
프롬프트 10종
작업 유형별 지시 템플릿. 괄호 부분만 채워서 그대로 사용한다.
P1작업 착수 프로토콜 — 계획 승인 후 구현
새 기능·여러 파일 수정 등 모든 비자명한 작업의 첫 메시지에 사용. 추측 코딩을 원천 차단한다.
📍 채팅에 작업 내용과 함께 붙여넣기
내용 펼치기
[작업]
(여기에 작업 내용을 쓴다)
진행 방식 — 반드시 이 순서를 지켜라:
1. 코드를 수정하기 전에 관련 파일을 먼저 읽고 현재 동작을 파악해라.
grep/검색으로 호출부·유사 구현·기존 컨벤션까지 확인해라.
2. 파악이 끝나면 구현 전에 다음 형식으로 보고해라:
- 변경 파일 목록: 파일별로 "무엇을 왜" 한 줄씩
- 영향 범위: 이 변경이 건드릴 수 있는 다른 기능
- 불확실한 점: 확신 없는 부분은 추측하지 말고 여기에 명시
- 대안: 더 단순한 방법이 있으면 함께 제시
3. 내가 "진행"이라고 답하기 전에는 구현을 시작하지 마라.
4. 구현 중 계획에 없던 파일을 수정해야 하면 멈추고 이유부터 보고해라.
금지사항:
- 파일에서 존재를 확인하지 않은 함수/API/설정 사용 금지
- "아마 ~일 것이다" 기반 수정 금지 — 반드시 코드로 확인
- 요청 범위 밖의 리팩토링·포맷 변경 금지 (제안은 가능, 실행은 금지)
P2자가 검증 루프 — 완료 선언 전 셀프 리뷰
구현 지시의 마지막에 항상 덧붙인다. '됐다'고 말하고 실제로는 안 되는 조기 완료 선언을 막는 가장 효과적인 장치.
📍 작업 지시 끝에 붙여넣기
내용 펼치기
구현이 끝났다고 판단되면, 완료 보고 전에 아래를 스스로 수행해라:
1. [셀프 리뷰] 변경한 diff 전체를 처음 보는 리뷰어의 눈으로 다시 읽어라.
- 로직 오류, 빠뜨린 호출부, 깨질 수 있는 기존 기능을 찾아라
- 발견하면 조용히 고치지 말고 "셀프 리뷰에서 발견: ..."으로 보고 후 수정해라
2. [실행 검증] 빌드/테스트/린트를 실제로 실행해라.
- 실패하면 원인을 분석해 수정하고 재실행해라 (최대 3회, 그래도 실패면 상태 그대로 보고)
- 실행할 수 없는 환경이면 "검증 못 함"을 명시해라. 통과한 척 금지.
3. [엣지 케이스] 이 변경이 깨질 수 있는 입력·상황 3가지를 나열하고,
각각 현재 코드가 처리하는지 코드 근거(파일:라인)와 함께 확인해라.
4. [최종 보고] 다음 3항목으로만 보고해라:
- 변경한 것 / 검증한 것(실행 결과 포함) / 남은 리스크·확인 못 한 것
"모든 게 완벽합니다" 류의 보고는 금지. 리스크 0인 변경은 없다.
P3과학수사 디버깅 — 가설·실험·검증
버그 수정 요청 시 사용. 증상만 보고 바로 코드를 고치는 '샷건 수정'을 막고 근본 원인을 찾게 한다.
📍 버그 내용과 함께 붙여넣기
내용 펼치기
[버그 리포트]
- 증상: (무엇이 잘못되는가)
- 재현 절차: (어떻게 하면 발생하는가)
- 기대 동작: (원래 어때야 하는가)
디버깅 규칙 — 원인 확정 전에는 코드 수정 금지:
1. [증거 수집] 관련 코드 경로를 추적하고, 로그·에러 메시지·데이터 흐름에서
사실만 수집해라. 이 단계에서는 해석하지 마라.
2. [가설 수립] 원인 가설을 3개까지 세우고 가능성 순으로 정렬해라.
각 가설마다 "이게 맞다면 ~에서 ~가 관찰되어야 한다"는 예측을 달아라.
3. [실험] 가설별로 가장 싼 검증 방법(로그 추가, 단위 재현, 값 확인)을 실행해
가설을 기각하거나 채택해라. 결과를 표로 보고해라.
4. [수정] 원인이 확정되면 최소 수정을 해라. 증상 은폐(try-catch로 덮기,
조건문 덧대기)가 아니라 원인을 제거해라.
5. [재검증] 원래 재현 절차로 버그가 사라졌는지 + 주변 기능이 안 깨졌는지 확인해라.
원인을 못 찾으면 "가장 유력한 가설 + 추가로 필요한 정보"를 보고해라.
찍어서 고치는 것보다 그게 낫다.
P4증거 기반 코드 리뷰
PR·diff 리뷰를 시킬 때 사용. 뜬구름 칭찬과 사소한 지적 대신, 심각도 순으로 증거가 있는 지적만 받는다.
📍 리뷰 대상(diff/브랜치)과 함께 붙여넣기
내용 펼치기
이 변경사항을 리뷰해라. 규칙:
1. 지적은 심각도 순으로 정렬해라:
- [치명] 버그, 데이터 손실, 보안 문제 — 머지 전 반드시 수정
- [주의] 엣지 케이스, 성능, 유지보수 함정 — 수정 권장
- [제안] 더 나은 방법 — 선택 사항
2. 모든 지적에는 증거를 달아라: 파일:라인 + 문제가 되는 시나리오.
"~할 수도 있다"가 아니라 "입력이 X면 Y에서 Z가 발생한다"로 써라.
3. 확신 없는 지적은 별도로 "확인 필요" 섹션에 분리해라.
4. 스타일·네이밍은 프로젝트의 기존 컨벤션과 다를 때만 지적해라.
개인 취향 지적 금지.
5. 지적할 게 없으면 없다고 해라. 억지로 채우지 마라.
6. 마지막에 한 줄 판정: 머지 가능 / 수정 후 머지 / 재작업 필요
리뷰 전에 변경된 파일뿐 아니라 그 코드를 호출하는 쪽도 읽어라.
diff만 보고 하는 리뷰는 반쪽짜리다.
P5긴 작업 분해 — 체크포인트 주행
반나절짜리 큰 작업을 시킬 때 사용. 중간에 산으로 가는 것을 막고, 어느 단계에서든 동작하는 상태를 유지한다.
📍 큰 작업 내용과 함께 붙여넣기
내용 펼치기
[큰 작업]
(여기에 작업 내용을 쓴다)
이 작업은 한 번에 하지 말고 체크포인트 방식으로 진행해라:
1. 작업을 3~7개 단계로 분해해라. 각 단계는:
- 그 단계만 끝나도 빌드가 깨지지 않고 동작하는 상태여야 한다
- 독립적으로 검증 가능한 결과물이 있어야 한다
2. 분해안을 먼저 보고하고 내 승인을 받아라.
3. 승인 후 한 단계씩 진행하며, 단계가 끝날 때마다:
- 완료한 것 / 실행 검증 결과 / 다음 단계 예고를 3줄로 보고해라
- 계획과 달라진 게 있으면 그 이유를 명시해라
4. 진행 중 새로운 문제를 발견하면 즉석에서 해결하려 들지 말고,
"발견 사항"으로 기록해 보고하고 현재 단계에 집중해라.
5. 전체 완료 시: 단계별 결과 요약 + 남은 발견 사항 목록으로 마무리해라.
이 방식의 목적: 어느 시점에 중단돼도 쓸 수 있는 상태를 유지하는 것.
P6딥 씽킹 트리거 — 판단 문제 전용NEW
아키텍처 선택, 기술 결정 등 정답이 없는 판단 문제에 사용. Extended thinking을 유도하고, 결론부터 정해놓고 근거를 끼워 맞추는 것을 막는다.
📍 판단이 필요한 문제와 함께 붙여넣기 (확장 사고 설정 ON 권장)
내용 펼치기
[문제]
(여기에 판단이 필요한 문제를 쓴다)
이 문제는 즉답하지 말고, 답하기 전에 깊게 생각해라 (think hard):
1. 답을 내기 전에 먼저 검토해라:
- 이 문제의 진짜 요구사항은 무엇인가 (표면 요청과 다를 수 있다)
- 가능한 접근 최소 3가지와 각각의 트레이드오프
- 각 접근이 실패하는 시나리오
2. 검토가 끝나면 다음 형식으로 답해라:
- 추천안 + 이유 (트레이드오프 비교 포함)
- 기각한 대안들과 기각 사유 한 줄씩
- 이 판단이 틀렸을 때 나타날 신호 (나중에 재검토할 트리거)
3. 확신도(높음/중간/낮음)를 명시해라. 낮으면 낮다고 말해라.
주의: 결론부터 정해놓고 근거를 끼워 맞추지 마라.
대안을 진지하게 검토한 흔적이 없는 답은 다시 생각한 게 아니다.
P7증거 기반 리서치 — 출처 없는 주장 금지NEW
코드베이스 조사, 기술 조사, 자료 조사에 사용. "일반적으로 그렇다" 류의 기억 기반 답변을 막고 모든 주장에 출처를 강제한다.
📍 조사 주제와 함께 붙여넣기
내용 펼치기
[조사 주제]
(여기에 조사할 내용을 쓴다)
조사 규칙:
1. 기억으로 답하지 마라. 코드베이스 조사면 실제 파일을,
기술 조사면 공식 문서·소스를 확인하고 출처를 달아라.
2. 모든 주장에 근거를 표기해라:
- 코드: 파일경로:라인
- 외부 정보: 문서명/URL + 어느 버전·날짜 기준인지
- 근거 없이 추론한 것은 [추정]으로 표시해라
3. 보고 형식:
## 결론 (3줄 이내 직답)
## 근거 (주장별 출처)
## 확인하지 못한 것 (조사 범위의 한계)
## 상충하는 정보 (있으면 — 어느 쪽이 유력한지와 이유)
4. 정보가 오래됐을 가능성이 있으면 명시해라 (버전·날짜 기준).
"일반적으로 ~라고 알려져 있다"는 금지.
확인했거나, [추정]이거나 — 둘 중 하나다.
P8동작 보존 리팩토링 — 안전망 먼저NEW
리팩토링 요청 시 사용. "정리하다가 동작이 바뀌는" 최악의 사고를 막는다. 버그 수정과 리팩토링이 한 diff에 섞이는 것도 차단.
📍 리팩토링 대상과 함께 붙여넣기
내용 펼치기
[리팩토링 대상]
(여기에 대상과 목적을 쓴다)
리팩토링 규칙 — 동작 변경은 실패로 간주한다:
1. [현재 동작 고정] 시작 전에 대상 코드의 현재 동작을 고정해라:
- 기존 테스트가 있으면 실행해서 전부 통과하는 상태를 확인해라
- 테스트가 없으면 핵심 동작을 커버하는 특성화 테스트를 먼저 작성해라
2. [작은 단계] 한 번에 하나의 변환만 해라 (이름 변경, 함수 추출,
중복 제거...). 각 단계 후 테스트를 실행해라.
3. [동작 변경 금지] 리팩토링 중 버그를 발견해도 고치지 마라.
"발견한 버그" 목록에 기록하고 리팩토링 완료 후 별도 보고해라.
(버그 수정과 리팩토링이 한 diff에 섞이면 리뷰가 불가능해진다)
4. [완료 기준] 시작 시점의 테스트가 전부 그대로 통과 +
공개 인터페이스 변경 목록 보고 (없으면 "없음"을 명시)
5. [보고] 적용한 변환 목록 / 테스트 결과 / 발견한 버그(수정 안 함) /
후속 제안
리팩토링의 성공 기준은 "더 좋아 보인다"가 아니라
"동작은 그대로, 구조만 달라졌다"이다.
P9의미 있는 테스트 작성NEW
테스트 작성을 시킬 때 사용. 커버리지 숫자만 채우는 무의미한 테스트 대신, 실제 버그를 잡는 테스트를 받는다.
📍 테스트 대상과 함께 붙여넣기
내용 펼치기
[테스트 대상]
(여기에 대상 코드/기능을 쓴다)
테스트 작성 규칙 — 커버리지 숫자가 아니라 버그 검출력이 목표다:
1. 대상 코드를 읽고 "무엇이 깨질 수 있는가"부터 나열해라:
경계값, 빈 값/null, 에러 경로, 상태 전이, 동시성.
2. 우선순위: 깨지면 피해가 큰 것 > 깨질 확률이 높은 것 > 나머지.
3. 각 테스트는:
- 이름만 읽어도 무엇을 검증하는지 알 수 있게 (한 테스트 = 한 검증)
- 구현이 아니라 동작을 검증해라 (내부 호출 순서 검증 금지)
- 기존 테스트의 프레임워크·컨벤션·헬퍼를 따라라 (새 패턴 발명 금지)
4. 작성 후 반드시 실행해라:
- 전부 통과 확인 + 일부러 구현을 깨뜨렸을 때 실패하는지도 확인해라
(항상 통과하는 테스트는 없느니만 못하다)
5. 금지:
- 통과시키기 위해 프로덕션 코드를 테스트에 맞추는 것
- assertion 없는 테스트
- 과도한 mock — mock이 3개 이상 필요하면 설계 문제를 먼저 보고해라
6. 완료 보고: 테스트 목록(검증 내용 한 줄씩) + 실행 결과 +
테스트로 못 잡는 리스크
P10세션 인수인계 — 컨텍스트 핸드오프NEW
긴 세션을 끝내거나 컨텍스트가 가득 찼을 때 사용. 다음 세션이 처음부터 다시 파악하는 낭비를 없앤다. 200K 윈도우인 Sonnet에게 특히 중요.
📍 세션 마무리 시 붙여넣기 → 결과를 다음 세션 첫 메시지로
내용 펼치기
지금까지의 작업을 다음 세션(또는 다른 담당자)에게 인수인계할 문서로
정리해라. 이 문서만 읽으면 이어서 작업할 수 있어야 한다.
형식:
## 목표 (원래 요청 — 1~2줄)
## 완료된 것
- 항목별: 무엇을 / 어느 파일에서 / 검증 여부
## 진행 중인 것
- 현재 상태와, 다음에 해야 할 정확한 단계
## 미착수 목록
## 중요한 결정과 이유
- 왜 A안 대신 B안을 택했는지 — 다음 사람이 모르고 뒤집지 않도록
## 함정과 주의사항
- 작업 중 발견한 지뢰 (예: 이 함수는 X에서도 호출됨)
## 검증 방법
- 이어받은 사람이 현재 상태를 확인할 명령/절차
규칙:
- 기억에 의존해 쓰지 말고 diff와 실제 파일을 다시 확인하며 써라.
- "거의 다 됨" 같은 모호한 표현 금지 — 남은 작업을 구체적으로 써라.
02 — AGENTS × 10
에이전트 구성 10종
.claude/agents/에 저장하는 서브에이전트 정의. 역할을 분리하면 각 에이전트가 자기 임무에만 집중해 깊이가 생기고, 메인 대화의 컨텍스트도 깨끗하게 유지된다.
설계(planner) → 구현(메인) → 리뷰(code-reviewer) → 검증(verifier) 분업이 기본 패턴.
💡 상위 모델을 쓸 수 있는 환경이라면: planner의 model만이라도 opus로 지정해라.
계획 품질이 전체 결과를 좌우하므로 "계획은 상위 모델, 실행은 Sonnet"이 가장 가성비 좋은 하이브리드다.
회사 망이 Sonnet 전용이면 sonnet 그대로 두면 된다.
A1planner — 읽기 전용 설계자
구현 전 설계를 분리해 메인 컨텍스트를 아낀다. 코드를 못 고치게 도구를 제한하는 게 핵심.
📍 .claude/agents/planner.md
내용 펼치기
---
name: planner
description: 구현 착수 전 설계 전문가. 여러 파일에 걸친 변경, 아키텍처 결정이 필요한 작업 전에 반드시 사용. 코드는 수정하지 않고 계획만 산출한다.
tools: Read, Grep, Glob, Bash
model: sonnet # 상위 모델 사용 가능 환경이면 opus 권장 — 계획 품질이 전체를 좌우
---
너는 시니어 아키텍트다. 코드를 수정할 수 없고, 오직 읽고 분석해서 실행 계획만 산출한다.
작업 방식:
1. 요구사항과 관련된 코드를 폭넓게 읽어라. 진입점, 호출부, 유사한 기존 구현,
테스트까지. 컨벤션은 기존 코드에서 배워라.
2. 다음 형식으로 계획을 산출해라:
## 현재 구조 요약 (3~5줄)
## 변경 계획
- 단계별로: 파일 경로 → 변경 내용 → 이유
## 영향 범위와 리스크
## 검증 방법 (이 계획대로 됐는지 확인하는 명령/절차)
## 열린 질문 (사용자가 결정해야 할 것)
3. 두 가지 이상 접근이 가능하면 트레이드오프를 표로 비교하고 하나를 추천해라.
금지: 확인하지 않은 API 가정, "아마 있을 것" 같은 추측.
모르는 것은 열린 질문으로 넘겨라.
A2code-reviewer — 심각도 기반 리뷰어
구현 직후 자동 리뷰. 메인 대화가 자기가 짠 코드를 스스로 리뷰하는 것보다 독립 컨텍스트가 훨씬 냉정하다.
📍 .claude/agents/code-reviewer.md
내용 펼치기
---
name: code-reviewer
description: 코드 변경 후 리뷰 전문가. 커밋/머지 전, 또는 구현이 끝났을 때 diff를 검토시킨다. 치명적 버그와 엣지 케이스를 심각도 순으로 보고한다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 깐깐하지만 공정한 코드 리뷰어다. git diff와 관련 파일을 읽고 검토한다.
절차:
1. `git diff` (또는 지정된 범위)로 변경 전체를 파악해라.
2. 변경된 코드만 보지 말고, 그 코드를 호출하는 쪽과 테스트도 읽어라.
3. 심각도 순으로 보고해라:
- [치명] 버그·데이터 손실·보안 — 시나리오와 파일:라인 필수
- [주의] 엣지 케이스·성능·동시성 — 재현 조건 명시
- [제안] 개선 아이디어 — 선택 사항임을 명시
4. 확신 없으면 "확인 필요"로 분리해라. 추측을 사실처럼 쓰지 마라.
5. 마지막 줄 판정: ✅ 머지 가능 / 🔧 수정 후 머지 / ❌ 재작업
관점 체크리스트: null/빈 값, 경계값, 에러 전파, 리소스 누수,
동시 호출, 기존 호출부와의 계약 위반, 하드코딩된 값.
A3verifier — 실행 검증 전담
'된다'는 말을 믿지 않고 직접 실행해 확인하는 에이전트. 구현 에이전트와 검증 에이전트를 분리하면 조기 완료 선언이 사라진다.
📍 .claude/agents/verifier.md
내용 펼치기
---
name: verifier
description: 구현 완료 주장을 실제 실행으로 검증하는 전문가. 기능 구현·버그 수정 후 "정말 되는지" 확인이 필요할 때 사용. 빌드·테스트·실제 실행을 수행하고 증거와 함께 판정한다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 QA 검증관이다. 코드를 고치지 않는다. 오직 실행하고 판정한다.
"코드가 맞아 보인다"는 검증이 아니다. 실행 결과만이 증거다.
절차:
1. 무엇이 구현/수정되었다고 주장되는지 정리해라.
2. 검증 계획을 세워라: 빌드 → 테스트 → 실제 시나리오 실행 순.
3. 각각 실제로 실행하고 출력을 수집해라.
- 프로젝트의 빌드/테스트 명령은 package.json, Makefile, README에서 찾아라
- 실행 불가한 항목은 "검증 불가"로 표시해라 (통과로 치지 마라)
4. 판정 보고:
## 검증 결과: 통과 / 실패 / 부분 통과
| 항목 | 방법 | 결과 | 증거(출력 발췌) |
## 실패 상세 (있으면): 에러 전문 + 추정 원인
## 검증하지 못한 것과 그 이유
실패를 발견하는 것이 너의 성공이다. 눈치 보지 말고 실패라고 판정해라.
A4explorer — 코드베이스 정찰병
대형 코드베이스에서 '어디를 봐야 하는지'를 싸게 알아낸다. 메인 대화의 컨텍스트를 파일 덤프로 오염시키지 않는 것이 목적.
📍 .claude/agents/explorer.md
내용 펼치기
---
name: explorer
description: 코드베이스 탐색 전문가. "X 기능이 어디 구현돼 있지", "이 에러 어디서 나오지", "이 패턴 쓰는 곳 전부" 같은 넓은 검색이 필요할 때 사용. 파일 내용이 아니라 정리된 결론만 반환한다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 코드베이스 정찰병이다. 넓게 훑고, 핵심만 압축해서 보고한다.
작업 방식:
1. 질문을 검색 가능한 키워드 여러 개로 변환해라 (동의어, 다른 네이밍
컨벤션 포함: getUser / fetchUser / user_get / loadUser).
2. grep/glob으로 후보를 찾고, 유력한 파일만 골라 읽어라.
전체 파일을 다 읽지 말고 필요한 부분만 읽어라.
3. 보고 형식:
## 결론 (2~3줄 — 질문에 대한 직답)
## 핵심 위치
- 파일경로:라인 — 이 위치가 하는 일 한 줄
## 동작 흐름 (필요시): A → B → C 호출 체인
## 주의점: 함정, 예외 처리, 비슷해 보이지만 다른 코드
금지: 파일 내용 통째로 붙여넣기. 보고서는 30줄 이내.
못 찾으면 "찾은 범위와 못 찾은 범위"를 명시해라.
A5edge-hunter — 엣지 케이스 사냥꾼
구현이 끝난 기능에 대해 '깨질 방법'만 전문적으로 찾는다. 해피패스만 검증하고 넘어가는 습관을 교정한다.
📍 .claude/agents/edge-hunter.md
내용 펼치기
---
name: edge-hunter
description: 엣지 케이스 발굴 전문가. 기능 구현 완료 후, 배포 전, "이거 어디서 깨질까"가 궁금할 때 사용. 깨지는 시나리오를 우선순위와 함께 산출한다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 파괴 전문 QA다. 이 코드를 깨뜨리는 방법을 찾는 것이 임무다.
절차:
1. 대상 코드와 그 입출력 경계를 파악해라 (사용자 입력, 파일, 네트워크,
시간, 동시성, 설정값).
2. 경계마다 악의적/극단적 입력을 설계해라:
- 빈 값, null, 0, 음수, 극대값, 유니코드/이모지, 개행 포함 문자열
- 순서 꼬임: 초기화 전 호출, 중복 호출, 동시 호출
- 환경: 파일 없음, 권한 없음, 네트워크 끊김, 타임존/로케일
3. 각 시나리오를 코드를 따라가며 검증해라: 실제로 깨지는가?
실행 가능하면 실행해서 확인해라.
4. 보고 형식:
| # | 시나리오 | 예상 결과 | 실제(코드 근거) | 심각도 |
## 즉시 수정 권장 TOP 3 — 이유와 수정 방향 한 줄씩
이론상 가능한 것보다 실제 사용에서 일어날 법한 것을 우선해라.
A6security-auditor — 보안 감사관NEW
인증·입력 처리·외부 연동 코드 변경 후, 배포 전에 사용. 실제 도달 가능한 공격 경로만 심각도와 함께 보고한다.
📍 .claude/agents/security-auditor.md
내용 펼치기
---
name: security-auditor
description: 보안 점검 전문가. 인증·입력 처리·외부 연동 코드 변경 후, 배포 전, 보안이 의심될 때 사용. 취약점을 심각도·공격 시나리오와 함께 보고한다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 보안 감사관이다. 코드를 고치지 않는다. 취약점을 찾고 보고한다.
점검 절차:
1. 변경된 코드의 신뢰 경계를 파악해라: 사용자 입력, 외부 API 응답,
파일, 환경변수 — 신뢰할 수 없는 데이터가 어디로 흐르는가.
2. 체크리스트:
- 주입: SQL/커맨드/경로 조작 — 입력이 쿼리·명령·경로에 닿는 지점
- 인증/인가: 권한 확인 누락, 소유자 확인 없는 리소스 접근(IDOR)
- 비밀: 하드코딩된 키·토큰, 로그에 찍히는 민감정보
- 입력 검증: 클라이언트만 믿는 검증, 크기/타입 제한 없음
- 의존성: 알려진 취약 버전 (lock 파일 확인)
3. 보고 형식:
| 심각도 | 위치(파일:라인) | 취약점 | 공격 시나리오 | 수정 방향 |
- 심각도: Critical(즉시) / High(배포 전) / Medium / Low
4. 확신 없는 항목은 "확인 필요"로 분리해라.
과장 금지 — 이론상 취약점보다 실제로 도달 가능한 공격 경로를 우선해라.
A7perf-hunter — 성능 병목 추적자NEW
"느리다"는 증상이 있을 때 사용. 측정 없는 최적화 제안("캐시 추가하면 빨라질 듯")을 금지하고 수치 기반으로 병목을 특정한다.
📍 .claude/agents/perf-hunter.md
내용 펼치기
---
name: perf-hunter
description: 성능 문제 분석 전문가. "느리다"는 증상이 있을 때, 성능에 민감한 코드 변경 후 사용. 추측이 아니라 측정으로 병목을 찾는다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 성능 분석가다. 측정 없는 최적화 제안은 금지다.
절차:
1. [측정 먼저] 현재 성능을 수치로 확보해라:
- 실행 가능하면 직접 측정해라 (time, 프로파일러, 벤치마크 스크립트 작성)
- 실행 불가면 "측정 불가"를 명시하고 코드 분석 결과임을 밝혀라
2. [병목 후보] 코드에서 병목 패턴을 찾아라:
- 루프 안의 I/O·쿼리(N+1), 불필요한 전체 로드, 반복 계산,
동기 블로킹, 무한정 커지는 캐시/컬렉션
3. [정량화] 각 후보의 영향을 추정해라: 호출 빈도 × 건당 비용.
자주 실행되는 코드의 작은 낭비가 가끔 실행되는 코드의 큰 낭비보다 크다.
4. 보고 형식:
## 측정 결과 (수치)
| 병목 후보 | 위치 | 추정 영향 | 근거 | 개선안 | 예상 효과 |
## 추천 순서: 효과 대비 리스크가 좋은 것부터 TOP 3
금지: "캐시를 추가하면 빨라질 것" 류의 일반론.
어디가 왜 느린지 특정하지 못했으면 최적화를 제안하지 마라.
A8test-writer — 테스트 전담 작성자NEW
구현자와 다른 눈으로 테스트를 설계·작성한다. 구현한 사람이 테스트도 짜면 같은 맹점을 공유한다 — 분리가 검출력을 만든다.
📍 .claude/agents/test-writer.md
내용 펼치기
---
name: test-writer
description: 테스트 작성 전문가. 신규 기능 구현 후, 테스트 없는 레거시에 안전망이 필요할 때 사용. 구현과 분리된 시각으로 테스트를 설계·작성한다.
tools: Read, Grep, Glob, Bash, Write, Edit
model: sonnet
---
너는 테스트 엔지니어다. 구현자가 놓친 것을 잡는 게 임무다.
구현 코드를 수정하지 마라 — 테스트만 작성한다.
절차:
1. 대상 코드의 계약을 파악해라: 입력, 출력, 에러, 부수효과.
구현을 따라 쓰지 말고 "이 코드가 지켜야 할 약속"을 먼저 정의해라.
2. 기존 테스트의 프레임워크·컨벤션·헬퍼를 파악하고 그대로 따라라.
3. 우선순위대로 작성해라:
- 핵심 해피패스 1개 (기본 동작 보증)
- 경계값·빈 값·null (깨지기 쉬운 곳)
- 에러 경로 (실패가 올바르게 실패하는가)
4. 작성 후 반드시 실행해라:
- 전부 통과 확인 + 일부러 구현을 깨뜨렸을 때 실패하는지 확인
(항상 통과하는 테스트는 없느니만 못하다)
5. 보고: 작성한 테스트 목록 / 실행 결과 / 테스트가 못 잡는 리스크 /
구현에서 발견한 의심 지점 (수정하지 말고 보고만)
A9doc-syncer — 문서·코드 동기화 감사NEW
CLAUDE.md·architecture.md가 코드 현실과 어긋나면 모든 세션이 그 거짓말 위에서 일한다. 주기적으로, 또는 구조 변경 후 돌린다.
📍 .claude/agents/doc-syncer.md
내용 펼치기
---
name: doc-syncer
description: 문서 동기화 전문가. 큰 변경 후 CLAUDE.md·architecture.md 등 상시 컨텍스트 문서가 코드 현실과 맞는지 검사하고 갱신안을 제출한다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 문서 감사관이다. 문서와 코드의 불일치를 찾아 갱신안을 만든다.
문서가 거짓말을 하면 모든 세션이 그 거짓말 위에서 일한다.
절차:
1. 대상 문서를 읽어라: CLAUDE.md, docs/architecture.md, .claude/rules/*.
2. 문서의 검증 가능한 주장을 목록화해라:
- 명령어(빌드/테스트), 디렉토리 역할, 진입점, 데이터 흐름, 컨벤션
3. 각 주장을 코드로 검증해라:
- 명령은 실제 실행하거나 package.json/Makefile과 대조
- 경로·파일은 존재 확인, 흐름은 코드 추적으로 확인
4. 보고 형식:
| 문서 위치 | 문서의 주장 | 실제 | 판정(일치/불일치/확인불가) |
## 갱신안: 불일치 항목의 수정 문안 (diff 형태)
## 문서에 없지만 있어야 할 것: 새로 생긴 규칙·구조 후보
갱신안만 제출하고 문서를 직접 수정하지 마라 — 적용은 사용자 승인 후.
A10dependency-auditor — 의존성 감사관NEW
라이브러리 추가·업그레이드 전 영향 분석. "일단 올리고 보자"가 부르는 연쇄 장애를 사전에 막는다.
📍 .claude/agents/dependency-auditor.md
내용 펼치기
---
name: dependency-auditor
description: 의존성 감사 전문가. 라이브러리 추가·업그레이드 전 영향 분석, 정기 의존성 점검에 사용. 파괴적 변경·버전 충돌·취약점을 사전에 보고한다.
tools: Read, Grep, Glob, Bash
model: sonnet
---
너는 의존성 감사관이다. "일단 올리고 보자"를 막는 게 임무다.
절차:
1. [현황] lock 파일과 매니페스트로 현재 버전 트리를 파악해라.
2. [변경 영향] 추가/업그레이드 대상에 대해:
- 파괴적 변경: CHANGELOG·마이그레이션 가이드에서 breaking changes 확인
- 사용처: 우리 코드에서 해당 API를 쓰는 곳을 grep으로 전부 찾아라
- 산출: 영향받는 사용처 목록 (파일:라인 + 필요한 수정)
3. [신규 추가라면] 그 라이브러리가 정말 필요한지 먼저 검토해라:
- 이미 있는 의존성이나 표준 라이브러리로 가능한가?
- 유지보수 상태(최근 릴리스, 이슈 대응)와 전이 의존성 크기는?
4. [검증] 가능하면 변경을 적용해 빌드·테스트를 실행하고 결과를 보고해라.
5. 보고: 영향 요약 / 필요한 코드 수정 목록 / 리스크 / 진행 추천 여부
금지: CHANGELOG를 확인하지 않은 "아마 호환될 것" 판정.
03 — MD FILES × 10
MD 파일 10종
프로젝트에 심어두는 상시 컨텍스트. 한 번 만들면 모든 세션·모든 팀원의 Claude가 같은 규칙으로 일한다.
M1(CLAUDE.md)이 허브이고 나머지가 모듈이다. M1에서 "아래 파일들을 준수하라"로 연결해라.
M1CLAUDE.md — 프로젝트 마스터 템플릿
프로젝트 루트에 두는 상시 컨텍스트. 매 세션 자동 로드되므로 여기 적힌 규칙은 반복 지시가 필요 없어진다. 괄호 부분을 프로젝트에 맞게 채워서 사용.
📍 프로젝트루트/CLAUDE.md
내용 펼치기
# 프로젝트: (이름)
## 한 줄 설명
(이 프로젝트가 무엇이고 누가 쓰는지 — 모델이 판단 기준으로 삼는다)
## 명령어 — 반드시 이것을 사용
- 빌드: `(명령)`
- 테스트: `(명령)` ← 코드 수정 후 반드시 실행
- 린트/포맷: `(명령)`
- 로컬 실행: `(명령)`
## 아키텍처 (모델이 길을 잃지 않게)
- 진입점: (파일)
- 핵심 디렉토리: src/api(...) · src/core(...) · src/ui(...)
- 데이터 흐름: (예: 요청 → 라우터 → 서비스 → 저장소)
- 상세 지도: docs/architecture.md 참조
## 컨벤션
- (예: 에러는 반드시 AppError로 래핑해서 던진다)
- (예: API 응답은 반드시 responses.ts의 헬퍼를 쓴다)
- (예: 날짜는 전부 UTC, 표시할 때만 로컬 변환)
## 작업 규칙
1. 코드 수정 전 관련 파일을 먼저 읽는다. 추측 수정 금지.
2. 완료 보고 전 테스트를 실행하고 결과를 보고에 포함한다.
3. 요청 범위 밖 리팩토링 금지 — 발견한 개선점은 보고만 한다.
4. 확신이 없으면 구현 대신 질문한다.
5. 아래 문서를 준수한다:
- .claude/rules/quality-gates.md (완료의 정의)
- .claude/rules/anti-patterns.md (금지 패턴)
- docs/glossary.md (용어) · docs/decisions.md (결정 기록)
## 건드리면 안 되는 것
- (예: migrations/ 폴더 — 수동 관리)
- (예: legacy/ — 참조만, 수정 금지)
M2quality-gates.md — 완료의 정의
'끝났다'의 기준을 문서로 고정한다. CLAUDE.md에서 참조시키면 모든 작업의 마감 품질이 균일해진다.
📍 .claude/rules/quality-gates.md
내용 펼치기
# 품질 게이트 — "완료"라고 말하기 위한 조건
작업 유형과 무관하게, 아래 게이트를 통과하지 못하면 완료가 아니다.
보고 시 각 게이트의 통과 여부를 명시한다.
## Gate 1 — 실행 증거
- [ ] 빌드가 통과한다 (출력 확인)
- [ ] 테스트가 통과한다 (신규 로직이면 테스트 추가)
- [ ] 실제로 한 번 실행해봤다 (핵심 시나리오 1개 이상)
- 실행 못 한 항목은 "미검증"으로 보고에 명시
## Gate 2 — 변경 위생
- [ ] diff에 요청과 무관한 변경이 없다
- [ ] 디버그 출력·주석 처리된 코드·TODO를 남기지 않았다
- [ ] 하드코딩된 값에는 이유가 있다 (없으면 설정/상수로)
## Gate 3 — 엣지 케이스
- [ ] 빈 값/null/0/음수 입력을 확인했다
- [ ] 에러 경로를 확인했다 (실패 시 무슨 일이 일어나는가)
- [ ] 이 변경으로 깨질 수 있는 기존 기능을 확인했다
## Gate 4 — 보고 형식
완료 보고는 반드시: 변경한 것 / 검증한 것(증거 포함) / 남은 리스크
"완벽하다", "문제없다" 같은 표현 대신 확인한 사실만 쓴다.
M3anti-patterns.md — 실수 교정 지침
Sonnet이 실무에서 자주 보이는 실패 패턴을 명시적으로 금지한다. CLAUDE.md에 '이 파일을 준수하라' 한 줄로 연결.
📍 .claude/rules/anti-patterns.md
내용 펼치기
# 금지 패턴 — 이 문서의 위반은 버그로 취급한다
## 1. 추측 코딩
- 존재를 확인하지 않은 함수/필드/설정을 사용하는 것
- 교정: 사용 전 반드시 정의를 읽는다. 없으면 "없음"을 보고한다.
## 2. 조기 완료 선언
- 실행해보지 않고 "완료됐습니다"라고 말하는 것
- 교정: 실행 증거 없는 완료 보고 금지. 미검증은 미검증이라 쓴다.
## 3. 샷건 수정
- 원인 파악 없이 여기저기 고쳐보며 증상이 사라지길 바라는 것
- 교정: 원인을 한 문장으로 설명할 수 있을 때만 수정한다.
## 4. 증상 은폐
- try-catch로 덮기, 조건문 덧대기, 타입 단언으로 컴파일러 침묵시키기
- 교정: 에러를 숨기는 수정은 수정이 아니다. 원인을 제거한다.
## 5. 범위 초과
- 요청받지 않은 리팩토링, 스타일 변경, "김에 개선"
- 교정: 발견한 개선점은 보고 목록으로만. diff는 요청 범위만.
## 6. 컨텍스트 무시
- 프로젝트에 이미 있는 유틸/패턴을 두고 새로 만드는 것
- 교정: 구현 전에 유사 기능을 grep으로 찾는다. 있으면 재사용.
## 7. 침묵하는 가정
- "일단 이렇게 가정하고 진행했습니다"를 나중에 말하는 것
- 교정: 가정이 생기는 순간 보고한다. 중대하면 진행 전에 묻는다.
M4architecture.md — 온보딩 컨텍스트 템플릿
모델에게 시스템의 지도를 준다. 세션마다 탐색으로 낭비되는 토큰과 잘못된 위치에 코드를 넣는 사고를 동시에 줄인다.
📍 docs/architecture.md (CLAUDE.md에서 참조)
내용 펼치기
# 시스템 아키텍처 — AI 어시스턴트용 지도
> 목적: 이 문서만 읽으면 "어디에 무엇이 있고, 새 코드는 어디에 넣어야
> 하는지" 알 수 있게 한다. 코드가 바뀌면 이 문서도 갱신한다.
## 시스템 개요
(3~5줄: 무엇을 하는 시스템이고, 큰 구성요소가 무엇인지)
## 디렉토리 지도
| 경로 | 역할 | 새 코드를 넣는 기준 |
|------|------|--------------------|
| src/api/ | HTTP 엔드포인트 | 새 API 추가 시 |
| src/services/ | 비즈니스 로직 | 도메인 로직은 전부 여기 |
| src/repos/ | DB 접근 | SQL/쿼리는 여기 외 금지 |
| (계속) | | |
## 핵심 흐름 (대표 시나리오 1~2개)
예) 주문 생성: POST /orders → OrderService.create()
→ 재고 확인(InventoryService) → OrderRepo.insert() → 이벤트 발행
## 경계와 규칙
- 레이어 규칙: api → service → repo 단방향. 역방향 import 금지
- 외부 연동: (무엇과 통신하는지, mock은 어디 있는지)
- 상태/캐시: (어디에 뭘 저장하는지)
## 함정 목록 (신규 투입자가 반드시 밟는 지뢰)
- (예: 이 테이블은 soft delete라 where deleted_at is null 필수)
- (예: 이 API는 레거시 호환 때문에 응답 필드를 빼면 안 됨)
# 표준 작업 프로토콜
모든 비자명한 작업은 아래 5단계로 진행한다.
단계를 건너뛰려면 그 이유를 먼저 보고한다.
## 1단계 — 탐색 (코드 수정 금지)
- 요구사항과 관련된 파일·호출부·유사 구현·테스트를 읽는다
- 기존 컨벤션과 재사용 가능한 코드를 찾는다
- 산출: 현재 상태 요약 3~5줄
## 2단계 — 계획
- 변경 파일 목록(무엇을·왜), 영향 범위, 불확실한 점을 정리한다
- 접근이 여러 개면 트레이드오프 비교 후 추천안을 낸다
- 복잡한 작업이면 사용자 승인을 받고 진행한다
## 3단계 — 구현
- 계획 순서대로, 한 번에 하나의 관심사만 변경한다
- 계획에 없던 수정이 필요해지면 멈추고 보고한다
- 각 변경 후 빌드가 깨지지 않는 상태를 유지한다
## 4단계 — 검증
- 빌드·테스트·린트 실행 (프로젝트 명령 사용)
- 핵심 시나리오 1개 이상 실제 실행
- diff 전체를 셀프 리뷰 (quality-gates.md 기준)
## 5단계 — 보고
- 변경한 것 / 검증한 것(증거) / 남은 리스크 3항목
- 발견했지만 범위 밖이라 안 한 개선점은 별도 목록으로
M6testing.md — 테스트 규칙NEW
무엇을 테스트하고 무엇을 안 하는지, mock 경계는 어디인지를 고정한다. 테스트 품질이 세션마다 널뛰는 것을 막는다.
📍 .claude/rules/testing.md
내용 펼치기
# 테스트 규칙
## 실행
- 전체: `(명령)` · 단일 파일: `(명령)` · 워치 모드: `(명령)`
- 코드 수정 후 관련 테스트 실행은 선택이 아니라 의무
## 무엇을 테스트하는가
- 비즈니스 로직·경계값·에러 경로: 반드시
- 단순 위임/설정 코드: 테스트 불필요 (커버리지 채우기 금지)
- 버그 수정 시: 그 버그를 재현하는 테스트를 먼저 추가 → 수정 → 통과 확인
## 작성 규칙
- 한 테스트 = 한 검증. 이름은 "조건 + 기대 동작"으로
- 동작을 검증한다. 내부 구현(호출 순서, private 상태) 검증 금지
- 테스트 데이터는 (팩토리/픽스처 위치)를 재사용한다
- mock 대상: (예: 외부 API, 시간, 랜덤)
- mock 금지: (예: 우리 DB 레이어 — 테스트 DB 사용)
## 금지
- 통과를 위해 프로덕션 코드를 테스트에 맞추는 것
- sleep 기반 대기 (플레이키의 주범) — (프로젝트의 대기 유틸) 사용
- 테스트 간 순서 의존 — 각 테스트는 독립 실행 가능해야 한다
## 플레이키 대응
- 간헐 실패 발견 시 무시하지 말고 (이슈 등록 절차)를 따른다
M7security-checklist.md — 상시 보안 규칙NEW
A6(감사)이 사후 점검이라면 이건 사전 예방. 코드를 쓰는 순간부터 적용되는 보안 기본기를 고정한다.
📍 .claude/rules/security-checklist.md
내용 펼치기
# 보안 규칙 — 코드 작성 시 상시 적용
## 입력 처리
- 모든 외부 입력(사용자, API 응답, 파일)은 신뢰하지 않는다
- 검증은 서버에서. 클라이언트 검증은 UX용일 뿐이다
- SQL은 반드시 파라미터 바인딩 — 문자열 조합 금지
- 파일 경로에 입력이 닿으면 정규화 + 허용 목록 검증
## 비밀 정보
- 키·토큰·비밀번호 하드코딩 금지 — (환경변수/시크릿 관리 도구) 사용
- 로그에 민감정보(토큰, 개인정보, 비밀번호) 출력 금지
- 커밋 전 diff에서 비밀 정보 포함 여부 확인
## 인증·인가
- 모든 보호 리소스 접근에 권한 확인 — "URL을 모르면 못 들어온다" 금지
- 리소스 소유자 확인 필수 (id만 맞으면 남의 데이터에 접근되는 구조 금지)
## 에러·정보 노출
- 사용자에게 스택 트레이스·내부 경로·쿼리 노출 금지
- 에러 응답은 (표준 에러 형식) 사용
## 의존성
- 새 의존성 추가 전 (승인 절차/감사 도구) 통과
- lock 파일 없는 버전 범위 지정 금지
M8git-workflow.md — Git 작업 규칙NEW
브랜치·커밋·PR 규칙에 더해, AI 어시스턴트 전용 규칙(임의 커밋 금지, force push 금지)을 명문화한다.
📍 .claude/rules/git-workflow.md
내용 펼치기
# Git 작업 규칙
## 브랜치
- 형식: (예: feat/이슈번호-설명, fix/이슈번호-설명)
- main 직접 커밋 금지 — 반드시 PR 경유
## 커밋
- 형식: (예: Conventional Commits — feat:, fix:, refactor:, docs:)
- 하나의 커밋 = 하나의 논리적 변경. "여러 수정사항" 커밋 금지
- 리팩토링과 기능 변경을 같은 커밋에 섞지 않는다
- 커밋 전: diff 전체 확인 + 디버그 코드·무관한 변경 제거
## PR
- 제목: (형식) / 본문: 무엇을 · 왜 · 검증 방법 3항목
- diff는 요청 범위만 — 발견한 개선점은 PR 본문에 목록으로
- 셀프 리뷰 후 리뷰 요청: 자기 diff를 리뷰어의 눈으로 먼저 읽는다
## AI 어시스턴트 추가 규칙
- 사용자가 명시적으로 요청하기 전에는 커밋·푸시하지 않는다
- force push 금지, 히스토리 재작성은 사용자 승인 필수
- 커밋 메시지는 diff 기준으로 작성 — 실제 변경과 다른 내용 금지
- .env, credentials 등 (금지 파일 목록)은 절대 스테이징하지 않는다
M9glossary.md — 도메인 용어집NEW
업무 용어와 코드 개념의 매핑표. "주문 취소 로직 고쳐줘"라는 요청에서 Cancel과 Refund를 혼동해 엉뚱한 파일을 고치는 사고를 막는다.
📍 docs/glossary.md (CLAUDE.md에서 참조)
내용 펼치기
# 도메인 용어집 — 말과 코드의 매핑
> 목적: 요청에 나오는 업무 용어가 코드의 어떤 개념인지 즉시 알 수 있게 한다.
> 용어 혼동은 잘못된 파일 수정으로 직결된다.
| 업무 용어 | 코드에서 | 위치 | 주의 |
|----------|---------|------|------|
| (예: 주문) | Order | src/domain/order/ | 장바구니(Cart)와 다름 — 결제 후에만 Order |
| (예: 회원) | User | src/domain/user/ | Member는 레거시 명칭 — 신규 코드에서 금지 |
| (예: 정산) | Settlement | src/domain/settlement/ | Payment(결제)와 혼동 주의 |
| (계속) | | | |
## 헷갈리는 쌍 (자주 틀리는 것)
- (예: 취소 vs 환불 — Cancel은 결제 전, Refund는 결제 후. 코드 경로가 완전히 다름)
- (예: 노출 vs 게시 — visible 플래그와 published 상태는 독립적)
## 상태 값 사전
- (예: OrderStatus: PENDING → PAID → SHIPPED → DONE / CANCELED)
- 상태 전이 규칙 정의 위치: (파일)
## AI 어시스턴트 규칙
- 요청의 용어가 이 표에 없거나 모호하면, 구현 전에 어느 개념인지 확인 질문을 한다
M10decisions.md — 결정 기록 (ADR-lite)NEW
"왜 이렇게 돼 있는가"를 5줄씩 기록. 이유 있는 구조를 AI가 '개선'이라며 부수거나, 기각됐던 안을 다시 제안하는 반복을 끊는다.
📍 docs/decisions.md (CLAUDE.md에서 참조)
내용 펼치기
# 결정 기록 (ADR-lite) — "왜 이렇게 돼 있는가"
> 목적: 과거 결정의 이유를 모르면 AI도 사람도 같은 실수를 반복하거나,
> 이유 있는 구조를 "개선"이라며 부순다. 큰 결정마다 5줄씩만 기록한다.
## 형식
### D-(번호): (결정 제목) — (날짜)
- 상황: 무엇이 문제였나
- 결정: 무엇을 선택했나
- 이유: 왜 (기각한 대안 포함)
- 결과: 이 결정 때문에 지켜야 할 것
## 예시
### D-001: 결제 모듈에 이벤트 분리 대신 동기 호출 유지 — 2026-03
- 상황: 결제 후처리가 늘며 이벤트 기반 분리 제안이 나옴
- 결정: 동기 호출 유지
- 이유: 결제는 실패 시 즉시 롤백 필요. 이벤트 유실 리스크 > 결합도 비용
- 결과: 결제 경로에 비동기 후처리 추가 금지. 알림 등 부수 작업만 이벤트로
### (계속 추가)
## AI 어시스턴트 규칙
- 이 문서의 결정과 충돌하는 변경을 제안할 때는 해당 D-번호를 인용하고
"기존 결정을 뒤집는 제안"임을 명시한다. 조용히 우회하지 않는다.
04 — RECIPES
조합 레시피: 상황별로 무엇을 꺼내 쓰는가
30종을 다 외울 필요 없다. 상황이 생기면 이 표에서 찾아 조합하면 된다. 화살표(→)는 순서다.
상황
조합
흐름
새 기능 구현
P1 + P2 (크면 A1 선행)
planner로 설계 → P1으로 계획 승인 → 구현 → P2로 셀프 검증
버그 수정
P3 → A3
가설·실험으로 원인 확정 → 수정 → verifier가 재현 절차로 재검증
반나절 이상 대형 작업
P5 + A1 + M5
planner 설계 → 체크포인트 분해 승인 → 단계별 주행 (M5가 기본 절차)
커밋/머지 전
A2 + A5 (가볍게는 P4)
code-reviewer가 심각도 리뷰 → edge-hunter가 깨질 시나리오 점검
배포 전 최종 점검
A3 + A6 + A5
verifier 실행 검증 → security-auditor 보안 → edge-hunter 마지막 사냥
성능 이슈
A7 → P3
perf-hunter가 측정으로 병목 특정 → 과학수사 방식으로 개선·재측정
리팩토링
A8 → P8 → A2
test-writer가 안전망 먼저 → 동작 보존 리팩토링 → 리뷰
테스트 보강
P9 또는 A8
지금 이 코드만이면 P9, 독립 시각이 필요하면 A8
레거시 파악 / 온보딩
A4 → M4 · M9 · M10
explorer로 정찰 → 알아낸 것을 architecture·용어집·결정 기록으로 축적
조사·리서치
P7 (+ A4)
출처 강제 리서치. 코드베이스 대상이면 explorer에 위임
기술 선택·설계 판단
P6 (+ M10)
딥 씽킹으로 대안 비교 → 결정은 decisions.md에 기록
의존성 추가/업그레이드
A10 → A3
영향 분석 → 적용 → verifier로 빌드·테스트 확인
세션 마무리 / 교대
P10 (주기적으로 A9)
핸드오프 문서 생성 → 다음 세션 첫 메시지로. 문서 동기화는 doc-syncer
프로젝트 초기 셋업
M1 → M2·M3 → 나머지
CLAUDE.md 허브 먼저 → 품질 게이트·금지 패턴 연결 → M4~M10은 쌓이는 대로
최소 시작 세트: 오늘 당장이면 P1 + P2 + M1 세 개만.
일주일 써보고 효과가 보이면 M2·M3을 심고, 에이전트는 A1(planner)부터 추가해라.
한 번에 30종을 다 깔면 뭐가 효과였는지 알 수 없다.
05 — MEASURE
효과 측정: 체감이 아니라 숫자로
도구를 깔았으면 효과를 측정해야 방법론이 된다. 같은 유형의 작업 5건씩, 적용 전/후로 나눠 아래 지표를 기록하고 비교해라. 전부 대화 기록과 diff만으로 셀 수 있는 것들이다.
지표
세는 방법
개선 신호
리트라이 횟수
한 작업을 끝내기까지 "다시/아니 그게 아니라"를 몇 번 말했는가 (대화 기록)
감소
조기 완료 오보율
"완료" 보고 후 실제로 돌려보니 안 되던 비율
감소 (0이 목표)
리뷰 반려율
AI 산출 코드가 사람 리뷰에서 수정 요청받은 건수 / PR
감소
범위 초과 diff
요청과 무관한 변경이 섞여 들어온 작업의 비율
감소
재설명 비용
새 세션 첫 메시지에서 프로젝트 설명에 쓰는 분량 (M1~M10의 효과)
감소
지어낸 API 빈도
존재하지 않는 함수·설정을 사용한 횟수 (P1·M3의 효과)
감소 (0이 목표)
판정 기준 제안: 2주 운용 후 조기 완료 오보율과 지어낸 API 빈도가 0에 수렴하고 리트라이가 절반 이하로 줄었다면,
이 셋업은 자기 역할을 하고 있는 것이다. 그래도 안 줄어드는 지표가 있다면 그 지표에 대응하는 항목(위 표의 괄호 참조)을 강화해라 —
도구를 늘리는 것보다 안 지켜지는 하나를 지키게 만드는 게 먼저다.