jun-claude-code 0.0.1
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/.claude/CLAUDE.md +169 -0
- package/.claude/agents/architect.md +163 -0
- package/.claude/agents/code-reviewer.md +116 -0
- package/.claude/agents/code-writer.md +141 -0
- package/.claude/agents/context-collector.md +86 -0
- package/.claude/agents/context-manager.md +183 -0
- package/.claude/agents/designer.md +189 -0
- package/.claude/agents/explore.md +127 -0
- package/.claude/agents/git-manager.md +244 -0
- package/.claude/agents/impact-analyzer.md +153 -0
- package/.claude/agents/qa-tester.md +199 -0
- package/.claude/agents/task-planner.md +160 -0
- package/.claude/hooks/skill-forced.sh +176 -0
- package/.claude/hooks/workflow-enforced.sh +165 -0
- package/.claude/settings.json +18 -0
- package/.claude/skills/Backend/SKILL.md +147 -0
- package/.claude/skills/Coding/SKILL.md +184 -0
- package/.claude/skills/Documentation/SKILL.md +290 -0
- package/.claude/skills/Git/SKILL.md +45 -0
- package/.claude/skills/Git/git.md +323 -0
- package/.claude/skills/Git/pr-apply.md +87 -0
- package/.claude/skills/Git/pr-review.md +69 -0
- package/.claude/skills/React/SKILL.md +159 -0
- package/.claude/skills/React/react-hook-form.md +222 -0
- package/.claude/skills/React/tailwind-styled.md +165 -0
- package/.claude/skills/React/tanstack-router.md +184 -0
- package/README.md +94 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +30 -0
- package/dist/copy.d.ts +8 -0
- package/dist/copy.js +173 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/package.json +35 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git
|
|
3
|
+
description: Git 작업 가이드. Commit 메시지 작성법, PR 작성법, 브랜치 전략, 안전 규칙.
|
|
4
|
+
keywords: [커밋, PR, 브랜치, push, merge, FEAT, FIX, REFACTOR, CHORE, DOCS, GitHub, 풀리퀘스트]
|
|
5
|
+
estimated_tokens: ~600
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Git 작업 가이드
|
|
9
|
+
|
|
10
|
+
## Commit 메시지
|
|
11
|
+
|
|
12
|
+
### 형식
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
<PREFIX>: <간결한 요약 (한글)>
|
|
16
|
+
|
|
17
|
+
<본문 (선택)>
|
|
18
|
+
|
|
19
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### PREFIX
|
|
23
|
+
|
|
24
|
+
| PREFIX | 용도 | 예시 |
|
|
25
|
+
|--------|------|------|
|
|
26
|
+
| FEAT | 새로운 기능 | `FEAT: 결제 완료 후 주문 저장 구현` |
|
|
27
|
+
| FIX | 버그 수정 | `FIX: 로그인 세션 만료 오류 수정` |
|
|
28
|
+
| REFACTOR | 리팩토링 | `REFACTOR: Order Entity 패턴 적용` |
|
|
29
|
+
| CHORE | 빌드/설정 | `CHORE: ESLint 설정 업데이트` |
|
|
30
|
+
| DOCS | 문서 | `DOCS: README 설치 가이드 추가` |
|
|
31
|
+
| STYLE | 포맷팅 | `STYLE: ESLint 경고 수정` |
|
|
32
|
+
| TEST | 테스트 | `TEST: 주문 생성 단위 테스트 추가` |
|
|
33
|
+
|
|
34
|
+
### 작성 원칙
|
|
35
|
+
|
|
36
|
+
- **한글 사용**, 50자 이내
|
|
37
|
+
- **현재형**: "추가함" → "추가"
|
|
38
|
+
- **Why 중심**: 무엇보다 왜 변경했는지
|
|
39
|
+
|
|
40
|
+
### Commit 단위
|
|
41
|
+
|
|
42
|
+
- 한 커밋 = 한 가지 목적
|
|
43
|
+
- 각 커밋 후 빌드 에러 없음
|
|
44
|
+
- 되돌리기 용이한 단위
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 브랜치 전략
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
feature/{기능명} # 새 기능
|
|
52
|
+
fix/{버그명} # 버그 수정
|
|
53
|
+
refactor/{대상} # 리팩토링
|
|
54
|
+
chore/{작업명} # 설정/빌드
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## PR (Pull Request) 생성
|
|
60
|
+
|
|
61
|
+
### Step 1: 변경사항 분석
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
git status # 변경된 파일
|
|
65
|
+
git diff main...HEAD # main 대비 전체 변경
|
|
66
|
+
git log main..HEAD --oneline # 커밋 히스토리
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Step 2: 영향 범위 분석
|
|
70
|
+
|
|
71
|
+
**필수: PR 작성 전 다른 코드에 미치는 영향 분석**
|
|
72
|
+
|
|
73
|
+
| 변경 유형 | 확인 사항 |
|
|
74
|
+
|----------|----------|
|
|
75
|
+
| API Output 변경 | 프론트엔드 호출 코드 |
|
|
76
|
+
| API Input 변경 | mutation/query 사용처 |
|
|
77
|
+
| 공유 타입 변경 | 타입 패키지 사용처 |
|
|
78
|
+
| Entity 컬럼 변경 | Repository, Service, Migration |
|
|
79
|
+
| 컴포넌트 Props 변경 | import하는 모든 파일 |
|
|
80
|
+
| 유틸 함수 시그니처 변경 | 함수 호출처 |
|
|
81
|
+
| 환경 변수 추가 | `.env.example`, 배포 설정 |
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# 변경된 export 사용처 검색
|
|
85
|
+
grep -r "import.*변경된함수명" --include="*.ts" --include="*.tsx"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Step 3: 영향 판단
|
|
89
|
+
|
|
90
|
+
**필수: 변경사항이 시스템에 미치는 영향 분석**
|
|
91
|
+
|
|
92
|
+
#### Code Flow 분석
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
변경된 함수/컴포넌트 → 호출하는 곳 → 그 호출자의 호출자 → ...
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- 변경된 코드를 호출하는 모든 경로 추적
|
|
99
|
+
- 데이터 흐름 변경 시 downstream 영향 확인
|
|
100
|
+
- 에러 전파 경로 확인
|
|
101
|
+
|
|
102
|
+
#### User Flow 분석
|
|
103
|
+
|
|
104
|
+
| 질문 | 확인 |
|
|
105
|
+
|------|------|
|
|
106
|
+
| 어떤 페이지/기능에 영향? | 영향받는 화면 목록 |
|
|
107
|
+
| 사용자 동선 변경? | 기존 UX 유지 여부 |
|
|
108
|
+
| 에러 시 사용자 경험? | 에러 메시지, 폴백 처리 |
|
|
109
|
+
|
|
110
|
+
#### Breaking Change 판단
|
|
111
|
+
|
|
112
|
+
```markdown
|
|
113
|
+
## Breaking Change 여부: 없음 / 있음
|
|
114
|
+
|
|
115
|
+
### 있다면:
|
|
116
|
+
- **무엇이**: 변경된 인터페이스/동작
|
|
117
|
+
- **어디에 영향**: 영향받는 코드 목록
|
|
118
|
+
- **마이그레이션**: 필요한 수정 작업
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Step 4: PR 본문 작성
|
|
122
|
+
|
|
123
|
+
```markdown
|
|
124
|
+
## Summary
|
|
125
|
+
|
|
126
|
+
- **핵심 변경 1**: 설명
|
|
127
|
+
- **핵심 변경 2**: 설명
|
|
128
|
+
|
|
129
|
+
## 주요 변경사항
|
|
130
|
+
|
|
131
|
+
### Backend API (해당시)
|
|
132
|
+
**엔드포인트명:**
|
|
133
|
+
```typescript
|
|
134
|
+
// Input
|
|
135
|
+
{ field: type }
|
|
136
|
+
// Output
|
|
137
|
+
{ field: type }
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Frontend (해당시)
|
|
141
|
+
**컴포넌트/페이지:**
|
|
142
|
+
- 주요 기능 1
|
|
143
|
+
- 주요 기능 2
|
|
144
|
+
|
|
145
|
+
## 변경된 파일
|
|
146
|
+
- `path/to/file1.ts` - 변경 내용
|
|
147
|
+
- `path/to/file2.tsx` - 변경 내용
|
|
148
|
+
|
|
149
|
+
## 영향 범위
|
|
150
|
+
|
|
151
|
+
### Breaking Changes (해당시)
|
|
152
|
+
- 변경된 API/타입과 영향받는 코드
|
|
153
|
+
|
|
154
|
+
### 사이드이펙트 검토
|
|
155
|
+
- 영향받는 기능 없음 / 또는 영향 목록
|
|
156
|
+
|
|
157
|
+
## 테스트 (해당시)
|
|
158
|
+
- [ ] 단위 테스트
|
|
159
|
+
- [ ] 통합 테스트
|
|
160
|
+
- [ ] 수동 테스트
|
|
161
|
+
|
|
162
|
+
Generated with [Claude Code](https://claude.com/claude-code)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Step 5: PR 생성
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
git push -u origin feature/branch-name
|
|
169
|
+
|
|
170
|
+
gh pr create --base main --title "TYPE: 제목" --body "$(cat <<'EOF'
|
|
171
|
+
## Summary
|
|
172
|
+
...
|
|
173
|
+
EOF
|
|
174
|
+
)"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Git 명령어 주의사항
|
|
180
|
+
|
|
181
|
+
### 금지
|
|
182
|
+
|
|
183
|
+
| 명령어 | 이유 |
|
|
184
|
+
|--------|------|
|
|
185
|
+
| `git add -A`, `git add .` | 민감 파일 포함 위험 |
|
|
186
|
+
| `git push --force` | 히스토리 손상 |
|
|
187
|
+
| `git reset --hard` | 작업 손실 위험 |
|
|
188
|
+
| `--no-verify` | hook 우회 금지 |
|
|
189
|
+
|
|
190
|
+
### 권장
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# 파일 지정하여 add
|
|
194
|
+
git add path/to/file1.ts path/to/file2.ts
|
|
195
|
+
|
|
196
|
+
# HEREDOC으로 커밋
|
|
197
|
+
git commit -m "$(cat <<'EOF'
|
|
198
|
+
FEAT: 기능 설명
|
|
199
|
+
|
|
200
|
+
상세 내용
|
|
201
|
+
|
|
202
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
203
|
+
EOF
|
|
204
|
+
)"
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## PR 생성 전 체크리스트
|
|
210
|
+
|
|
211
|
+
- [ ] `lint` 통과
|
|
212
|
+
- [ ] `build` 성공
|
|
213
|
+
- [ ] 커밋 메시지 규칙 준수
|
|
214
|
+
- [ ] Summary가 변경 내용을 명확히 설명
|
|
215
|
+
- [ ] 영향 범위 분석 완료
|
|
216
|
+
- [ ] Breaking change 명시 (해당시)
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## PR 생성 후 워크플로우
|
|
221
|
+
|
|
222
|
+
### Step 6: Self PR Review
|
|
223
|
+
|
|
224
|
+
PR 생성 직후 본인이 먼저 리뷰합니다.
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
# PR diff 확인
|
|
228
|
+
gh pr diff <PR번호>
|
|
229
|
+
|
|
230
|
+
# PR 상세 확인
|
|
231
|
+
gh pr view <PR번호>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Self Review 체크리스트:**
|
|
235
|
+
|
|
236
|
+
| 항목 | 확인 |
|
|
237
|
+
|------|------|
|
|
238
|
+
| 불필요한 코드/주석 제거 | ☐ |
|
|
239
|
+
| 디버그 코드 제거 (console.log 등) | ☐ |
|
|
240
|
+
| 하드코딩된 값 없음 | ☐ |
|
|
241
|
+
| 타입 안전성 확인 | ☐ |
|
|
242
|
+
| 에러 핸들링 적절함 | ☐ |
|
|
243
|
+
| 네이밍 컨벤션 준수 | ☐ |
|
|
244
|
+
|
|
245
|
+
> 상세 체크리스트: `.claude/skills/Git/pr-review.md`
|
|
246
|
+
|
|
247
|
+
**Self Review 이슈 발견 시:**
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# 수정 후 추가 커밋
|
|
251
|
+
git add <수정파일>
|
|
252
|
+
git commit -m "$(cat <<'EOF'
|
|
253
|
+
FIX: Self review 피드백 반영
|
|
254
|
+
|
|
255
|
+
- 수정 내용 1
|
|
256
|
+
- 수정 내용 2
|
|
257
|
+
|
|
258
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
259
|
+
EOF
|
|
260
|
+
)"
|
|
261
|
+
git push
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Step 7: PR Apply Mode (리뷰 피드백 적용)
|
|
265
|
+
|
|
266
|
+
팀원 리뷰 후 피드백이 있으면 pr-apply 모드로 진입합니다.
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# 리뷰 코멘트 확인
|
|
270
|
+
gh pr view <PR번호> --comments
|
|
271
|
+
|
|
272
|
+
# 피드백 분류
|
|
273
|
+
# Critical - 반드시 수정
|
|
274
|
+
# Suggestion - 검토 후 결정
|
|
275
|
+
# Question - 답변 필요
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**피드백 반영:**
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
# 코드 수정 후 커밋
|
|
282
|
+
git add <수정파일>
|
|
283
|
+
git commit -m "$(cat <<'EOF'
|
|
284
|
+
FIX: PR 리뷰 피드백 반영
|
|
285
|
+
|
|
286
|
+
- [Critical] 피드백1 반영
|
|
287
|
+
- [Suggestion] 피드백2 반영
|
|
288
|
+
|
|
289
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
290
|
+
EOF
|
|
291
|
+
)"
|
|
292
|
+
git push
|
|
293
|
+
|
|
294
|
+
# 리뷰어에게 알림
|
|
295
|
+
gh pr comment <PR번호> --body "리뷰 피드백 반영 완료. 재확인 부탁드립니다."
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
> 상세 가이드: `.claude/skills/Git/pr-apply.md`
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 전체 PR 워크플로우 요약
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
306
|
+
│ 1. 변경사항 분석 → 2. 영향 범위 분석 → 3. 영향 판단 │
|
|
307
|
+
│ ↓ │
|
|
308
|
+
│ 4. PR 본문 작성 → 5. PR 생성 (gh pr create) │
|
|
309
|
+
│ ↓ │
|
|
310
|
+
│ 6. Self PR Review → 이슈 발견 시 수정 → push │
|
|
311
|
+
│ ↓ │
|
|
312
|
+
│ 7. 팀원 리뷰 대기 → 피드백 있으면 PR Apply Mode │
|
|
313
|
+
│ ↓ │
|
|
314
|
+
│ 8. Approve → Merge │
|
|
315
|
+
└─────────────────────────────────────────────────────────────┘
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### 관련 Skill 참조
|
|
319
|
+
|
|
320
|
+
| 단계 | Skill |
|
|
321
|
+
|------|-------|
|
|
322
|
+
| PR Review | `.claude/skills/Git/pr-review.md` |
|
|
323
|
+
| PR Apply | `.claude/skills/Git/pr-apply.md` |
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-apply
|
|
3
|
+
description: PR 리뷰 피드백 적용 스킬. 리뷰 코멘트 확인, 코드 수정, 커밋 생성.
|
|
4
|
+
keywords: [PR피드백, 리뷰적용, 코드수정, 코멘트, 변경요청, 재커밋]
|
|
5
|
+
estimated_tokens: ~250
|
|
6
|
+
user-invocable: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# PR Apply Skill
|
|
10
|
+
|
|
11
|
+
PR 리뷰 피드백을 코드에 반영하는 가이드.
|
|
12
|
+
|
|
13
|
+
## Apply Workflow
|
|
14
|
+
|
|
15
|
+
### Step 1: 리뷰 피드백 확인
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# PR 코멘트 조회
|
|
19
|
+
gh pr view <PR번호> --comments
|
|
20
|
+
|
|
21
|
+
# PR diff 확인
|
|
22
|
+
gh pr diff <PR번호>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Step 2: 피드백 분류
|
|
26
|
+
|
|
27
|
+
| 분류 | 대응 |
|
|
28
|
+
|------|------|
|
|
29
|
+
| Critical | 반드시 수정 |
|
|
30
|
+
| Suggestion | 검토 후 적용 여부 결정 |
|
|
31
|
+
| Question | 답변 코멘트 작성 |
|
|
32
|
+
|
|
33
|
+
### Step 3: 코드 수정
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 현재 브랜치에서 수정
|
|
37
|
+
git checkout feature/branch-name
|
|
38
|
+
|
|
39
|
+
# 수정 후 커밋 (리뷰 반영임을 명시)
|
|
40
|
+
git commit -m "$(cat <<'EOF'
|
|
41
|
+
FIX: PR 리뷰 피드백 반영
|
|
42
|
+
|
|
43
|
+
- 피드백 1 반영 내용
|
|
44
|
+
- 피드백 2 반영 내용
|
|
45
|
+
|
|
46
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
47
|
+
EOF
|
|
48
|
+
)"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Step 4: PR 업데이트
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 변경사항 push
|
|
55
|
+
git push origin feature/branch-name
|
|
56
|
+
|
|
57
|
+
# 리뷰어에게 수정 완료 알림 (선택)
|
|
58
|
+
gh pr comment <PR번호> --body "리뷰 피드백 반영 완료했습니다. 재확인 부탁드립니다."
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 피드백 대응 원칙
|
|
62
|
+
|
|
63
|
+
### 수용할 때
|
|
64
|
+
|
|
65
|
+
- 코드 수정 후 커밋
|
|
66
|
+
- 복잡한 변경은 별도 커밋으로 분리
|
|
67
|
+
- 수정 완료 후 리뷰어에게 알림
|
|
68
|
+
|
|
69
|
+
### 반대 의견이 있을 때
|
|
70
|
+
|
|
71
|
+
- PR 코멘트로 이유 설명
|
|
72
|
+
- 대안 제시
|
|
73
|
+
- 합의 후 진행
|
|
74
|
+
|
|
75
|
+
### 질문에 답변할 때
|
|
76
|
+
|
|
77
|
+
- 해당 코멘트에 직접 답변
|
|
78
|
+
- 필요시 코드에 주석 추가
|
|
79
|
+
|
|
80
|
+
## 체크리스트
|
|
81
|
+
|
|
82
|
+
- [ ] 모든 Critical 피드백 반영
|
|
83
|
+
- [ ] Suggestion 검토 및 결정
|
|
84
|
+
- [ ] Question 답변 완료
|
|
85
|
+
- [ ] `lint` 통과
|
|
86
|
+
- [ ] `build` 성공
|
|
87
|
+
- [ ] 리뷰어에게 재확인 요청
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-review
|
|
3
|
+
description: PR 코드 리뷰 스킬. 체크리스트 기반 구조적 리뷰 수행.
|
|
4
|
+
keywords: [PR리뷰, 코드리뷰, MR, 머지리퀘스트, 체크리스트, Critical, Warning, Approved]
|
|
5
|
+
estimated_tokens: ~300
|
|
6
|
+
user-invocable: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# PR Review Skill
|
|
10
|
+
|
|
11
|
+
체크리스트 기반 Pull Request 리뷰.
|
|
12
|
+
|
|
13
|
+
## Review Workflow
|
|
14
|
+
|
|
15
|
+
### Step 1: Review Plan 작성
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
## PR Review Plan
|
|
19
|
+
|
|
20
|
+
- [ ] **PR 범위 파악**
|
|
21
|
+
- 목적:
|
|
22
|
+
- 예상 동작 변경:
|
|
23
|
+
|
|
24
|
+
- [ ] **파일별 리뷰**
|
|
25
|
+
- [ ] `file1.ts` - 설명
|
|
26
|
+
- [ ] `file2.tsx` - 설명
|
|
27
|
+
|
|
28
|
+
- [ ] **구현 품질**
|
|
29
|
+
- [ ] 로직 정확성
|
|
30
|
+
- [ ] 에러 처리
|
|
31
|
+
- [ ] 엣지 케이스
|
|
32
|
+
- [ ] 타입 안전성
|
|
33
|
+
|
|
34
|
+
- [ ] **Best Practices**
|
|
35
|
+
- [ ] 유지보수성
|
|
36
|
+
- [ ] 성능
|
|
37
|
+
- [ ] 보안
|
|
38
|
+
|
|
39
|
+
- [ ] **통합**
|
|
40
|
+
- [ ] Breaking changes
|
|
41
|
+
- [ ] API 계약
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Step 2: 리뷰 실행
|
|
45
|
+
|
|
46
|
+
- 완료 항목 `[x]` 체크
|
|
47
|
+
- 이슈에 인라인 코멘트
|
|
48
|
+
- 심각도별 분류
|
|
49
|
+
|
|
50
|
+
### Step 3: 결과 요약
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
## Summary: Approved / Changes Requested / Blocked
|
|
54
|
+
|
|
55
|
+
### Critical (필수 수정)
|
|
56
|
+
### Suggestions (권장)
|
|
57
|
+
### Questions (질문)
|
|
58
|
+
### Highlights (좋은 점)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## PR 타입별 Focus
|
|
62
|
+
|
|
63
|
+
| Type | Focus Areas |
|
|
64
|
+
|------|-------------|
|
|
65
|
+
| Feature | 로직, 테스트, 문서 |
|
|
66
|
+
| Bugfix | 근본 원인, 회귀 방지 |
|
|
67
|
+
| Refactor | 동작 보존, 성능 |
|
|
68
|
+
| Config | 보안, 환경 호환성 |
|
|
69
|
+
| Dependency | Breaking changes, 보안 취약점 |
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: React
|
|
3
|
+
description: React 컴포넌트 작성 시 사용. 파일/폴더 구조, useState/useEffect 규칙, props 설계, 렌더링 최적화 기법 제공.
|
|
4
|
+
keywords: [React, 컴포넌트, useState, useEffect, 훅, props, 상태관리, 렌더링, 최적화]
|
|
5
|
+
estimated_tokens: ~600
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# React 개발 스킬
|
|
9
|
+
|
|
10
|
+
## 핵심 역할
|
|
11
|
+
|
|
12
|
+
- React 컴포넌트 설계 및 구현 가이드
|
|
13
|
+
- 상태 관리 패턴 적용
|
|
14
|
+
- 성능 최적화 기법 적용
|
|
15
|
+
|
|
16
|
+
## 컴포넌트 설계 원칙
|
|
17
|
+
|
|
18
|
+
### 파일/폴더 구조
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
src/
|
|
22
|
+
├── components/ # 재사용 가능한 공통 컴포넌트
|
|
23
|
+
│ └── Button/
|
|
24
|
+
│ ├── Button.tsx
|
|
25
|
+
│ ├── Button.styles.ts
|
|
26
|
+
│ └── index.ts
|
|
27
|
+
├── features/ # 기능별 모듈
|
|
28
|
+
│ └── auth/
|
|
29
|
+
│ ├── components/
|
|
30
|
+
│ ├── hooks/
|
|
31
|
+
│ └── utils/
|
|
32
|
+
├── hooks/ # 공통 커스텀 훅
|
|
33
|
+
├── utils/ # 유틸리티 함수
|
|
34
|
+
└── types/ # 공통 타입 정의
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 컴포넌트 분류
|
|
38
|
+
|
|
39
|
+
| 유형 | 설명 | 예시 |
|
|
40
|
+
|------|------|------|
|
|
41
|
+
| Presentational | UI만 담당, props로 데이터 수신 | Button, Card, Input |
|
|
42
|
+
| Container | 로직/상태 관리, 데이터 fetch | UserListContainer |
|
|
43
|
+
| Layout | 페이지 레이아웃 구조 | Header, Sidebar, Footer |
|
|
44
|
+
| Page | 라우트에 매핑되는 페이지 | HomePage, LoginPage |
|
|
45
|
+
|
|
46
|
+
## 필수 준수 사항
|
|
47
|
+
|
|
48
|
+
### 컴포넌트 작성
|
|
49
|
+
|
|
50
|
+
| 규칙 | 올바른 예 | 잘못된 예 |
|
|
51
|
+
|------|----------|----------|
|
|
52
|
+
| 함수형 컴포넌트 사용 | `function Button() {}` | `class Button extends React.Component` |
|
|
53
|
+
| Props 타입 명시 | `interface ButtonProps { ... }` | `props: any` |
|
|
54
|
+
| 단일 책임 원칙 | 하나의 역할만 담당 | 여러 기능 혼합 |
|
|
55
|
+
| 적절한 컴포넌트 분리 | 100줄 이하 권장 | 500줄 이상의 거대 컴포넌트 |
|
|
56
|
+
|
|
57
|
+
### 상태 관리
|
|
58
|
+
|
|
59
|
+
| 규칙 | 설명 |
|
|
60
|
+
|------|------|
|
|
61
|
+
| 상태 최소화 | 파생 가능한 값은 상태로 두지 않음 |
|
|
62
|
+
| 상태 위치 | 필요한 가장 가까운 공통 조상에 배치 |
|
|
63
|
+
| 불변성 유지 | 상태 직접 수정 금지, 새 객체/배열 생성 |
|
|
64
|
+
| 복잡한 상태 | useReducer 또는 상태 관리 라이브러리 사용 |
|
|
65
|
+
|
|
66
|
+
### Hooks 규칙
|
|
67
|
+
|
|
68
|
+
| 규칙 | 설명 |
|
|
69
|
+
|------|------|
|
|
70
|
+
| 최상위에서만 호출 | 조건문, 반복문 내부에서 호출 금지 |
|
|
71
|
+
| 의존성 배열 정확히 | useEffect, useMemo, useCallback의 deps 누락 금지 |
|
|
72
|
+
| 커스텀 훅 추출 | 재사용 가능한 로직은 커스텀 훅으로 분리 |
|
|
73
|
+
| 훅 네이밍 | `use` 접두사 필수 (예: `useAuth`, `useFetch`) |
|
|
74
|
+
|
|
75
|
+
## 성능 최적화
|
|
76
|
+
|
|
77
|
+
### 메모이제이션
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// 컴포넌트 메모이제이션
|
|
81
|
+
const MemoizedComponent = React.memo(Component);
|
|
82
|
+
|
|
83
|
+
// 값 메모이제이션
|
|
84
|
+
const expensiveValue = useMemo(() => computeExpensive(a, b), [a, b]);
|
|
85
|
+
|
|
86
|
+
// 함수 메모이제이션
|
|
87
|
+
const handleClick = useCallback(() => doSomething(id), [id]);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 최적화 적용 기준
|
|
91
|
+
|
|
92
|
+
| 상황 | 적용 |
|
|
93
|
+
|------|------|
|
|
94
|
+
| 리스트 렌더링 | `key` prop 필수, 안정적인 ID 사용 |
|
|
95
|
+
| 자주 리렌더링되는 컴포넌트 | `React.memo` 적용 검토 |
|
|
96
|
+
| 비용이 큰 계산 | `useMemo` 사용 |
|
|
97
|
+
| 자식에게 전달하는 콜백 | `useCallback` 사용 |
|
|
98
|
+
|
|
99
|
+
### 불필요한 최적화 금지
|
|
100
|
+
|
|
101
|
+
- 모든 컴포넌트에 무조건 memo 적용 금지
|
|
102
|
+
- 측정 없이 최적화하지 않음 (React DevTools Profiler 사용)
|
|
103
|
+
|
|
104
|
+
## useEffect 패턴
|
|
105
|
+
|
|
106
|
+
### 올바른 사용
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// 데이터 fetch
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
const controller = new AbortController();
|
|
112
|
+
fetchData(controller.signal);
|
|
113
|
+
return () => controller.abort();
|
|
114
|
+
}, [dependency]);
|
|
115
|
+
|
|
116
|
+
// 이벤트 구독
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
window.addEventListener('resize', handleResize);
|
|
119
|
+
return () => window.removeEventListener('resize', handleResize);
|
|
120
|
+
}, []);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 피해야 할 패턴
|
|
124
|
+
|
|
125
|
+
| 안티패턴 | 대안 |
|
|
126
|
+
|----------|------|
|
|
127
|
+
| props를 state로 복사 | props 직접 사용 |
|
|
128
|
+
| 렌더링 중 상태 업데이트 | 조건부 렌더링 또는 useMemo |
|
|
129
|
+
| 불필요한 Effect | 이벤트 핸들러로 처리 |
|
|
130
|
+
|
|
131
|
+
## 체크리스트
|
|
132
|
+
|
|
133
|
+
### 컴포넌트 작성 시
|
|
134
|
+
- [ ] Props 타입이 명시되어 있는가?
|
|
135
|
+
- [ ] 컴포넌트가 단일 책임을 가지는가?
|
|
136
|
+
- [ ] 적절한 크기로 분리되어 있는가?
|
|
137
|
+
|
|
138
|
+
### 상태 관리
|
|
139
|
+
- [ ] 상태가 최소화되어 있는가?
|
|
140
|
+
- [ ] 상태 위치가 적절한가?
|
|
141
|
+
- [ ] 불변성이 유지되는가?
|
|
142
|
+
|
|
143
|
+
### Hooks
|
|
144
|
+
- [ ] 의존성 배열이 정확한가?
|
|
145
|
+
- [ ] cleanup 함수가 필요한 경우 작성되었는가?
|
|
146
|
+
- [ ] 커스텀 훅으로 분리할 로직이 있는가?
|
|
147
|
+
|
|
148
|
+
### 성능
|
|
149
|
+
- [ ] 리스트에 적절한 key가 사용되었는가?
|
|
150
|
+
- [ ] 불필요한 리렌더링이 없는가?
|
|
151
|
+
- [ ] 메모이제이션이 적절히 사용되었는가?
|
|
152
|
+
|
|
153
|
+
## 관련 문서
|
|
154
|
+
|
|
155
|
+
| 문서 | 설명 |
|
|
156
|
+
|------|------|
|
|
157
|
+
| `tanstack-router.md` | TanStack Router 파일 기반 라우팅 패턴 |
|
|
158
|
+
| `react-hook-form.md` | React Hook Form + Zod 폼 검증 패턴 |
|
|
159
|
+
| `tailwind-styled.md` | tailwind-styled-components DOM depth 최소화 |
|