@kood/claude-code 0.5.1 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +604 -261
- package/package.json +1 -1
- package/templates/.claude/agents/analyst.md +6 -14
- package/templates/.claude/agents/architect.md +6 -14
- package/templates/.claude/agents/code-reviewer.md +8 -14
- package/templates/.claude/agents/dependency-manager.md +8 -14
- package/templates/.claude/agents/deployment-validator.md +8 -14
- package/templates/.claude/agents/designer.md +8 -0
- package/templates/.claude/agents/document-writer.md +75 -316
- package/templates/.claude/agents/explore.md +8 -3
- package/templates/.claude/agents/git-operator.md +63 -17
- package/templates/.claude/agents/implementation-executor.md +14 -37
- package/templates/.claude/agents/ko-to-en-translator.md +8 -13
- package/templates/.claude/agents/lint-fixer.md +8 -172
- package/templates/.claude/agents/planner.md +6 -14
- package/templates/.claude/agents/refactor-advisor.md +8 -14
- package/templates/.claude/commands/git-all.md +3 -167
- package/templates/.claude/commands/git-session.md +3 -71
- package/templates/.claude/commands/lint-fix.md +119 -82
- package/templates/.claude/commands/lint-init.md +2 -54
- package/templates/.claude/commands/pre-deploy.md +143 -82
- package/templates/.claude/commands/version-update.md +171 -66
- package/templates/.claude/instructions/agent-patterns/agent-coordination.md +208 -0
- package/templates/.claude/instructions/agent-patterns/index.md +264 -0
- package/templates/.claude/instructions/agent-patterns/model-routing.md +167 -0
- package/templates/.claude/instructions/agent-patterns/parallel-execution.md +91 -0
- package/templates/.claude/instructions/agent-patterns/read-parallelization.md +106 -0
- package/templates/.claude/instructions/document-templates/ralph-templates.md +71 -0
- package/templates/.claude/instructions/index.md +350 -0
- package/templates/.claude/instructions/multi-agent/agent-roster.md +811 -0
- package/templates/.claude/{PARALLEL_AGENTS.md → instructions/multi-agent/coordination-guide.md} +27 -336
- package/templates/.claude/instructions/{parallel-agent-execution.md → multi-agent/execution-patterns.md} +127 -438
- package/templates/.claude/instructions/multi-agent/index.md +282 -0
- package/templates/.claude/instructions/multi-agent/performance-optimization.md +456 -0
- package/templates/.claude/instructions/tech-stack/design-standards.md +282 -0
- package/templates/.claude/instructions/tech-stack/index.md +70 -0
- package/templates/.claude/instructions/tech-stack/prisma-patterns.md +352 -0
- package/templates/.claude/instructions/tech-stack/tanstack-patterns.md +275 -0
- package/templates/.claude/instructions/validation/forbidden-patterns.md +281 -0
- package/templates/.claude/instructions/validation/index.md +32 -0
- package/templates/.claude/instructions/validation/required-behaviors.md +331 -0
- package/templates/.claude/instructions/validation/verification-checklist.md +318 -0
- package/templates/.claude/instructions/workflow-patterns/index.md +18 -0
- package/templates/.claude/instructions/workflow-patterns/phase-based-workflow.md +250 -0
- package/templates/.claude/instructions/workflow-patterns/sequential-thinking.md +217 -0
- package/templates/.claude/instructions/workflow-patterns/todowrite-pattern.md +215 -0
- package/templates/.claude/skills/bug-fix/SKILL.md +972 -0
- package/templates/.claude/skills/docs-creator/AGENTS.md +54 -173
- package/templates/.claude/skills/docs-creator/SKILL.md +146 -254
- package/templates/.claude/skills/docs-refactor/AGENTS.md +61 -187
- package/templates/.claude/skills/docs-refactor/SKILL.md +84 -315
- package/templates/.claude/skills/execute/SKILL.md +454 -154
- package/templates/.claude/skills/figma-to-code/AGENTS.md +4 -1
- package/templates/.claude/skills/figma-to-code/SKILL.md +306 -0
- package/templates/.claude/skills/global-uiux-design/AGENTS.md +4 -1
- package/templates/.claude/skills/global-uiux-design/SKILL.md +455 -125
- package/templates/.claude/skills/korea-uiux-design/AGENTS.md +4 -1
- package/templates/.claude/skills/korea-uiux-design/SKILL.md +461 -116
- package/templates/.claude/skills/nextjs-react-best-practices/SKILL.md +177 -0
- package/templates/.claude/skills/plan/SKILL.md +1157 -87
- package/templates/.claude/skills/prd/SKILL.md +367 -66
- package/templates/.claude/skills/ralph/AGENTS.md +4 -1
- package/templates/.claude/skills/ralph/SKILL.md +100 -14
- package/templates/.claude/skills/refactor/AGENTS.md +269 -0
- package/templates/.claude/skills/refactor/SKILL.md +1572 -0
- package/templates/.claude/skills/stitch-design/README.md +34 -0
- package/templates/.claude/skills/stitch-design/SKILL.md +213 -0
- package/templates/.claude/skills/stitch-design/examples/DESIGN.md +154 -0
- package/templates/.claude/skills/stitch-loop/README.md +54 -0
- package/templates/.claude/skills/stitch-loop/SKILL.md +316 -0
- package/templates/.claude/skills/stitch-loop/examples/SITE.md +73 -0
- package/templates/.claude/skills/stitch-loop/examples/next-prompt.md +25 -0
- package/templates/.claude/skills/stitch-loop/resources/baton-schema.md +61 -0
- package/templates/.claude/skills/stitch-loop/resources/site-template.md +104 -0
- package/templates/.claude/skills/stitch-react/README.md +36 -0
- package/templates/.claude/skills/stitch-react/SKILL.md +323 -0
- package/templates/.claude/skills/stitch-react/examples/gold-standard-card.tsx +88 -0
- package/templates/.claude/skills/stitch-react/package-lock.json +231 -0
- package/templates/.claude/skills/stitch-react/package.json +16 -0
- package/templates/.claude/skills/stitch-react/resources/architecture-checklist.md +15 -0
- package/templates/.claude/skills/stitch-react/resources/component-template.tsx +37 -0
- package/templates/.claude/skills/stitch-react/resources/stitch-api-reference.md +14 -0
- package/templates/.claude/skills/stitch-react/resources/style-guide.json +24 -0
- package/templates/.claude/skills/stitch-react/scripts/fetch-stitch.sh +30 -0
- package/templates/.claude/skills/stitch-react/scripts/validate.js +77 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/SKILL.md +149 -0
- package/templates/.claude/commands/bug-fix.md +0 -510
- package/templates/.claude/commands/refactor.md +0 -788
|
@@ -0,0 +1,1572 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refactor
|
|
3
|
+
description: 코드 품질 개선을 위한 리팩토링 계획 수립 및 실행 전략 제시
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
@../../instructions/workflow-patterns/sequential-thinking.md
|
|
8
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
9
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
10
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
11
|
+
@../../instructions/validation/required-behaviors.md
|
|
12
|
+
|
|
13
|
+
# Refactor Skill
|
|
14
|
+
|
|
15
|
+
> 코드 품질 개선을 위한 리팩토링 계획 수립 및 실행 전략 제시
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
<when_to_use>
|
|
20
|
+
|
|
21
|
+
## 사용 시점
|
|
22
|
+
|
|
23
|
+
| 상황 | 예시 |
|
|
24
|
+
|------|------|
|
|
25
|
+
| **코드 품질 개선** | 복잡도 감소, 중복 코드 제거, 명명 개선 |
|
|
26
|
+
| **구조 개선** | 파일/모듈 구조 정리, 관심사 분리 |
|
|
27
|
+
| **점진적 개선** | 단계적 리팩토링 계획 필요 |
|
|
28
|
+
| **성능 최적화** | 코드 효율성 개선 (기능 유지) |
|
|
29
|
+
| **타입 안정성** | any 제거, 명시적 타입 정의 |
|
|
30
|
+
|
|
31
|
+
## 호출 방법
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# 직접 처리 (명확한 범위)
|
|
35
|
+
/refactor src/utils/auth.ts - 너무 복잡함
|
|
36
|
+
|
|
37
|
+
# @refactor-advisor 위임 (코드 품질 개선)
|
|
38
|
+
Task({
|
|
39
|
+
subagent_type: 'refactor-advisor',
|
|
40
|
+
model: 'sonnet',
|
|
41
|
+
description: '인증 모듈 리팩토링',
|
|
42
|
+
prompt: '복잡도 감소, 중복 제거, 타입 안정성 향상'
|
|
43
|
+
})
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 결과물
|
|
47
|
+
|
|
48
|
+
- 2-3개 리팩토링 옵션 제시 (장단점, 영향 범위)
|
|
49
|
+
- 추천안 및 근거
|
|
50
|
+
- 선택 후 `.claude/refactor/00.[모듈명]/` 폴더에 3개 문서 병렬 생성
|
|
51
|
+
- ANALYSIS.md, PLAN.md, METRICS.md
|
|
52
|
+
|
|
53
|
+
</when_to_use>
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
<argument_validation>
|
|
58
|
+
|
|
59
|
+
## ARGUMENT 필수 확인
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
$ARGUMENTS 없음 → 즉시 질문:
|
|
63
|
+
|
|
64
|
+
"무엇을 리팩토링해야 하나요? 구체적으로 알려주세요.
|
|
65
|
+
|
|
66
|
+
예시:
|
|
67
|
+
- 특정 파일/모듈 개선
|
|
68
|
+
- 복잡도 감소
|
|
69
|
+
- 중복 코드 제거
|
|
70
|
+
- 구조 개선
|
|
71
|
+
- 성능 최적화"
|
|
72
|
+
|
|
73
|
+
$ARGUMENTS 있음 → 다음 단계 진행
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
</argument_validation>
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
<workflow>
|
|
81
|
+
|
|
82
|
+
## 실행 흐름
|
|
83
|
+
|
|
84
|
+
| 단계 | 작업 | 도구 |
|
|
85
|
+
|------|------|------|
|
|
86
|
+
| 1. 입력 확인 | ARGUMENT 검증, 없으면 질문 | - |
|
|
87
|
+
| 2. Agent 판단 | @refactor-advisor 사용 여부 결정 | - |
|
|
88
|
+
| 3. 복잡도 판단 | Sequential Thinking으로 분석 범위 결정 | sequentialthinking (1단계) |
|
|
89
|
+
| 4. 코드 분석 | 현재 코드 구조, 문제점, 메트릭 파악 | Task (Explore) + Read/Grep |
|
|
90
|
+
| 5. 개선 옵션 도출 | 가능한 접근 4-5개 → 주요 2-3개 선정 | sequentialthinking (2-6단계) |
|
|
91
|
+
| 6. 옵션 제시 | 장단점, 영향 범위, 추천안 제시 | - |
|
|
92
|
+
| 7. 문서 생성 | 옵션 선택 대기 후 3개 문서 병렬 생성 | Task (document-writer) 병렬 |
|
|
93
|
+
| 8. 구현 시작 | 문서 완료 즉시 구현 진행 (확인 불필요) | Skill (execute) |
|
|
94
|
+
|
|
95
|
+
</workflow>
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
<agent_priority>
|
|
100
|
+
|
|
101
|
+
## @refactor-advisor Agent 우선 사용
|
|
102
|
+
|
|
103
|
+
**기본 원칙:**
|
|
104
|
+
```
|
|
105
|
+
리팩토링 요청 → @refactor-advisor 먼저 고려
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 사용 조건
|
|
109
|
+
|
|
110
|
+
| 조건 | 설명 |
|
|
111
|
+
|------|------|
|
|
112
|
+
| **코드 품질 개선** | 복잡도, 중복, 명명, 구조 개선 |
|
|
113
|
+
| **기능 변경 없음** | 동작은 유지하며 코드만 개선 |
|
|
114
|
+
| **점진적 개선** | 단계적 리팩토링 계획 필요 |
|
|
115
|
+
|
|
116
|
+
### Agent 활용 흐름
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
1. @refactor-advisor 호출
|
|
120
|
+
→ 코드 분석, 우선순위별 개선점 도출
|
|
121
|
+
|
|
122
|
+
2. 분석 결과 기반 옵션 정리
|
|
123
|
+
→ 사용자에게 2-3개 옵션 제시
|
|
124
|
+
|
|
125
|
+
3. 선택 후 계획 문서 작성
|
|
126
|
+
→ .claude/plans/refactor-[이름].md
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Agent 미사용 케이스
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
✅ @refactor-advisor 사용:
|
|
133
|
+
- 기존 코드 개선
|
|
134
|
+
- 복잡도/중복 감소
|
|
135
|
+
- 구조 개선
|
|
136
|
+
|
|
137
|
+
❌ 직접 처리:
|
|
138
|
+
- 아키텍처 변경
|
|
139
|
+
- 새 기능 추가와 함께 리팩토링
|
|
140
|
+
- 프레임워크 마이그레이션
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
</agent_priority>
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
<parallel_agent_execution>
|
|
148
|
+
|
|
149
|
+
## 병렬 Agent 실행
|
|
150
|
+
|
|
151
|
+
**복잡한 리팩토링은 여러 Agent를 병렬로 실행하여 효율 향상.**
|
|
152
|
+
|
|
153
|
+
### 권장 Agent
|
|
154
|
+
|
|
155
|
+
| Agent | Model | 역할 |
|
|
156
|
+
|-------|-------|------|
|
|
157
|
+
| **@refactor-advisor** | sonnet | 리팩토링 계획 수립, 우선순위 분석 |
|
|
158
|
+
| **@architect** | opus | 아키텍처 분석, 구조 개선 방향 제시 (READ-ONLY) |
|
|
159
|
+
| **@implementation-executor** | sonnet | 리팩토링 구현 실행 |
|
|
160
|
+
| **@code-reviewer** | opus | 리팩토링 후 품질 검증 |
|
|
161
|
+
| **@analyst** | sonnet | 코드 메트릭 분석, 엣지 케이스 검증 |
|
|
162
|
+
| **@explore** | haiku | 코드베이스 탐색, 의존성 파악 |
|
|
163
|
+
| **@document-writer** | haiku/sonnet | 리팩토링 계획 및 결과 문서화 |
|
|
164
|
+
|
|
165
|
+
### 병렬 실행 패턴
|
|
166
|
+
|
|
167
|
+
### Read 도구 병렬화
|
|
168
|
+
|
|
169
|
+
**프로젝트 분석 시 파일 병렬 읽기:**
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
// ❌ 순차 읽기 (느림)
|
|
173
|
+
Read({ file_path: "src/file1.ts" })
|
|
174
|
+
// 대기...
|
|
175
|
+
Read({ file_path: "src/file2.ts" })
|
|
176
|
+
|
|
177
|
+
// ✅ 병렬 읽기 (빠름)
|
|
178
|
+
Read({ file_path: "src/file1.ts" })
|
|
179
|
+
Read({ file_path: "src/file2.ts" })
|
|
180
|
+
Read({ file_path: "src/file3.ts" })
|
|
181
|
+
Read({ file_path: "docs/api.md" })
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**복잡한 탐색은 explore 에이전트 활용:**
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// 여러 영역 동시 탐색
|
|
188
|
+
Task(subagent_type="explore", model="haiku",
|
|
189
|
+
prompt="영역 1 파일 구조 및 패턴 분석")
|
|
190
|
+
Task(subagent_type="explore", model="haiku",
|
|
191
|
+
prompt="영역 2 의존성 및 관계 분석")
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
#### 1. 독립적 모듈 병렬 리팩토링
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
// ✅ 여러 모듈을 동시에 리팩토링
|
|
200
|
+
Task({
|
|
201
|
+
subagent_type: "implementation-executor",
|
|
202
|
+
model: "sonnet",
|
|
203
|
+
prompt: "User 모듈 리팩토링: 복잡도 감소, 중복 제거"
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
Task({
|
|
207
|
+
subagent_type: "implementation-executor",
|
|
208
|
+
model: "sonnet",
|
|
209
|
+
prompt: "Product 모듈 리팩토링: 타입 안정성 개선"
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
Task({
|
|
213
|
+
subagent_type: "implementation-executor",
|
|
214
|
+
model: "sonnet",
|
|
215
|
+
prompt: "Order 모듈 리팩토링: 함수 분리"
|
|
216
|
+
})
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### 2. 분석 + 계획 병렬
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
// ✅ 아키텍처 분석과 리팩토링 계획을 동시에
|
|
223
|
+
Task({
|
|
224
|
+
subagent_type: "architect",
|
|
225
|
+
model: "opus",
|
|
226
|
+
prompt: "현재 아키텍처 문제점 및 개선 방향 분석 (READ-ONLY)"
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
Task({
|
|
230
|
+
subagent_type: "refactor-advisor",
|
|
231
|
+
model: "sonnet",
|
|
232
|
+
prompt: "리팩토링 우선순위 계획 및 단계별 전략"
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
Task({
|
|
236
|
+
subagent_type: "analyst",
|
|
237
|
+
model: "sonnet",
|
|
238
|
+
prompt: "코드 복잡도, 중복률, 결합도 메트릭 분석"
|
|
239
|
+
})
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
#### 3. 의존성 분석 + 수정 병렬
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
// ✅ 의존성 파악과 독립 모듈 리팩토링 동시 진행
|
|
246
|
+
Task({
|
|
247
|
+
subagent_type: "explore",
|
|
248
|
+
model: "haiku",
|
|
249
|
+
prompt: "모듈 간 의존성 그래프 분석 및 순환 의존성 탐지"
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
Task({
|
|
253
|
+
subagent_type: "implementation-executor",
|
|
254
|
+
model: "sonnet",
|
|
255
|
+
prompt: "독립 유틸리티 함수 리팩토링 (의존성 없음)"
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
Task({
|
|
259
|
+
subagent_type: "implementation-executor",
|
|
260
|
+
model: "sonnet",
|
|
261
|
+
prompt: "타입 정의 개선 (다른 모듈에 영향 없음)"
|
|
262
|
+
})
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### 4. 리팩토링 + 테스트 + 문서 병렬
|
|
266
|
+
|
|
267
|
+
```typescript
|
|
268
|
+
// ✅ 구현, 테스트, 문서를 동시에
|
|
269
|
+
Task({
|
|
270
|
+
subagent_type: "implementation-executor",
|
|
271
|
+
model: "sonnet",
|
|
272
|
+
prompt: "API 레이어 리팩토링 실행"
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
Task({
|
|
276
|
+
subagent_type: "implementation-executor",
|
|
277
|
+
model: "sonnet",
|
|
278
|
+
prompt: "리팩토링된 함수에 대한 단위 테스트 작성"
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
Task({
|
|
282
|
+
subagent_type: "document-writer",
|
|
283
|
+
model: "haiku",
|
|
284
|
+
prompt: "리팩토링 변경 사항 및 마이그레이션 가이드 문서화"
|
|
285
|
+
})
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
#### 5. 다중 관점 코드 리뷰 (병렬)
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
// ✅ 리팩토링 후 여러 관점에서 동시 검증
|
|
292
|
+
Task({
|
|
293
|
+
subagent_type: "code-reviewer",
|
|
294
|
+
model: "opus",
|
|
295
|
+
prompt: "성능 검토: 불필요한 리렌더, N+1 쿼리, 메모이제이션"
|
|
296
|
+
})
|
|
297
|
+
|
|
298
|
+
Task({
|
|
299
|
+
subagent_type: "code-reviewer",
|
|
300
|
+
model: "opus",
|
|
301
|
+
prompt: "보안 검토: 타입 안정성, 입력 검증, 인증/인가 로직"
|
|
302
|
+
})
|
|
303
|
+
|
|
304
|
+
Task({
|
|
305
|
+
subagent_type: "code-reviewer",
|
|
306
|
+
model: "opus",
|
|
307
|
+
prompt: "가독성 검토: 명명 규칙, 함수 길이, 주석 품질"
|
|
308
|
+
})
|
|
309
|
+
|
|
310
|
+
Task({
|
|
311
|
+
subagent_type: "code-reviewer",
|
|
312
|
+
model: "opus",
|
|
313
|
+
prompt: "유지보수성 검토: 테스트 커버리지, 의존성 관리, 확장성"
|
|
314
|
+
})
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
#### 6. 점진적 마이그레이션 병렬화
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// ✅ 레거시 + 신규 시스템 공존 리팩토링
|
|
321
|
+
Task({
|
|
322
|
+
subagent_type: "implementation-executor",
|
|
323
|
+
model: "sonnet",
|
|
324
|
+
prompt: "새 인증 시스템 구현 (기존과 독립)"
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
Task({
|
|
328
|
+
subagent_type: "implementation-executor",
|
|
329
|
+
model: "sonnet",
|
|
330
|
+
prompt: "레거시 API 어댑터 구현 (호환성 유지)"
|
|
331
|
+
})
|
|
332
|
+
|
|
333
|
+
Task({
|
|
334
|
+
subagent_type: "implementation-executor",
|
|
335
|
+
model: "haiku",
|
|
336
|
+
prompt: "Feature flag 설정 및 점진적 전환 로직"
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
Task({
|
|
340
|
+
subagent_type: "document-writer",
|
|
341
|
+
model: "sonnet",
|
|
342
|
+
prompt: "마이그레이션 플랜 및 롤백 가이드 작성"
|
|
343
|
+
})
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### Model Routing (복잡도별)
|
|
347
|
+
|
|
348
|
+
| 복잡도 | 리팩토링 유형 | Model | Agent | 예시 |
|
|
349
|
+
|--------|--------------|-------|-------|------|
|
|
350
|
+
| **LOW** | 단순 개선 | haiku | implementation-executor | 변수명 변경, 코드 포맷팅, 주석 정리 |
|
|
351
|
+
| **MEDIUM** | 일반 리팩토링 | sonnet | implementation-executor, refactor-advisor | 함수 분리, 중복 제거, 타입 개선 |
|
|
352
|
+
| **HIGH** | 복잡한 구조 변경 | opus | architect, code-reviewer | 아키텍처 재설계, 모듈 분리, 디자인 패턴 적용 |
|
|
353
|
+
|
|
354
|
+
**Agent별 모델 선택 원칙:**
|
|
355
|
+
|
|
356
|
+
| Agent | 권장 모델 | 이유 |
|
|
357
|
+
|-------|----------|------|
|
|
358
|
+
| **architect** | **opus** | 아키텍처 분석은 높은 사고력 필요 |
|
|
359
|
+
| **implementation-executor** | **sonnet** | 균형 잡힌 품질/속도 (haiku: 단순 작업) |
|
|
360
|
+
| **code-reviewer** | **opus** | 품질 검증은 세밀한 분석 필요 |
|
|
361
|
+
| **refactor-advisor** | **sonnet** | 계획 수립은 중간 복잡도 |
|
|
362
|
+
| **explore** | **haiku** | 단순 탐색은 빠른 응답 우선 |
|
|
363
|
+
| **analyst** | **sonnet** | 메트릭 분석은 중간 복잡도 |
|
|
364
|
+
| **document-writer** | **haiku/sonnet** | 간단한 문서는 haiku, 상세 문서는 sonnet |
|
|
365
|
+
|
|
366
|
+
### 병렬 실행 전략
|
|
367
|
+
|
|
368
|
+
#### 언제 병렬 실행하는가
|
|
369
|
+
|
|
370
|
+
| 조건 | 병렬 실행 | 순차 실행 |
|
|
371
|
+
|------|----------|----------|
|
|
372
|
+
| **독립성** | ✅ 서로 다른 파일/모듈 | ❌ 같은 파일 수정 |
|
|
373
|
+
| **의존성** | ✅ 의존성 없음 | ❌ 순차 의존성 있음 |
|
|
374
|
+
| **작업 유형** | ✅ 읽기 전용 (분석/탐색) | ❌ 결과가 다음 입력 |
|
|
375
|
+
| **컨텍스트** | ✅ 독립 컨텍스트 | ❌ 공유 컨텍스트 필요 |
|
|
376
|
+
|
|
377
|
+
#### 병렬 실행 체크리스트
|
|
378
|
+
|
|
379
|
+
실행 전 확인:
|
|
380
|
+
|
|
381
|
+
```text
|
|
382
|
+
- [ ] 이 작업들은 독립적인가? (서로 다른 파일/모듈)
|
|
383
|
+
- [ ] 순차 의존성이 없는가? (A 결과 → B 입력 아님)
|
|
384
|
+
- [ ] 같은 파일을 동시에 수정하지 않는가?
|
|
385
|
+
- [ ] 컨텍스트 분리가 가능한가? (각 에이전트가 독립적으로 작업)
|
|
386
|
+
- [ ] 적절한 모델을 선택했는가? (복잡도에 맞게)
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**모든 항목 ✅ → 병렬 실행 / 하나라도 ❌ → 순차 실행**
|
|
390
|
+
|
|
391
|
+
### 실전 시나리오
|
|
392
|
+
|
|
393
|
+
#### 시나리오 1: 레거시 → 최신 프레임워크 전환
|
|
394
|
+
|
|
395
|
+
**배경:** 레거시 React 클래스 컴포넌트를 TanStack Start로 전환
|
|
396
|
+
|
|
397
|
+
```typescript
|
|
398
|
+
// 1단계: 분석 (병렬)
|
|
399
|
+
Task({
|
|
400
|
+
subagent_type: "architect",
|
|
401
|
+
model: "opus",
|
|
402
|
+
prompt: "레거시 아키텍처 분석 및 TanStack Start 전환 전략"
|
|
403
|
+
})
|
|
404
|
+
|
|
405
|
+
Task({
|
|
406
|
+
subagent_type: "explore",
|
|
407
|
+
model: "haiku",
|
|
408
|
+
prompt: "레거시 컴포넌트 목록 및 의존성 파악"
|
|
409
|
+
})
|
|
410
|
+
|
|
411
|
+
Task({
|
|
412
|
+
subagent_type: "analyst",
|
|
413
|
+
model: "sonnet",
|
|
414
|
+
prompt: "전환 리스크 분석: 상태 관리, 라우팅, 데이터 페칭 차이점"
|
|
415
|
+
})
|
|
416
|
+
|
|
417
|
+
// 2단계: 점진적 전환 (병렬 - 독립 컴포넌트)
|
|
418
|
+
Task({
|
|
419
|
+
subagent_type: "implementation-executor",
|
|
420
|
+
model: "sonnet",
|
|
421
|
+
prompt: "Profile 페이지 전환: createFileRoute + Server Functions"
|
|
422
|
+
})
|
|
423
|
+
|
|
424
|
+
Task({
|
|
425
|
+
subagent_type: "implementation-executor",
|
|
426
|
+
model: "sonnet",
|
|
427
|
+
prompt: "Settings 페이지 전환: createFileRoute + Server Functions"
|
|
428
|
+
})
|
|
429
|
+
|
|
430
|
+
Task({
|
|
431
|
+
subagent_type: "implementation-executor",
|
|
432
|
+
model: "sonnet",
|
|
433
|
+
prompt: "Dashboard 페이지 전환: createFileRoute + Server Functions"
|
|
434
|
+
})
|
|
435
|
+
|
|
436
|
+
// 3단계: 검증 + 문서 (병렬)
|
|
437
|
+
Task({
|
|
438
|
+
subagent_type: "code-reviewer",
|
|
439
|
+
model: "opus",
|
|
440
|
+
prompt: "전환된 코드 품질 검증: 라우팅, 상태, 데이터 페칭"
|
|
441
|
+
})
|
|
442
|
+
|
|
443
|
+
Task({
|
|
444
|
+
subagent_type: "document-writer",
|
|
445
|
+
model: "sonnet",
|
|
446
|
+
prompt: "마이그레이션 가이드 작성: 패턴 비교, 주의사항, 롤백 절차"
|
|
447
|
+
})
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
#### 시나리오 2: 아키텍처 개선 (모놀리식 → 레이어드)
|
|
451
|
+
|
|
452
|
+
**배경:** 모든 로직이 혼재된 파일을 레이어드 아키텍처로 분리
|
|
453
|
+
|
|
454
|
+
```typescript
|
|
455
|
+
// 1단계: 현재 상태 분석 (병렬)
|
|
456
|
+
Task({
|
|
457
|
+
subagent_type: "architect",
|
|
458
|
+
model: "opus",
|
|
459
|
+
prompt: "현재 아키텍처 문제점 분석: 순환 의존성, 결합도, 테스트 어려움"
|
|
460
|
+
})
|
|
461
|
+
|
|
462
|
+
Task({
|
|
463
|
+
subagent_type: "explore",
|
|
464
|
+
model: "haiku",
|
|
465
|
+
prompt: "모듈 간 의존성 그래프 생성 및 순환 의존성 식별"
|
|
466
|
+
})
|
|
467
|
+
|
|
468
|
+
Task({
|
|
469
|
+
subagent_type: "analyst",
|
|
470
|
+
model: "sonnet",
|
|
471
|
+
prompt: "복잡도 메트릭 분석: 파일 크기, 함수 길이, 중첩 깊이"
|
|
472
|
+
})
|
|
473
|
+
|
|
474
|
+
// 2단계: 레이어 분리 계획
|
|
475
|
+
Task({
|
|
476
|
+
subagent_type: "refactor-advisor",
|
|
477
|
+
model: "sonnet",
|
|
478
|
+
prompt: "레이어드 아키텍처 전환 계획: Presentation → Service → Domain → Data"
|
|
479
|
+
})
|
|
480
|
+
|
|
481
|
+
// 3단계: 레이어별 구현 (순차적 - 의존성 있음)
|
|
482
|
+
// 먼저 Domain Layer (의존성 없음)
|
|
483
|
+
Task({
|
|
484
|
+
subagent_type: "implementation-executor",
|
|
485
|
+
model: "sonnet",
|
|
486
|
+
prompt: "Domain Layer 분리: 엔티티, Value Object, 비즈니스 로직"
|
|
487
|
+
})
|
|
488
|
+
|
|
489
|
+
// 이후 상위 레이어 (병렬 가능)
|
|
490
|
+
Task({
|
|
491
|
+
subagent_type: "implementation-executor",
|
|
492
|
+
model: "sonnet",
|
|
493
|
+
prompt: "Data Layer 구현: Repository, Prisma 연동"
|
|
494
|
+
})
|
|
495
|
+
|
|
496
|
+
Task({
|
|
497
|
+
subagent_type: "implementation-executor",
|
|
498
|
+
model: "sonnet",
|
|
499
|
+
prompt: "Service Layer 구현: 비즈니스 로직 조율, 트랜잭션 관리"
|
|
500
|
+
})
|
|
501
|
+
|
|
502
|
+
Task({
|
|
503
|
+
subagent_type: "implementation-executor",
|
|
504
|
+
model: "sonnet",
|
|
505
|
+
prompt: "Presentation Layer 구현: Server Functions, 입력 검증"
|
|
506
|
+
})
|
|
507
|
+
|
|
508
|
+
// 4단계: 다중 관점 검증 (병렬)
|
|
509
|
+
Task({
|
|
510
|
+
subagent_type: "code-reviewer",
|
|
511
|
+
model: "opus",
|
|
512
|
+
prompt: "아키텍처 검증: 레이어 분리 원칙 준수, 의존성 방향"
|
|
513
|
+
})
|
|
514
|
+
|
|
515
|
+
Task({
|
|
516
|
+
subagent_type: "code-reviewer",
|
|
517
|
+
model: "opus",
|
|
518
|
+
prompt: "테스트 용이성 검증: 단위 테스트 가능성, Mock 필요성"
|
|
519
|
+
})
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
#### 시나리오 3: 성능 최적화 리팩토링
|
|
523
|
+
|
|
524
|
+
**배경:** 느린 렌더링, N+1 쿼리 문제 해결
|
|
525
|
+
|
|
526
|
+
```typescript
|
|
527
|
+
// 1단계: 성능 문제 분석 (병렬)
|
|
528
|
+
Task({
|
|
529
|
+
subagent_type: "analyst",
|
|
530
|
+
model: "sonnet",
|
|
531
|
+
prompt: "성능 병목 지점 분석: React Profiler 데이터, DB 쿼리 로그"
|
|
532
|
+
})
|
|
533
|
+
|
|
534
|
+
Task({
|
|
535
|
+
subagent_type: "explore",
|
|
536
|
+
model: "haiku",
|
|
537
|
+
prompt: "불필요한 리렌더 발생 컴포넌트 탐색"
|
|
538
|
+
})
|
|
539
|
+
|
|
540
|
+
Task({
|
|
541
|
+
subagent_type: "explore",
|
|
542
|
+
model: "haiku",
|
|
543
|
+
prompt: "N+1 쿼리 발생 지점 탐색 (Prisma 쿼리 분석)"
|
|
544
|
+
})
|
|
545
|
+
|
|
546
|
+
// 2단계: 최적화 실행 (병렬 - 독립 영역)
|
|
547
|
+
Task({
|
|
548
|
+
subagent_type: "implementation-executor",
|
|
549
|
+
model: "sonnet",
|
|
550
|
+
prompt: "React 최적화: useMemo, useCallback, React.memo 적용"
|
|
551
|
+
})
|
|
552
|
+
|
|
553
|
+
Task({
|
|
554
|
+
subagent_type: "implementation-executor",
|
|
555
|
+
model: "sonnet",
|
|
556
|
+
prompt: "Prisma 쿼리 최적화: include 정리, select 최소화, 배치 쿼리"
|
|
557
|
+
})
|
|
558
|
+
|
|
559
|
+
Task({
|
|
560
|
+
subagent_type: "implementation-executor",
|
|
561
|
+
model: "sonnet",
|
|
562
|
+
prompt: "TanStack Query 최적화: 캐싱 전략, staleTime/cacheTime 조정"
|
|
563
|
+
})
|
|
564
|
+
|
|
565
|
+
// 3단계: 성능 검증 (병렬)
|
|
566
|
+
Task({
|
|
567
|
+
subagent_type: "code-reviewer",
|
|
568
|
+
model: "opus",
|
|
569
|
+
prompt: "성능 개선 검증: 렌더 횟수, 쿼리 실행 시간, 번들 크기"
|
|
570
|
+
})
|
|
571
|
+
|
|
572
|
+
Task({
|
|
573
|
+
subagent_type: "analyst",
|
|
574
|
+
model: "sonnet",
|
|
575
|
+
prompt: "Before/After 메트릭 비교: 응답 시간, 메모리 사용량"
|
|
576
|
+
})
|
|
577
|
+
|
|
578
|
+
Task({
|
|
579
|
+
subagent_type: "document-writer",
|
|
580
|
+
model: "haiku",
|
|
581
|
+
prompt: "성능 최적화 가이드 작성: 적용 패턴, 측정 방법"
|
|
582
|
+
})
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
#### 시나리오 4: 타입 안정성 개선 (any 제거)
|
|
586
|
+
|
|
587
|
+
**배경:** 프로젝트 전반에 any 타입 남용, 런타임 에러 빈발
|
|
588
|
+
|
|
589
|
+
```typescript
|
|
590
|
+
// 1단계: any 사용 분석 (병렬)
|
|
591
|
+
Task({
|
|
592
|
+
subagent_type: "explore",
|
|
593
|
+
model: "haiku",
|
|
594
|
+
prompt: "any 타입 사용 지점 전수 조사 (ast-grep 활용)"
|
|
595
|
+
})
|
|
596
|
+
|
|
597
|
+
Task({
|
|
598
|
+
subagent_type: "analyst",
|
|
599
|
+
model: "sonnet",
|
|
600
|
+
prompt: "any 사용 우선순위 분석: 영향 범위, 수정 난이도"
|
|
601
|
+
})
|
|
602
|
+
|
|
603
|
+
Task({
|
|
604
|
+
subagent_type: "architect",
|
|
605
|
+
model: "opus",
|
|
606
|
+
prompt: "타입 설계 개선 방향: Generic, Utility Types, Type Guards"
|
|
607
|
+
})
|
|
608
|
+
|
|
609
|
+
// 2단계: 타입 정의 개선 (병렬 - 독립 모듈)
|
|
610
|
+
Task({
|
|
611
|
+
subagent_type: "implementation-executor",
|
|
612
|
+
model: "sonnet",
|
|
613
|
+
prompt: "API 응답 타입 정의: Zod 스키마 → TypeScript 타입"
|
|
614
|
+
})
|
|
615
|
+
|
|
616
|
+
Task({
|
|
617
|
+
subagent_type: "implementation-executor",
|
|
618
|
+
model: "sonnet",
|
|
619
|
+
prompt: "이벤트 핸들러 타입 정의: React.MouseEvent, React.ChangeEvent"
|
|
620
|
+
})
|
|
621
|
+
|
|
622
|
+
Task({
|
|
623
|
+
subagent_type: "implementation-executor",
|
|
624
|
+
model: "sonnet",
|
|
625
|
+
prompt: "유틸리티 함수 타입 정의: Generic, Overload"
|
|
626
|
+
})
|
|
627
|
+
|
|
628
|
+
// 3단계: 타입 안정성 검증 (병렬)
|
|
629
|
+
Task({
|
|
630
|
+
subagent_type: "code-reviewer",
|
|
631
|
+
model: "opus",
|
|
632
|
+
prompt: "타입 안정성 검토: unknown vs any, Type Guards 필요성"
|
|
633
|
+
})
|
|
634
|
+
|
|
635
|
+
Task({
|
|
636
|
+
subagent_type: "code-reviewer",
|
|
637
|
+
model: "opus",
|
|
638
|
+
prompt: "타입 에러 검증: tsc --noEmit, 런타임 에러 가능성"
|
|
639
|
+
})
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
#### 시나리오 5: 코드 중복 제거 (DRY 원칙)
|
|
643
|
+
|
|
644
|
+
**배경:** 여러 파일에 유사한 로직 반복, 유지보수 어려움
|
|
645
|
+
|
|
646
|
+
```typescript
|
|
647
|
+
// 1단계: 중복 패턴 분석 (병렬)
|
|
648
|
+
Task({
|
|
649
|
+
subagent_type: "explore",
|
|
650
|
+
model: "haiku",
|
|
651
|
+
prompt: "중복 코드 패턴 탐색: 유사 함수, 중복 로직 (jscpd 등 활용)"
|
|
652
|
+
})
|
|
653
|
+
|
|
654
|
+
Task({
|
|
655
|
+
subagent_type: "analyst",
|
|
656
|
+
model: "sonnet",
|
|
657
|
+
prompt: "중복률 분석 및 우선순위: 중복 라인 수, 파일 개수, 수정 빈도"
|
|
658
|
+
})
|
|
659
|
+
|
|
660
|
+
// 2단계: 공통 모듈 추출 계획
|
|
661
|
+
Task({
|
|
662
|
+
subagent_type: "refactor-advisor",
|
|
663
|
+
model: "sonnet",
|
|
664
|
+
prompt: "공통 모듈 추출 전략: 유틸리티 vs 훅 vs 컴포넌트"
|
|
665
|
+
})
|
|
666
|
+
|
|
667
|
+
// 3단계: 모듈 추출 및 교체 (병렬 - 독립 영역)
|
|
668
|
+
Task({
|
|
669
|
+
subagent_type: "implementation-executor",
|
|
670
|
+
model: "sonnet",
|
|
671
|
+
prompt: "공통 유틸리티 함수 추출: src/lib/utils/ 구성"
|
|
672
|
+
})
|
|
673
|
+
|
|
674
|
+
Task({
|
|
675
|
+
subagent_type: "implementation-executor",
|
|
676
|
+
model: "sonnet",
|
|
677
|
+
prompt: "커스텀 훅 추출: src/hooks/ 구성"
|
|
678
|
+
})
|
|
679
|
+
|
|
680
|
+
Task({
|
|
681
|
+
subagent_type: "implementation-executor",
|
|
682
|
+
model: "sonnet",
|
|
683
|
+
prompt: "공통 UI 컴포넌트 추출: src/components/ui/ 구성"
|
|
684
|
+
})
|
|
685
|
+
|
|
686
|
+
// 4단계: 기존 코드 교체 (병렬 - 독립 파일)
|
|
687
|
+
Task({
|
|
688
|
+
subagent_type: "implementation-executor",
|
|
689
|
+
model: "haiku",
|
|
690
|
+
prompt: "components/ 내 중복 코드 → 공통 모듈 참조로 교체"
|
|
691
|
+
})
|
|
692
|
+
|
|
693
|
+
Task({
|
|
694
|
+
subagent_type: "implementation-executor",
|
|
695
|
+
model: "haiku",
|
|
696
|
+
prompt: "routes/ 내 중복 코드 → 공통 모듈 참조로 교체"
|
|
697
|
+
})
|
|
698
|
+
|
|
699
|
+
Task({
|
|
700
|
+
subagent_type: "implementation-executor",
|
|
701
|
+
model: "haiku",
|
|
702
|
+
prompt: "functions/ 내 중복 코드 → 공통 모듈 참조로 교체"
|
|
703
|
+
})
|
|
704
|
+
|
|
705
|
+
// 5단계: 검증 (병렬)
|
|
706
|
+
Task({
|
|
707
|
+
subagent_type: "code-reviewer",
|
|
708
|
+
model: "opus",
|
|
709
|
+
prompt: "중복 제거 검증: 기존 기능 유지, 새로운 중복 발생 여부"
|
|
710
|
+
})
|
|
711
|
+
|
|
712
|
+
Task({
|
|
713
|
+
subagent_type: "analyst",
|
|
714
|
+
model: "sonnet",
|
|
715
|
+
prompt: "Before/After 중복률 측정: 개선 효과 정량화"
|
|
716
|
+
})
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
### 병렬 실행 시 주의사항
|
|
720
|
+
|
|
721
|
+
```text
|
|
722
|
+
✅ 권장:
|
|
723
|
+
- 독립적인 모듈/파일 → 병렬 실행
|
|
724
|
+
- 분석 작업 (읽기 전용) → 병렬 실행
|
|
725
|
+
- 다중 관점 검증 → 병렬 실행
|
|
726
|
+
- 테스트 + 문서 작성 → 병렬 실행
|
|
727
|
+
- 레거시 + 신규 시스템 공존 → 병렬 실행
|
|
728
|
+
|
|
729
|
+
❌ 금지:
|
|
730
|
+
- 같은 파일 동시 수정 (충돌 발생)
|
|
731
|
+
- 순차 의존성 있는 작업 병렬화 (A → B → C)
|
|
732
|
+
- 공유 상태/컨텍스트 필요한 작업
|
|
733
|
+
- 결과가 다음 작업의 입력인 경우
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
### Model 선택 가이드
|
|
737
|
+
|
|
738
|
+
```typescript
|
|
739
|
+
// ✅ 적절한 모델 선택
|
|
740
|
+
Task({
|
|
741
|
+
subagent_type: "implementation-executor",
|
|
742
|
+
model: "haiku", // 단순 작업: 변수명 변경, 주석 정리
|
|
743
|
+
prompt: "변수명을 camelCase로 통일"
|
|
744
|
+
})
|
|
745
|
+
|
|
746
|
+
Task({
|
|
747
|
+
subagent_type: "refactor-advisor",
|
|
748
|
+
model: "sonnet", // 일반 작업: 함수 분리 계획, 중복 제거
|
|
749
|
+
prompt: "함수 복잡도 감소 계획 수립"
|
|
750
|
+
})
|
|
751
|
+
|
|
752
|
+
Task({
|
|
753
|
+
subagent_type: "architect",
|
|
754
|
+
model: "opus", // 복잡한 작업: 아키텍처 재설계
|
|
755
|
+
prompt: "레이어드 아키텍처 전환 전략 분석"
|
|
756
|
+
})
|
|
757
|
+
|
|
758
|
+
Task({
|
|
759
|
+
subagent_type: "code-reviewer",
|
|
760
|
+
model: "opus", // 품질 검증: 세밀한 검토 필요
|
|
761
|
+
prompt: "리팩토링 후 보안/성능/가독성 종합 검토"
|
|
762
|
+
})
|
|
763
|
+
|
|
764
|
+
// ❌ 잘못된 모델 선택
|
|
765
|
+
Task({
|
|
766
|
+
subagent_type: "architect",
|
|
767
|
+
model: "haiku", // 복잡한 작업에 haiku 사용 금지
|
|
768
|
+
prompt: "아키텍처 재설계..."
|
|
769
|
+
})
|
|
770
|
+
|
|
771
|
+
Task({
|
|
772
|
+
subagent_type: "implementation-executor",
|
|
773
|
+
model: "opus", // 단순 작업에 opus 낭비
|
|
774
|
+
prompt: "변수명 변경..."
|
|
775
|
+
})
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
### 병렬 실행 최적화 팁
|
|
779
|
+
|
|
780
|
+
| 팁 | 설명 | 예시 |
|
|
781
|
+
|----|------|------|
|
|
782
|
+
| **독립성 우선** | 의존성 없는 작업부터 병렬 실행 | 여러 모듈 동시 리팩토링 |
|
|
783
|
+
| **읽기 병렬화** | 분석/탐색 작업은 항상 병렬 | architect + explore + analyst |
|
|
784
|
+
| **쓰기 격리** | 파일 수정은 충돌 없도록 분리 | 각 모듈별로 다른 executor |
|
|
785
|
+
| **검증 병렬화** | 다중 관점 코드 리뷰 동시 실행 | 성능/보안/가독성/유지보수성 |
|
|
786
|
+
| **문서 병렬화** | 리팩토링과 문서 작성 동시 진행 | implementation + document-writer |
|
|
787
|
+
| **모델 적정화** | 복잡도에 맞는 모델 선택 | haiku(단순) / sonnet(일반) / opus(복잡) |
|
|
788
|
+
|
|
789
|
+
</parallel_agent_execution>
|
|
790
|
+
|
|
791
|
+
---
|
|
792
|
+
|
|
793
|
+
<thinking_strategy>
|
|
794
|
+
|
|
795
|
+
## Sequential Thinking 가이드
|
|
796
|
+
|
|
797
|
+
### 복잡도 판단 (thought 1)
|
|
798
|
+
|
|
799
|
+
```
|
|
800
|
+
thought 1: 복잡도 판단
|
|
801
|
+
- 영향 범위: 파일 수, 함수 수
|
|
802
|
+
- 현재 문제: 복잡도, 중복, 명명, 구조
|
|
803
|
+
- 리스크: 기존 기능 영향, 테스트 커버리지
|
|
804
|
+
- 우선순위: High/Medium/Low
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
### 복잡도별 전략
|
|
808
|
+
|
|
809
|
+
| 복잡도 | 사고 횟수 | 판단 기준 | 사고 패턴 |
|
|
810
|
+
|--------|----------|----------|------------|
|
|
811
|
+
| **간단** | 3 | 1-2 파일, 명확한 개선점 | 복잡도 판단 → 현재 분석 → 개선 방안 |
|
|
812
|
+
| **보통** | 5 | 3-5 파일, 구조 변경 | 복잡도 판단 → 현재 분석 → 문제점 → 옵션 비교 → 추천안 |
|
|
813
|
+
| **복잡** | 7+ | 다중 모듈, 점진적 변경 필요 | 복잡도 판단 → 심층 분석 → 우선순위 → 접근 방식 → 비교 → 단계별 계획 → 추천안 |
|
|
814
|
+
|
|
815
|
+
### 보통 복잡도 패턴 (5단계)
|
|
816
|
+
|
|
817
|
+
```
|
|
818
|
+
thought 1: 복잡도 판단 및 분석 범위 결정
|
|
819
|
+
thought 2: 현재 코드 분석 (복잡도, 중복, 구조)
|
|
820
|
+
thought 3: 가능한 개선 방법 열거 (4-5개)
|
|
821
|
+
thought 4: 주요 옵션 3개 선정 및 장단점 분석
|
|
822
|
+
thought 5: 최종 옵션 정리 및 추천안 도출
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
### 복잡한 경우 패턴 (7단계)
|
|
826
|
+
|
|
827
|
+
```
|
|
828
|
+
thought 1: 복잡도 판단
|
|
829
|
+
thought 2: 현재 코드 심층 분석 (메트릭, 패턴)
|
|
830
|
+
thought 3: 개선 우선순위 정리 (High/Medium/Low)
|
|
831
|
+
thought 4: 가능한 접근 방식 탐색
|
|
832
|
+
thought 5: 각 접근 방식 비교 분석
|
|
833
|
+
thought 6: 옵션 3개 선정 및 상세 장단점
|
|
834
|
+
thought 7: 단계별 계획 및 추천안
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
### 핵심 원칙
|
|
838
|
+
|
|
839
|
+
```text
|
|
840
|
+
✅ 사고 과정을 출력해야 실제로 생각이 일어남
|
|
841
|
+
✅ 복잡도가 불확실하면 높게 책정 (5→7로 확장 가능)
|
|
842
|
+
✅ 각 thought에서 구체적 분석 필요 (추상적 설명 금지)
|
|
843
|
+
✅ 필요 시 isRevision으로 이전 사고 수정
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
</thinking_strategy>
|
|
847
|
+
|
|
848
|
+
---
|
|
849
|
+
|
|
850
|
+
<refactoring_areas>
|
|
851
|
+
|
|
852
|
+
## 리팩토링 영역
|
|
853
|
+
|
|
854
|
+
### 6가지 개선 영역
|
|
855
|
+
|
|
856
|
+
| 영역 | 문제 | 개선 방향 |
|
|
857
|
+
|------|------|----------|
|
|
858
|
+
| **복잡도** | 긴 함수, 깊은 중첩 | 함수 분리, Early Return |
|
|
859
|
+
| **중복** | 동일/유사 코드 반복 | 공통 함수/모듈 추출 |
|
|
860
|
+
| **명명** | 모호한 변수/함수명 | 의도 명확한 이름 |
|
|
861
|
+
| **구조** | 파일/모듈 구조 불명확 | 관심사 분리, 계층화 |
|
|
862
|
+
| **패턴** | 안티패턴 사용 | 디자인 패턴 적용 |
|
|
863
|
+
| **타입** | any 남용, 타입 불안정 | 명시적 타입 정의 |
|
|
864
|
+
|
|
865
|
+
### 체크리스트
|
|
866
|
+
|
|
867
|
+
```text
|
|
868
|
+
✅ 함수 길이: 20줄 이하 목표
|
|
869
|
+
✅ 중첩 깊이: 3단계 이하 목표
|
|
870
|
+
✅ 파일 길이: 200-300줄 권장
|
|
871
|
+
✅ 순환 의존성: 제거
|
|
872
|
+
✅ 매직 넘버: 상수화
|
|
873
|
+
✅ 주석: 코드로 설명 불가능한 것만
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
</refactoring_areas>
|
|
877
|
+
|
|
878
|
+
---
|
|
879
|
+
|
|
880
|
+
<option_presentation>
|
|
881
|
+
|
|
882
|
+
## 옵션 제시 형식
|
|
883
|
+
|
|
884
|
+
### 옵션 3개 제시 (표준)
|
|
885
|
+
|
|
886
|
+
```markdown
|
|
887
|
+
## 분석 결과
|
|
888
|
+
|
|
889
|
+
### 현재 상태
|
|
890
|
+
- 문제점 1
|
|
891
|
+
- 문제점 2
|
|
892
|
+
- 개선 필요 영역
|
|
893
|
+
|
|
894
|
+
---
|
|
895
|
+
|
|
896
|
+
### 옵션 1: [옵션 이름] (추천)
|
|
897
|
+
|
|
898
|
+
**개선 방법:**
|
|
899
|
+
- 설명 1
|
|
900
|
+
- 설명 2
|
|
901
|
+
|
|
902
|
+
| 장점 | 단점 |
|
|
903
|
+
|------|------|
|
|
904
|
+
| 장점 1 | 단점 1 |
|
|
905
|
+
| 장점 2 | 단점 2 |
|
|
906
|
+
|
|
907
|
+
**영향 범위:**
|
|
908
|
+
- 파일: `src/module/`
|
|
909
|
+
- 예상 작업량: 중간
|
|
910
|
+
- 리스크: 낮음
|
|
911
|
+
- 테스트 영향: 최소
|
|
912
|
+
|
|
913
|
+
---
|
|
914
|
+
|
|
915
|
+
### 옵션 2: [옵션 이름]
|
|
916
|
+
|
|
917
|
+
**개선 방법:**
|
|
918
|
+
...
|
|
919
|
+
|
|
920
|
+
| 장점 | 단점 |
|
|
921
|
+
|------|------|
|
|
922
|
+
| ... | ... |
|
|
923
|
+
|
|
924
|
+
**영향 범위:**
|
|
925
|
+
...
|
|
926
|
+
|
|
927
|
+
---
|
|
928
|
+
|
|
929
|
+
### 옵션 3: [옵션 이름]
|
|
930
|
+
|
|
931
|
+
**개선 방법:**
|
|
932
|
+
...
|
|
933
|
+
|
|
934
|
+
---
|
|
935
|
+
|
|
936
|
+
## 추천 및 근거
|
|
937
|
+
|
|
938
|
+
옵션 1을 추천합니다.
|
|
939
|
+
- 근거 1
|
|
940
|
+
- 근거 2
|
|
941
|
+
|
|
942
|
+
어떤 옵션을 선택하시겠습니까? (1/2/3)
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
### 옵션 2개 제시 (개선점이 명확한 경우)
|
|
946
|
+
|
|
947
|
+
```markdown
|
|
948
|
+
## 분석 결과
|
|
949
|
+
|
|
950
|
+
두 가지 접근 방식이 있습니다:
|
|
951
|
+
|
|
952
|
+
### 옵션 A: [옵션 이름]
|
|
953
|
+
...
|
|
954
|
+
|
|
955
|
+
### 옵션 B: [옵션 이름]
|
|
956
|
+
...
|
|
957
|
+
|
|
958
|
+
어떤 옵션을 선택하시겠습니까? (A/B)
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
</option_presentation>
|
|
962
|
+
|
|
963
|
+
---
|
|
964
|
+
|
|
965
|
+
<state_management>
|
|
966
|
+
|
|
967
|
+
## 상태 관리 및 문서화
|
|
968
|
+
|
|
969
|
+
### 폴더 구조
|
|
970
|
+
|
|
971
|
+
옵션 선택 후 `.claude/refactor/00.[모듈명]/` 폴더 생성:
|
|
972
|
+
|
|
973
|
+
```
|
|
974
|
+
.claude/refactor/00.인증_모듈/
|
|
975
|
+
├── ANALYSIS.md # 현재 상태, 문제점, 옵션 비교
|
|
976
|
+
├── PLAN.md # 단계별 리팩토링 계획, 롤백 가이드
|
|
977
|
+
└── METRICS.md # 품질 메트릭 Before/After
|
|
978
|
+
```
|
|
979
|
+
|
|
980
|
+
**폴더명 형식:** `00.[모듈명]` (넘버링 + 한글 설명, 언더스코어로 구분)
|
|
981
|
+
**넘버링:** 기존 refactor 폴더 목록 조회 → 다음 번호 자동 부여 (00, 01, 02...)
|
|
982
|
+
|
|
983
|
+
### 문서 역할
|
|
984
|
+
|
|
985
|
+
| 파일 | 내용 | 담당 에이전트 |
|
|
986
|
+
|------|------|--------------|
|
|
987
|
+
| **ANALYSIS.md** | 현재 상태 분석, 문제점 우선순위, 옵션 비교, 선택된 옵션 및 이유 | document-writer (haiku) |
|
|
988
|
+
| **PLAN.md** | 단계별 리팩토링 계획, 작업 체크리스트, 롤백 가이드, 검증 방법 | document-writer (sonnet) |
|
|
989
|
+
| **METRICS.md** | 품질 메트릭 Before/After, 측정 방법, 성공 기준 | document-writer (haiku) |
|
|
990
|
+
|
|
991
|
+
### 문서 작성
|
|
992
|
+
|
|
993
|
+
**우선순위: document-writer 에이전트 병렬 실행**
|
|
994
|
+
|
|
995
|
+
| 작업 | 방법 | 모델 |
|
|
996
|
+
|------|------|------|
|
|
997
|
+
| 3개 문서 동시 생성 | `Task(subagent_type="document-writer", ...)` 병렬 호출 | haiku (2개), sonnet (1개) |
|
|
998
|
+
| 복잡한 PLAN.md | `Task(subagent_type="document-writer", model="sonnet", ...)` | sonnet |
|
|
999
|
+
|
|
1000
|
+
**병렬 실행 패턴:**
|
|
1001
|
+
|
|
1002
|
+
```typescript
|
|
1003
|
+
// ✅ 3개 문서 동시 작성 (빠름)
|
|
1004
|
+
Task(subagent_type="document-writer", model="haiku",
|
|
1005
|
+
prompt="ANALYSIS.md 생성: 현재 상태, 문제점, 옵션 비교")
|
|
1006
|
+
Task(subagent_type="document-writer", model="sonnet",
|
|
1007
|
+
prompt="PLAN.md 생성: 단계별 계획, 체크리스트, 롤백 가이드")
|
|
1008
|
+
Task(subagent_type="document-writer", model="haiku",
|
|
1009
|
+
prompt="METRICS.md 생성: Before/After 메트릭, 성공 기준")
|
|
1010
|
+
|
|
1011
|
+
// ❌ 순차 실행 (느림)
|
|
1012
|
+
Write({ file_path: "ANALYSIS.md", ... }) // 대기...
|
|
1013
|
+
Write({ file_path: "PLAN.md", ... }) // 대기...
|
|
1014
|
+
```
|
|
1015
|
+
|
|
1016
|
+
### 문서 템플릿
|
|
1017
|
+
|
|
1018
|
+
#### ANALYSIS.md
|
|
1019
|
+
|
|
1020
|
+
```markdown
|
|
1021
|
+
# [모듈명] 코드 분석
|
|
1022
|
+
|
|
1023
|
+
생성: {{TIMESTAMP}}
|
|
1024
|
+
|
|
1025
|
+
## 현재 상태
|
|
1026
|
+
|
|
1027
|
+
### 파일 구조
|
|
1028
|
+
- 주요 파일: `src/module/file.ts` (200줄)
|
|
1029
|
+
- 관련 파일: [목록]
|
|
1030
|
+
|
|
1031
|
+
### 복잡도 분석
|
|
1032
|
+
- 함수 평균 길이: [N줄]
|
|
1033
|
+
- 최대 중첩 깊이: [N단계]
|
|
1034
|
+
- 순환 복잡도: [값]
|
|
1035
|
+
|
|
1036
|
+
### 문제점 (우선순위별)
|
|
1037
|
+
|
|
1038
|
+
| 문제 | 영향 | 우선순위 | 설명 |
|
|
1039
|
+
|------|------|---------|------|
|
|
1040
|
+
| 문제 1 | High | High | 상세 설명 |
|
|
1041
|
+
| 문제 2 | Medium | Medium | 상세 설명 |
|
|
1042
|
+
| 문제 3 | Low | Low | 상세 설명 |
|
|
1043
|
+
|
|
1044
|
+
## 옵션 비교
|
|
1045
|
+
|
|
1046
|
+
### 옵션 1: [옵션 이름] (추천)
|
|
1047
|
+
|
|
1048
|
+
**개선 방법:**
|
|
1049
|
+
- 방법 1
|
|
1050
|
+
- 방법 2
|
|
1051
|
+
|
|
1052
|
+
| 장점 | 단점 |
|
|
1053
|
+
|------|------|
|
|
1054
|
+
| 장점 1 | 단점 1 |
|
|
1055
|
+
| 장점 2 | 단점 2 |
|
|
1056
|
+
|
|
1057
|
+
**영향 범위:**
|
|
1058
|
+
- 파일: `src/module/`
|
|
1059
|
+
- 예상 작업량: 중간
|
|
1060
|
+
- 리스크: 낮음
|
|
1061
|
+
|
|
1062
|
+
---
|
|
1063
|
+
|
|
1064
|
+
### 옵션 2: [옵션 이름]
|
|
1065
|
+
|
|
1066
|
+
[동일 형식]
|
|
1067
|
+
|
|
1068
|
+
---
|
|
1069
|
+
|
|
1070
|
+
### 옵션 3: [옵션 이름]
|
|
1071
|
+
|
|
1072
|
+
[동일 형식]
|
|
1073
|
+
|
|
1074
|
+
## 선택된 옵션
|
|
1075
|
+
|
|
1076
|
+
**옵션 [N]: [옵션 이름]**
|
|
1077
|
+
|
|
1078
|
+
**선택 이유:**
|
|
1079
|
+
1. 이유 1
|
|
1080
|
+
2. 이유 2
|
|
1081
|
+
3. 이유 3
|
|
1082
|
+
```
|
|
1083
|
+
|
|
1084
|
+
#### PLAN.md
|
|
1085
|
+
|
|
1086
|
+
```markdown
|
|
1087
|
+
# [모듈명] 리팩토링 계획
|
|
1088
|
+
|
|
1089
|
+
## 개요
|
|
1090
|
+
|
|
1091
|
+
**목표:** [무엇을 개선할 것인가]
|
|
1092
|
+
**접근 방식:** [선택된 옵션]
|
|
1093
|
+
**예상 영향 범위:** [파일/모듈 목록]
|
|
1094
|
+
|
|
1095
|
+
## 단계별 계획
|
|
1096
|
+
|
|
1097
|
+
### 1단계: [단계 이름]
|
|
1098
|
+
|
|
1099
|
+
**목표:** [이 단계에서 달성할 것]
|
|
1100
|
+
|
|
1101
|
+
**작업 체크리스트:**
|
|
1102
|
+
- [ ] 작업 1
|
|
1103
|
+
- [ ] 작업 2
|
|
1104
|
+
- [ ] 작업 3
|
|
1105
|
+
|
|
1106
|
+
**변경 파일:**
|
|
1107
|
+
- `src/file1.ts`: [변경 내용]
|
|
1108
|
+
- `src/file2.ts`: [변경 내용]
|
|
1109
|
+
|
|
1110
|
+
**검증:**
|
|
1111
|
+
- [ ] 테스트 통과
|
|
1112
|
+
- [ ] 빌드 성공
|
|
1113
|
+
- [ ] 타입 체크 통과
|
|
1114
|
+
|
|
1115
|
+
---
|
|
1116
|
+
|
|
1117
|
+
### 2단계: [단계 이름]
|
|
1118
|
+
|
|
1119
|
+
**목표:** [이 단계에서 달성할 것]
|
|
1120
|
+
|
|
1121
|
+
**작업 체크리스트:**
|
|
1122
|
+
- [ ] 작업 4
|
|
1123
|
+
- [ ] 작업 5
|
|
1124
|
+
|
|
1125
|
+
**변경 파일:**
|
|
1126
|
+
- `src/file3.ts`: [변경 내용]
|
|
1127
|
+
|
|
1128
|
+
**검증:**
|
|
1129
|
+
- [ ] 테스트 통과
|
|
1130
|
+
- [ ] 기능 동작 확인
|
|
1131
|
+
|
|
1132
|
+
---
|
|
1133
|
+
|
|
1134
|
+
### 3단계: [단계 이름]
|
|
1135
|
+
|
|
1136
|
+
[동일 형식]
|
|
1137
|
+
|
|
1138
|
+
## 롤백 가이드
|
|
1139
|
+
|
|
1140
|
+
### 문제 발생 시
|
|
1141
|
+
|
|
1142
|
+
**단계별 롤백:**
|
|
1143
|
+
1. 현재 단계 중단
|
|
1144
|
+
2. `git stash` 또는 커밋 되돌리기
|
|
1145
|
+
3. 이전 단계로 복구
|
|
1146
|
+
4. 테스트 재실행
|
|
1147
|
+
|
|
1148
|
+
**완전 롤백:**
|
|
1149
|
+
1. 모든 변경 취소: `git reset --hard [시작 커밋]`
|
|
1150
|
+
2. 의존성 복구: `npm install`
|
|
1151
|
+
3. 빌드 확인: `npm run build`
|
|
1152
|
+
|
|
1153
|
+
### 주의사항
|
|
1154
|
+
|
|
1155
|
+
- 각 단계 완료 후 커밋
|
|
1156
|
+
- 커밋 메시지: "refactor: [단계명] - [변경 내용]"
|
|
1157
|
+
- 테스트 실패 시 즉시 중단
|
|
1158
|
+
|
|
1159
|
+
## 검증 방법
|
|
1160
|
+
|
|
1161
|
+
### 기능 검증
|
|
1162
|
+
- [ ] 기존 기능 동작 확인
|
|
1163
|
+
- [ ] 회귀 테스트 통과
|
|
1164
|
+
- [ ] 통합 테스트 통과
|
|
1165
|
+
- [ ] E2E 테스트 통과
|
|
1166
|
+
|
|
1167
|
+
### 품질 검증
|
|
1168
|
+
- [ ] 복잡도 감소 확인
|
|
1169
|
+
- [ ] 중복 제거 확인
|
|
1170
|
+
- [ ] 타입 안정성 확인
|
|
1171
|
+
- [ ] 성능 저하 없음
|
|
1172
|
+
```
|
|
1173
|
+
|
|
1174
|
+
#### METRICS.md
|
|
1175
|
+
|
|
1176
|
+
```markdown
|
|
1177
|
+
# [모듈명] 품질 메트릭
|
|
1178
|
+
|
|
1179
|
+
## Before (현재 상태)
|
|
1180
|
+
|
|
1181
|
+
### 복잡도
|
|
1182
|
+
- 순환 복잡도: [현재 값]
|
|
1183
|
+
- 함수 평균 길이: [N줄]
|
|
1184
|
+
- 최대 중첩 깊이: [N단계]
|
|
1185
|
+
|
|
1186
|
+
### 중복
|
|
1187
|
+
- 중복률: [N%]
|
|
1188
|
+
- 중복 코드 블록 수: [N개]
|
|
1189
|
+
- 중복 라인 수: [N줄]
|
|
1190
|
+
|
|
1191
|
+
### 타입 안정성
|
|
1192
|
+
- any 사용 횟수: [N개]
|
|
1193
|
+
- 명시적 타입 비율: [N%]
|
|
1194
|
+
- 타입 에러 가능성: [High/Medium/Low]
|
|
1195
|
+
|
|
1196
|
+
### 테스트
|
|
1197
|
+
- 테스트 커버리지: [N%]
|
|
1198
|
+
- 단위 테스트 수: [N개]
|
|
1199
|
+
- 통합 테스트 수: [N개]
|
|
1200
|
+
|
|
1201
|
+
### 성능
|
|
1202
|
+
- 평균 응답 시간: [Nms]
|
|
1203
|
+
- 메모리 사용량: [NMB]
|
|
1204
|
+
- 번들 크기: [NKB]
|
|
1205
|
+
|
|
1206
|
+
## After (목표)
|
|
1207
|
+
|
|
1208
|
+
### 복잡도
|
|
1209
|
+
- 순환 복잡도: [목표 값] (-N%)
|
|
1210
|
+
- 함수 평균 길이: [N줄] (-N%)
|
|
1211
|
+
- 최대 중첩 깊이: [N단계] (-N%)
|
|
1212
|
+
|
|
1213
|
+
### 중복
|
|
1214
|
+
- 중복률: [N%] (-N%)
|
|
1215
|
+
- 중복 코드 블록 수: [N개] (-N%)
|
|
1216
|
+
- 중복 라인 수: [N줄] (-N%)
|
|
1217
|
+
|
|
1218
|
+
### 타입 안정성
|
|
1219
|
+
- any 사용 횟수: [N개] (-N%)
|
|
1220
|
+
- 명시적 타입 비율: [N%] (+N%)
|
|
1221
|
+
- 타입 에러 가능성: [Low]
|
|
1222
|
+
|
|
1223
|
+
### 테스트
|
|
1224
|
+
- 테스트 커버리지: [N%] (+N%)
|
|
1225
|
+
- 단위 테스트 수: [N개] (+N%)
|
|
1226
|
+
- 통합 테스트 수: [N개] (+N%)
|
|
1227
|
+
|
|
1228
|
+
### 성능
|
|
1229
|
+
- 평균 응답 시간: [Nms] (-N%)
|
|
1230
|
+
- 메모리 사용량: [NMB] (-N%)
|
|
1231
|
+
- 번들 크기: [NKB] (-N%)
|
|
1232
|
+
|
|
1233
|
+
## 측정 방법
|
|
1234
|
+
|
|
1235
|
+
### 복잡도 측정
|
|
1236
|
+
```bash
|
|
1237
|
+
# ESLint complexity 규칙
|
|
1238
|
+
npx eslint --rule 'complexity: ["error", { max: 10 }]' src/
|
|
1239
|
+
|
|
1240
|
+
# 또는 복잡도 분석 도구
|
|
1241
|
+
npx plato -r -d report src/
|
|
1242
|
+
```
|
|
1243
|
+
|
|
1244
|
+
### 중복 측정
|
|
1245
|
+
```bash
|
|
1246
|
+
# jscpd 사용
|
|
1247
|
+
npx jscpd src/
|
|
1248
|
+
```
|
|
1249
|
+
|
|
1250
|
+
### 타입 체크
|
|
1251
|
+
```bash
|
|
1252
|
+
# TypeScript 컴파일러
|
|
1253
|
+
npx tsc --noEmit
|
|
1254
|
+
|
|
1255
|
+
# any 타입 검색
|
|
1256
|
+
grep -r "any" src/ | wc -l
|
|
1257
|
+
```
|
|
1258
|
+
|
|
1259
|
+
### 테스트 커버리지
|
|
1260
|
+
```bash
|
|
1261
|
+
# Jest 커버리지
|
|
1262
|
+
npm test -- --coverage
|
|
1263
|
+
```
|
|
1264
|
+
|
|
1265
|
+
### 성능 측정
|
|
1266
|
+
```bash
|
|
1267
|
+
# 빌드 크기
|
|
1268
|
+
npm run build --report
|
|
1269
|
+
|
|
1270
|
+
# 런타임 성능
|
|
1271
|
+
# (프로파일러, 성능 테스트 도구 사용)
|
|
1272
|
+
```
|
|
1273
|
+
|
|
1274
|
+
## 성공 기준
|
|
1275
|
+
|
|
1276
|
+
| 메트릭 | 현재 | 목표 | 필수/선택 |
|
|
1277
|
+
|--------|------|------|----------|
|
|
1278
|
+
| 복잡도 | X | -20% | 필수 |
|
|
1279
|
+
| 중복률 | X | -30% | 필수 |
|
|
1280
|
+
| any 사용 | X | -50% | 필수 |
|
|
1281
|
+
| 테스트 커버리지 | X | +10% | 선택 |
|
|
1282
|
+
| 번들 크기 | X | 유지 | 필수 |
|
|
1283
|
+
| 응답 시간 | X | 유지 | 필수 |
|
|
1284
|
+
|
|
1285
|
+
**최소 달성 기준:** 필수 항목 모두 목표 달성
|
|
1286
|
+
```
|
|
1287
|
+
|
|
1288
|
+
</state_management>
|
|
1289
|
+
|
|
1290
|
+
---
|
|
1291
|
+
|
|
1292
|
+
<document_generation>
|
|
1293
|
+
|
|
1294
|
+
## 계획 문서 병렬 생성
|
|
1295
|
+
|
|
1296
|
+
사용자가 옵션을 선택하면 `.claude/refactor/00.[모듈명]/` 폴더에 3개 문서를 **병렬로** 생성합니다.
|
|
1297
|
+
|
|
1298
|
+
### 병렬 생성 워크플로우
|
|
1299
|
+
|
|
1300
|
+
```text
|
|
1301
|
+
1. 넘버링 결정: ls .claude/refactor/ → 다음 번호 자동 부여
|
|
1302
|
+
2. 폴더 생성: .claude/refactor/00.[모듈명]/
|
|
1303
|
+
3. document-writer 에이전트 3개 병렬 호출
|
|
1304
|
+
- ANALYSIS.md (haiku)
|
|
1305
|
+
- PLAN.md (sonnet)
|
|
1306
|
+
- METRICS.md (haiku)
|
|
1307
|
+
4. 모든 에이전트 완료 대기
|
|
1308
|
+
5. 사용자에게 폴더 경로 안내
|
|
1309
|
+
6. /execute 스킬 즉시 호출 (확인 불필요)
|
|
1310
|
+
- PLAN.md 기반 자동 구현 시작
|
|
1311
|
+
```
|
|
1312
|
+
|
|
1313
|
+
### 에이전트 호출 예시
|
|
1314
|
+
|
|
1315
|
+
```typescript
|
|
1316
|
+
// 옵션 선택 후 실행
|
|
1317
|
+
// 1. 넘버링 결정
|
|
1318
|
+
Bash("ls .claude/refactor/ | grep -E '^[0-9]+' | wc -l")
|
|
1319
|
+
const nextNumber = "00" // 결과 기반 계산
|
|
1320
|
+
const moduleName = "인증_모듈"
|
|
1321
|
+
const basePath = `.claude/refactor/${nextNumber}.${moduleName}`
|
|
1322
|
+
|
|
1323
|
+
// 2. 폴더 생성
|
|
1324
|
+
Bash(`mkdir -p ${basePath}`)
|
|
1325
|
+
|
|
1326
|
+
// 3. 3개 문서 병렬 생성
|
|
1327
|
+
Task({
|
|
1328
|
+
subagent_type: 'document-writer',
|
|
1329
|
+
model: 'haiku',
|
|
1330
|
+
description: 'ANALYSIS.md 작성',
|
|
1331
|
+
prompt: `
|
|
1332
|
+
${basePath}/ANALYSIS.md 생성:
|
|
1333
|
+
- 현재 상태: ${파일_구조}, ${복잡도_분석}
|
|
1334
|
+
- 문제점: ${우선순위별_문제점}
|
|
1335
|
+
- 옵션 비교: ${모든_옵션}
|
|
1336
|
+
- 선택된 옵션: 옵션 ${선택번호}
|
|
1337
|
+
`
|
|
1338
|
+
})
|
|
1339
|
+
|
|
1340
|
+
Task({
|
|
1341
|
+
subagent_type: 'document-writer',
|
|
1342
|
+
model: 'sonnet',
|
|
1343
|
+
description: 'PLAN.md 작성',
|
|
1344
|
+
prompt: `
|
|
1345
|
+
${basePath}/PLAN.md 생성:
|
|
1346
|
+
- 단계별 계획: 1단계, 2단계, 3단계...
|
|
1347
|
+
- 작업 체크리스트
|
|
1348
|
+
- 롤백 가이드
|
|
1349
|
+
- 검증 방법
|
|
1350
|
+
`
|
|
1351
|
+
})
|
|
1352
|
+
|
|
1353
|
+
Task({
|
|
1354
|
+
subagent_type: 'document-writer',
|
|
1355
|
+
model: 'haiku',
|
|
1356
|
+
description: 'METRICS.md 작성',
|
|
1357
|
+
prompt: `
|
|
1358
|
+
${basePath}/METRICS.md 생성:
|
|
1359
|
+
- Before 메트릭: ${현재_측정값}
|
|
1360
|
+
- After 목표: ${개선_목표치}
|
|
1361
|
+
- 측정 방법
|
|
1362
|
+
- 성공 기준
|
|
1363
|
+
`
|
|
1364
|
+
})
|
|
1365
|
+
|
|
1366
|
+
// → 3개 문서 병렬 생성으로 빠르게 계획 문서화
|
|
1367
|
+
```
|
|
1368
|
+
|
|
1369
|
+
**모델 선택:**
|
|
1370
|
+
- PLAN.md는 복잡하므로 sonnet
|
|
1371
|
+
- 나머지는 haiku로 충분
|
|
1372
|
+
|
|
1373
|
+
</document_generation>
|
|
1374
|
+
|
|
1375
|
+
---
|
|
1376
|
+
|
|
1377
|
+
<auto_implementation>
|
|
1378
|
+
|
|
1379
|
+
## 자동 구현 시작
|
|
1380
|
+
|
|
1381
|
+
계획 문서 생성 완료 후 **사용자 확인 없이** 즉시 구현을 시작합니다.
|
|
1382
|
+
|
|
1383
|
+
### 워크플로우
|
|
1384
|
+
|
|
1385
|
+
```text
|
|
1386
|
+
1. 계획 문서 병렬 생성 완료
|
|
1387
|
+
2. PLAN.md 존재 확인
|
|
1388
|
+
3. /execute 스킬 즉시 호출
|
|
1389
|
+
4. 1단계부터 순차 구현
|
|
1390
|
+
```
|
|
1391
|
+
|
|
1392
|
+
### 구현 시작 패턴
|
|
1393
|
+
|
|
1394
|
+
```typescript
|
|
1395
|
+
// 문서 생성 완료 후 즉시 실행
|
|
1396
|
+
Skill({
|
|
1397
|
+
skill: 'execute',
|
|
1398
|
+
args: `@.claude/refactor/${nextNumber}.${moduleName}/PLAN.md 1단계부터 구현`
|
|
1399
|
+
})
|
|
1400
|
+
```
|
|
1401
|
+
|
|
1402
|
+
### 금지 사항
|
|
1403
|
+
|
|
1404
|
+
```text
|
|
1405
|
+
❌ "구현을 시작할까요?" 물어보기
|
|
1406
|
+
❌ "어떤 방식으로 진행할까요?" 선택지 제시
|
|
1407
|
+
❌ 사용자 확인 대기
|
|
1408
|
+
```
|
|
1409
|
+
|
|
1410
|
+
### 허용 사항
|
|
1411
|
+
|
|
1412
|
+
```text
|
|
1413
|
+
✅ 문서 생성 완료 즉시 /execute 호출
|
|
1414
|
+
✅ PLAN.md 1단계부터 자동 시작
|
|
1415
|
+
✅ 구현 중 문제 발생 시에만 사용자 확인
|
|
1416
|
+
```
|
|
1417
|
+
|
|
1418
|
+
</auto_implementation>
|
|
1419
|
+
|
|
1420
|
+
---
|
|
1421
|
+
|
|
1422
|
+
<validation>
|
|
1423
|
+
|
|
1424
|
+
## 검증 체크리스트
|
|
1425
|
+
|
|
1426
|
+
실행 전 확인:
|
|
1427
|
+
|
|
1428
|
+
```text
|
|
1429
|
+
✅ ARGUMENT 확인 (없으면 질문)
|
|
1430
|
+
✅ @refactor-advisor 사용 여부 판단
|
|
1431
|
+
✅ Sequential Thinking 최소 3단계
|
|
1432
|
+
✅ Task (Explore)로 코드 분석 + 메트릭 수집
|
|
1433
|
+
✅ 옵션 최소 2개, 권장 3개
|
|
1434
|
+
✅ 각 옵션에 장단점 명시
|
|
1435
|
+
✅ 영향 범위 및 예상 작업량 제시
|
|
1436
|
+
✅ 넘버링 자동 결정 (ls .claude/refactor/)
|
|
1437
|
+
✅ document-writer 에이전트 병렬 호출로 문서 생성
|
|
1438
|
+
✅ .claude/refactor/00.[모듈명]/ 폴더 구조 사용 (한글 설명)
|
|
1439
|
+
✅ 기능 유지 원칙 강조
|
|
1440
|
+
```
|
|
1441
|
+
|
|
1442
|
+
절대 금지:
|
|
1443
|
+
|
|
1444
|
+
```text
|
|
1445
|
+
❌ ARGUMENT 없이 분석 시작
|
|
1446
|
+
❌ Edit/Write 도구 직접 사용 (문서 작성은 document-writer 에이전트)
|
|
1447
|
+
❌ Sequential Thinking 3단계 미만
|
|
1448
|
+
❌ 옵션 1개만 제시
|
|
1449
|
+
❌ 코드 분석 없이 추측으로 옵션 제시
|
|
1450
|
+
❌ 장단점 없이 옵션만 나열
|
|
1451
|
+
❌ 문서 작성 Y/N 질문 (자동 생성)
|
|
1452
|
+
❌ 문서 생성 후 "구현을 시작할까요?" 물어보기 (즉시 진행)
|
|
1453
|
+
❌ 기능 변경 포함
|
|
1454
|
+
```
|
|
1455
|
+
|
|
1456
|
+
</validation>
|
|
1457
|
+
|
|
1458
|
+
---
|
|
1459
|
+
|
|
1460
|
+
<examples>
|
|
1461
|
+
|
|
1462
|
+
## 실전 예시
|
|
1463
|
+
|
|
1464
|
+
### 예시 1: 복잡한 함수 분리
|
|
1465
|
+
|
|
1466
|
+
```bash
|
|
1467
|
+
사용자: /refactor src/utils/auth.ts - 너무 복잡함
|
|
1468
|
+
|
|
1469
|
+
1. @refactor-advisor 고려:
|
|
1470
|
+
→ 단일 파일, 복잡도 감소 → Agent 활용 추천
|
|
1471
|
+
|
|
1472
|
+
2. Sequential Thinking (5단계):
|
|
1473
|
+
thought 1: "단일 파일, 함수 복잡도 - 보통 복잡도"
|
|
1474
|
+
thought 2: "auth.ts 분석: 200줄, 5단계 중첩, 여러 책임"
|
|
1475
|
+
thought 3: "접근 방식: 함수 분리, 책임 분리, 타입 개선"
|
|
1476
|
+
thought 4: "옵션 3개 선정 및 장단점"
|
|
1477
|
+
thought 5: "점진적 분리 추천 - 단계적 검증 가능"
|
|
1478
|
+
|
|
1479
|
+
3. 옵션 제시:
|
|
1480
|
+
옵션 1: 점진적 함수 분리 (추천)
|
|
1481
|
+
- 장점: 안전, 단계별 검증
|
|
1482
|
+
- 단점: 시간 소요
|
|
1483
|
+
|
|
1484
|
+
옵션 2: 모듈 분리
|
|
1485
|
+
- 장점: 명확한 구조
|
|
1486
|
+
- 단점: 큰 변경
|
|
1487
|
+
|
|
1488
|
+
옵션 3: 타입 개선 우선
|
|
1489
|
+
- 장점: 빠른 개선
|
|
1490
|
+
- 단점: 근본 해결 아님
|
|
1491
|
+
|
|
1492
|
+
4. 사용자 선택: 1
|
|
1493
|
+
|
|
1494
|
+
5. document-writer 에이전트 3개 병렬 호출로 문서 생성
|
|
1495
|
+
- .claude/refactor/00.auth_유틸/
|
|
1496
|
+
├── ANALYSIS.md
|
|
1497
|
+
├── PLAN.md
|
|
1498
|
+
└── METRICS.md
|
|
1499
|
+
|
|
1500
|
+
6. 구현 자동 시작:
|
|
1501
|
+
Skill({ skill: 'execute' })
|
|
1502
|
+
- PLAN.md 읽고 1단계부터 구현
|
|
1503
|
+
- 확인 절차 없이 즉시 진행
|
|
1504
|
+
```
|
|
1505
|
+
|
|
1506
|
+
### 예시 2: 중복 코드 제거
|
|
1507
|
+
|
|
1508
|
+
```bash
|
|
1509
|
+
사용자: /refactor 여러 파일에 중복 코드가 많음
|
|
1510
|
+
|
|
1511
|
+
1. @refactor-advisor 활용:
|
|
1512
|
+
→ 다중 파일, 중복 분석 → Agent 활용 적합
|
|
1513
|
+
|
|
1514
|
+
2. Sequential Thinking (5단계):
|
|
1515
|
+
thought 1: "다중 파일 중복 - 보통 복잡도"
|
|
1516
|
+
thought 2: "중복 패턴 분석: 3가지 유형"
|
|
1517
|
+
thought 3: "접근: 공통 함수, 유틸리티, 훅 추출"
|
|
1518
|
+
thought 4: "옵션 비교: 점진적 vs 일괄"
|
|
1519
|
+
thought 5: "점진적 추출 추천"
|
|
1520
|
+
|
|
1521
|
+
3. Task 탐색:
|
|
1522
|
+
Task (Explore): "중복 코드 패턴 분석"
|
|
1523
|
+
→ src/components/, src/hooks/ 파악
|
|
1524
|
+
|
|
1525
|
+
4. 옵션:
|
|
1526
|
+
옵션 1: 점진적 공통 함수 추출 (추천)
|
|
1527
|
+
옵션 2: 새 유틸리티 모듈 생성
|
|
1528
|
+
옵션 3: 커스텀 훅 추출
|
|
1529
|
+
|
|
1530
|
+
5. 선택 후 3개 문서 병렬 생성
|
|
1531
|
+
- .claude/refactor/00.중복_제거/
|
|
1532
|
+
|
|
1533
|
+
6. 구현 자동 시작 (확인 불필요)
|
|
1534
|
+
```
|
|
1535
|
+
|
|
1536
|
+
### 예시 3: 구조 개선
|
|
1537
|
+
|
|
1538
|
+
```bash
|
|
1539
|
+
사용자: /refactor 프로젝트 구조를 더 명확하게
|
|
1540
|
+
|
|
1541
|
+
1. @refactor-advisor 판단:
|
|
1542
|
+
→ 구조 변경, 다중 모듈 → 직접 처리 (Agent 미사용)
|
|
1543
|
+
|
|
1544
|
+
2. Sequential Thinking (7단계):
|
|
1545
|
+
thought 1: "구조 개선 - 복잡도 높음, 다중 모듈"
|
|
1546
|
+
thought 2: "현재 구조 분석: src/ 내 혼재"
|
|
1547
|
+
thought 3: "요구사항: 관심사 분리, 계층 명확화"
|
|
1548
|
+
thought 4: "접근: 모듈화, 디렉토리 재구성, 경로 정리"
|
|
1549
|
+
thought 5: "각 접근 비교: 영향 범위, 리스크"
|
|
1550
|
+
thought 6: "옵션 3개 선정 및 상세 분석"
|
|
1551
|
+
thought 7: "점진적 재구성 추천 - 단계적 이동"
|
|
1552
|
+
|
|
1553
|
+
3. Task 탐색 (병렬):
|
|
1554
|
+
Task (Explore): "현재 디렉토리 구조 분석"
|
|
1555
|
+
Task (Explore): "모듈 간 의존성 파악"
|
|
1556
|
+
Task (Explore): "import 경로 패턴 분석"
|
|
1557
|
+
|
|
1558
|
+
4. 옵션:
|
|
1559
|
+
옵션 1: 점진적 모듈 분리 (추천)
|
|
1560
|
+
옵션 2: 레이어 기반 재구성
|
|
1561
|
+
옵션 3: 기능별 도메인 분리
|
|
1562
|
+
|
|
1563
|
+
5. document-writer 병렬 호출로 3개 문서 생성
|
|
1564
|
+
- .claude/refactor/00.구조_개선/
|
|
1565
|
+
├── ANALYSIS.md (현재 구조, 의존성 그래프)
|
|
1566
|
+
├── PLAN.md (단계별 이동 계획)
|
|
1567
|
+
└── METRICS.md (복잡도, 결합도 메트릭)
|
|
1568
|
+
|
|
1569
|
+
6. 구현 자동 시작 (확인 불필요)
|
|
1570
|
+
```
|
|
1571
|
+
|
|
1572
|
+
</examples>
|