@kood/claude-code 0.1.6 → 0.1.7
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 +21 -243
- package/package.json +1 -1
- package/templates/hono/CLAUDE.md +10 -6
- package/templates/hono/docs/deployment/index.md +5 -0
- package/templates/hono/docs/library/hono/index.md +6 -0
- package/templates/hono/docs/library/prisma/index.md +3 -0
- package/templates/npx/CLAUDE.md +8 -2
- package/templates/tanstack-start/CLAUDE.md +103 -255
- package/templates/tanstack-start/docs/deployment/cloudflare.md +37 -424
- package/templates/tanstack-start/docs/deployment/index.md +57 -286
- package/templates/tanstack-start/docs/deployment/nitro.md +36 -318
- package/templates/tanstack-start/docs/deployment/railway.md +40 -409
- package/templates/tanstack-start/docs/deployment/vercel.md +43 -465
- package/templates/tanstack-start/docs/design/accessibility.md +56 -326
- package/templates/tanstack-start/docs/design/color.md +37 -179
- package/templates/tanstack-start/docs/design/components.md +77 -311
- package/templates/tanstack-start/docs/design/index.md +24 -87
- package/templates/tanstack-start/docs/design/safe-area.md +51 -250
- package/templates/tanstack-start/docs/design/spacing.md +57 -276
- package/templates/tanstack-start/docs/design/tailwind-setup.md +45 -359
- package/templates/tanstack-start/docs/design/typography.md +40 -284
- package/templates/tanstack-start/docs/library/better-auth/2fa.md +27 -115
- package/templates/tanstack-start/docs/library/better-auth/advanced.md +22 -105
- package/templates/tanstack-start/docs/library/better-auth/index.md +17 -66
- package/templates/tanstack-start/docs/library/better-auth/plugins.md +11 -88
- package/templates/tanstack-start/docs/library/better-auth/session.md +12 -92
- package/templates/tanstack-start/docs/library/better-auth/setup.md +9 -91
- package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +30 -358
- package/templates/tanstack-start/docs/library/prisma/config.md +27 -327
- package/templates/tanstack-start/docs/library/prisma/crud.md +46 -174
- package/templates/tanstack-start/docs/library/prisma/index.md +23 -113
- package/templates/tanstack-start/docs/library/prisma/relations.md +31 -153
- package/templates/tanstack-start/docs/library/prisma/schema.md +40 -217
- package/templates/tanstack-start/docs/library/prisma/setup.md +12 -112
- package/templates/tanstack-start/docs/library/prisma/transactions.md +20 -110
- package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -99
- package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +28 -107
- package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +44 -146
- package/templates/tanstack-start/docs/library/tanstack-query/setup.md +11 -70
- package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +33 -127
- package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +49 -149
- package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +19 -112
- package/templates/tanstack-start/docs/library/tanstack-start/index.md +33 -80
- package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +28 -106
- package/templates/tanstack-start/docs/library/tanstack-start/routing.md +21 -118
- package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +34 -246
- package/templates/tanstack-start/docs/library/tanstack-start/setup.md +6 -39
- package/templates/tanstack-start/docs/library/zod/basic-types.md +33 -145
- package/templates/tanstack-start/docs/library/zod/complex-types.md +32 -156
- package/templates/tanstack-start/docs/library/zod/index.md +22 -150
- package/templates/tanstack-start/docs/library/zod/transforms.md +20 -129
- package/templates/tanstack-start/docs/library/zod/validation.md +39 -155
- package/templates/hono/docs/commands/git.md +0 -145
- package/templates/hono/docs/mcp/context7.md +0 -106
- package/templates/hono/docs/mcp/index.md +0 -176
- package/templates/hono/docs/mcp/sequential-thinking.md +0 -101
- package/templates/hono/docs/mcp/serena.md +0 -269
- package/templates/hono/docs/mcp/sgrep.md +0 -105
- package/templates/hono/docs/skills/gemini-review/SKILL.md +0 -220
- package/templates/hono/docs/skills/gemini-review/references/checklists.md +0 -136
- package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +0 -303
- package/templates/npx/docs/commands/git.md +0 -145
- package/templates/npx/docs/mcp/index.md +0 -60
- package/templates/npx/docs/skills/gemini-review/SKILL.md +0 -220
- package/templates/npx/docs/skills/gemini-review/references/checklists.md +0 -134
- package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +0 -301
- package/templates/tanstack-start/docs/commands/git.md +0 -145
- package/templates/tanstack-start/docs/mcp/context7.md +0 -204
- package/templates/tanstack-start/docs/mcp/index.md +0 -177
- package/templates/tanstack-start/docs/mcp/sequential-thinking.md +0 -180
- package/templates/tanstack-start/docs/mcp/serena.md +0 -269
- package/templates/tanstack-start/docs/mcp/sgrep.md +0 -174
- package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +0 -220
- package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +0 -144
- package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +0 -292
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
# Serena MCP Server
|
|
2
|
-
|
|
3
|
-
> **Purpose**: 시맨틱 코드 이해, 프로젝트 메모리, 세션 지속성을 위한 MCP 서버
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 프로젝트 시작 전 필수 확인
|
|
8
|
-
|
|
9
|
-
프로젝트 작업을 시작하기 전에 **반드시** Serena가 활성화되어 있는지 확인해야 합니다.
|
|
10
|
-
|
|
11
|
-
### 1. 현재 설정 확인
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
mcp__serena__get_current_config
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**확인 사항:**
|
|
18
|
-
- `Active project`: 현재 작업할 프로젝트명이 표시되는지 확인
|
|
19
|
-
- 프로젝트가 `Available projects` 목록에 있는지 확인
|
|
20
|
-
|
|
21
|
-
### 2. 프로젝트 활성화
|
|
22
|
-
|
|
23
|
-
프로젝트가 활성화되지 않은 경우:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
mcp__serena__activate_project({ project: "프로젝트명" })
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 3. 온보딩 확인
|
|
30
|
-
|
|
31
|
-
새 프로젝트의 경우 온보딩이 필요할 수 있습니다:
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
mcp__serena__check_onboarding_performed
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
온보딩이 필요한 경우:
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
mcp__serena__onboarding
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## 핵심 기능
|
|
46
|
-
|
|
47
|
-
### 심볼 탐색 (Symbol Navigation)
|
|
48
|
-
|
|
49
|
-
파일 내 심볼(클래스, 함수, 변수 등) 개요 확인:
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
mcp__serena__get_symbols_overview({ relative_path: "src/index.ts" })
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
특정 심볼 검색:
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
mcp__serena__find_symbol({
|
|
59
|
-
name_path_pattern: "MyClass/myMethod",
|
|
60
|
-
include_body: true,
|
|
61
|
-
depth: 1
|
|
62
|
-
})
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
심볼 참조 찾기:
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
mcp__serena__find_referencing_symbols({
|
|
69
|
-
name_path: "MyClass",
|
|
70
|
-
relative_path: "src/my-class.ts"
|
|
71
|
-
})
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### 코드 수정 (Code Modification)
|
|
75
|
-
|
|
76
|
-
심볼 본문 교체:
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
mcp__serena__replace_symbol_body({
|
|
80
|
-
name_path: "MyClass/myMethod",
|
|
81
|
-
relative_path: "src/my-class.ts",
|
|
82
|
-
body: "새로운 코드 본문"
|
|
83
|
-
})
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
심볼 뒤에 코드 삽입:
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
mcp__serena__insert_after_symbol({
|
|
90
|
-
name_path: "MyClass",
|
|
91
|
-
relative_path: "src/my-class.ts",
|
|
92
|
-
body: "\n\nexport const newFunction = () => {}"
|
|
93
|
-
})
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
심볼 앞에 코드 삽입:
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
mcp__serena__insert_before_symbol({
|
|
100
|
-
name_path: "MyClass",
|
|
101
|
-
relative_path: "src/my-class.ts",
|
|
102
|
-
body: "import { Something } from './something'\n\n"
|
|
103
|
-
})
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
심볼 이름 변경 (전체 코드베이스):
|
|
107
|
-
|
|
108
|
-
```
|
|
109
|
-
mcp__serena__rename_symbol({
|
|
110
|
-
name_path: "oldFunctionName",
|
|
111
|
-
relative_path: "src/utils.ts",
|
|
112
|
-
new_name: "newFunctionName"
|
|
113
|
-
})
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### 파일 탐색 (File Navigation)
|
|
117
|
-
|
|
118
|
-
디렉토리 목록:
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
mcp__serena__list_dir({
|
|
122
|
-
relative_path: "src",
|
|
123
|
-
recursive: false
|
|
124
|
-
})
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
파일 검색:
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
mcp__serena__find_file({
|
|
131
|
-
file_mask: "*.ts",
|
|
132
|
-
relative_path: "src"
|
|
133
|
-
})
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
패턴 검색:
|
|
137
|
-
|
|
138
|
-
```
|
|
139
|
-
mcp__serena__search_for_pattern({
|
|
140
|
-
substring_pattern: "createServerFn",
|
|
141
|
-
relative_path: "src/services",
|
|
142
|
-
context_lines_before: 2,
|
|
143
|
-
context_lines_after: 2
|
|
144
|
-
})
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### 메모리 관리 (Memory Management)
|
|
148
|
-
|
|
149
|
-
프로젝트 관련 정보를 메모리에 저장하여 세션 간 유지:
|
|
150
|
-
|
|
151
|
-
메모리 목록 확인:
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
mcp__serena__list_memories
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
메모리 읽기:
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
mcp__serena__read_memory({ memory_file_name: "architecture.md" })
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
메모리 작성:
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
mcp__serena__write_memory({
|
|
167
|
-
memory_file_name: "decisions.md",
|
|
168
|
-
content: "# 주요 결정 사항\n\n- API 설계: REST 대신 Server Functions 사용"
|
|
169
|
-
})
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
메모리 수정:
|
|
173
|
-
|
|
174
|
-
```
|
|
175
|
-
mcp__serena__edit_memory({
|
|
176
|
-
memory_file_name: "decisions.md",
|
|
177
|
-
needle: "REST 대신",
|
|
178
|
-
repl: "REST API 대신",
|
|
179
|
-
mode: "literal"
|
|
180
|
-
})
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
메모리 삭제:
|
|
184
|
-
|
|
185
|
-
```
|
|
186
|
-
mcp__serena__delete_memory({ memory_file_name: "outdated.md" })
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### 사고 도구 (Thinking Tools)
|
|
190
|
-
|
|
191
|
-
수집된 정보 검토:
|
|
192
|
-
|
|
193
|
-
```
|
|
194
|
-
mcp__serena__think_about_collected_information
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
작업 목표 준수 확인:
|
|
198
|
-
|
|
199
|
-
```
|
|
200
|
-
mcp__serena__think_about_task_adherence
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
작업 완료 여부 확인:
|
|
204
|
-
|
|
205
|
-
```
|
|
206
|
-
mcp__serena__think_about_whether_you_are_done
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## 사용 시나리오
|
|
212
|
-
|
|
213
|
-
### 시나리오 1: 새 프로젝트 시작
|
|
214
|
-
|
|
215
|
-
```
|
|
216
|
-
1. get_current_config → 현재 상태 확인
|
|
217
|
-
2. activate_project → 프로젝트 활성화
|
|
218
|
-
3. check_onboarding_performed → 온보딩 필요 여부 확인
|
|
219
|
-
4. onboarding → 필요시 온보딩 진행
|
|
220
|
-
5. list_memories → 기존 메모리 확인
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### 시나리오 2: 기존 프로젝트 재개
|
|
224
|
-
|
|
225
|
-
```
|
|
226
|
-
1. get_current_config → 프로젝트 활성화 확인
|
|
227
|
-
2. list_memories → 이전 세션 컨텍스트 확인
|
|
228
|
-
3. read_memory → 필요한 메모리 읽기
|
|
229
|
-
4. 작업 진행
|
|
230
|
-
5. write_memory → 중요 결정/진행 상황 저장
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### 시나리오 3: 대규모 리팩토링
|
|
234
|
-
|
|
235
|
-
```
|
|
236
|
-
1. get_symbols_overview → 파일 구조 파악
|
|
237
|
-
2. find_symbol → 수정할 심볼 찾기
|
|
238
|
-
3. find_referencing_symbols → 영향받는 코드 확인
|
|
239
|
-
4. replace_symbol_body → 심볼 수정
|
|
240
|
-
5. rename_symbol → 필요시 이름 변경
|
|
241
|
-
6. think_about_whether_you_are_done → 완료 확인
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## Best Practices
|
|
247
|
-
|
|
248
|
-
### 1. 항상 프로젝트 활성화 확인
|
|
249
|
-
|
|
250
|
-
작업 시작 전 `get_current_config`로 올바른 프로젝트가 활성화되어 있는지 확인하세요.
|
|
251
|
-
|
|
252
|
-
### 2. 심볼 도구 우선 사용
|
|
253
|
-
|
|
254
|
-
전체 파일을 읽지 말고, `get_symbols_overview`와 `find_symbol`을 사용하여 필요한 부분만 확인하세요.
|
|
255
|
-
|
|
256
|
-
### 3. 메모리 적극 활용
|
|
257
|
-
|
|
258
|
-
중요한 결정, 아키텍처 정보, 작업 진행 상황을 메모리에 저장하여 세션 간 컨텍스트를 유지하세요.
|
|
259
|
-
|
|
260
|
-
### 4. 사고 도구 활용
|
|
261
|
-
|
|
262
|
-
복잡한 작업 중에는 `think_about_*` 도구를 사용하여 진행 상황을 검토하세요.
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
## 참고 자료
|
|
267
|
-
|
|
268
|
-
- [Serena GitHub](https://github.com/oraios/serena)
|
|
269
|
-
- [MCP Protocol](https://modelcontextprotocol.io)
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# sgrep - Semantic Grep
|
|
2
|
-
|
|
3
|
-
> AST 기반 시맨틱 코드 검색 도구
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## ⛔ 필수 규칙
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
❌ grep, rg 등 기본 검색 도구 사용 금지
|
|
11
|
-
❌ find 명령어로 코드 검색 금지
|
|
12
|
-
✅ 코드베이스 검색 시 sgrep 사용 필수
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 개요
|
|
18
|
-
|
|
19
|
-
sgrep는 단순 텍스트 매칭이 아닌 AST(Abstract Syntax Tree) 기반의 시맨틱 검색을 수행합니다.
|
|
20
|
-
|
|
21
|
-
### grep vs sgrep
|
|
22
|
-
|
|
23
|
-
| 기능 | grep | sgrep |
|
|
24
|
-
|------|------|-------|
|
|
25
|
-
| 검색 방식 | 텍스트 매칭 | AST 기반 |
|
|
26
|
-
| 코드 구조 인식 | ❌ | ✅ |
|
|
27
|
-
| 언어별 최적화 | ❌ | ✅ |
|
|
28
|
-
| False positive | 많음 | 적음 |
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 사용 시점
|
|
33
|
-
|
|
34
|
-
### ✅ sgrep 사용
|
|
35
|
-
- 함수 정의 찾기
|
|
36
|
-
- 클래스 사용처 검색
|
|
37
|
-
- 특정 패턴의 코드 찾기
|
|
38
|
-
- import 문 검색
|
|
39
|
-
- API 엔드포인트 검색
|
|
40
|
-
|
|
41
|
-
### 예시 상황
|
|
42
|
-
```
|
|
43
|
-
"prisma.user.create 사용처를 찾아줘" → sgrep 사용
|
|
44
|
-
"authMiddleware가 어디서 쓰이는지 찾아줘" → sgrep 사용
|
|
45
|
-
"HTTPException을 throw하는 곳을 찾아줘" → sgrep 사용
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## 장점
|
|
51
|
-
|
|
52
|
-
### 1. 정확한 코드 구조 인식
|
|
53
|
-
```typescript
|
|
54
|
-
// 주석 안의 function은 무시
|
|
55
|
-
// function test() {}
|
|
56
|
-
|
|
57
|
-
// 실제 함수만 찾음
|
|
58
|
-
function test() {}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 2. 언어별 최적화
|
|
62
|
-
- TypeScript/JavaScript
|
|
63
|
-
- Python
|
|
64
|
-
- Go
|
|
65
|
-
- 기타 주요 언어
|
|
66
|
-
|
|
67
|
-
### 3. 패턴 매칭
|
|
68
|
-
- 함수 호출 패턴
|
|
69
|
-
- 클래스 정의 패턴
|
|
70
|
-
- import/export 패턴
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## 설치
|
|
75
|
-
|
|
76
|
-
### Claude Code Plugin 설치 (권장)
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
# Plugin 추가
|
|
80
|
-
/plugin marketplace add rika-labs/sgrep
|
|
81
|
-
|
|
82
|
-
# 설치
|
|
83
|
-
/plugin install sgrep
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### 사용법
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
# 인증 처리 코드 찾기
|
|
90
|
-
sgrep search for where we handle authentication
|
|
91
|
-
|
|
92
|
-
# API 엔드포인트 검색
|
|
93
|
-
sgrep search API routes definition
|
|
94
|
-
|
|
95
|
-
# 에러 핸들링 패턴
|
|
96
|
-
sgrep search error handling with HTTPException
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## 관련 문서
|
|
102
|
-
|
|
103
|
-
- [MCP 개요](./index.md)
|
|
104
|
-
- [Sequential Thinking](./sequential-thinking.md)
|
|
105
|
-
- [Context7](./context7.md)
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gemini-review
|
|
3
|
-
description: Google Gemini CLI를 활용한 코드 리뷰 및 계획 검증 스킬. 구현 계획 검토, 코드 리뷰, 아키텍처 논의 시 Gemini를 세컨드 오피니언으로 활용. Hono, Cloudflare Workers 등 특화 체크리스트 지원. gemini-2.5-pro 모델 사용 (무료: 60req/min, 1000req/day).
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Gemini 리뷰 스킬
|
|
7
|
-
|
|
8
|
-
## 개요
|
|
9
|
-
|
|
10
|
-
Claude가 컨텍스트를 준비하고 Gemini가 독립적인 검증을 제공하는 듀얼 AI 리뷰 워크플로우. 결과는 항상 Gemini 원본 응답과 Claude의 종합 액션 플랜 두 섹션으로 제공.
|
|
11
|
-
|
|
12
|
-
**모델**: `gemini-2.5-pro` (고정)
|
|
13
|
-
**비용**: 무료 티어 (60 req/min, 1000 req/day)
|
|
14
|
-
|
|
15
|
-
## 사용 시점
|
|
16
|
-
|
|
17
|
-
- 코딩 전 구현 계획 검증
|
|
18
|
-
- 완성된 코드의 버그, 보안, 베스트 프랙티스 리뷰
|
|
19
|
-
- 아키텍처 결정에 대한 세컨드 AI 의견
|
|
20
|
-
- Hono, Cloudflare Workers 프로젝트 특화 피드백
|
|
21
|
-
|
|
22
|
-
## 워크플로우 타입
|
|
23
|
-
|
|
24
|
-
| 타입 | 목적 | 사용 시점 |
|
|
25
|
-
|------|------|-----------|
|
|
26
|
-
| **plan** | 구현 계획 검증 | 개발 시작 전 |
|
|
27
|
-
| **code** | 완성 코드 리뷰 | 기능 구현 후 |
|
|
28
|
-
| **architecture** | 시스템 설계 논의 | 설계 단계 또는 리팩토링 시 |
|
|
29
|
-
|
|
30
|
-
## 실행 프로세스
|
|
31
|
-
|
|
32
|
-
### Step 1: 사용자 컨텍스트 수집
|
|
33
|
-
|
|
34
|
-
실행 전 수집할 정보:
|
|
35
|
-
1. **리뷰 타입**: `plan`, `code`, `architecture`
|
|
36
|
-
2. **기술 스택** (선택): `hono`, `cloudflare`, `general`
|
|
37
|
-
3. **리뷰 대상**: 실제 계획, 코드, 아키텍처 설명
|
|
38
|
-
|
|
39
|
-
### Step 2: 체크리스트 로드
|
|
40
|
-
|
|
41
|
-
기술 스택에 따라 `references/checklists.md`에서 해당 체크리스트 로드:
|
|
42
|
-
- **Hono**: API 설계, 미들웨어 패턴, 유효성 검사, 에러 처리
|
|
43
|
-
- **Cloudflare**: Workers, KV, D1, R2, 엣지 런타임 고려사항
|
|
44
|
-
- **General**: 범용 베스트 프랙티스
|
|
45
|
-
|
|
46
|
-
### Step 3: Gemini 명령어 구성 및 실행
|
|
47
|
-
|
|
48
|
-
`references/prompt-templates.md`에서 적절한 프롬프트 템플릿 로드 후 실행:
|
|
49
|
-
|
|
50
|
-
**인라인 프롬프트:**
|
|
51
|
-
```bash
|
|
52
|
-
gemini -m gemini-2.5-pro -p "{constructed_prompt}" --output-format json
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
**파일 내용 리뷰:**
|
|
56
|
-
```bash
|
|
57
|
-
cat {file_path} | gemini -m gemini-2.5-pro -p "{review_instructions}" --output-format json
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**멀티라인 프롬프트 (heredoc):**
|
|
61
|
-
```bash
|
|
62
|
-
gemini -m gemini-2.5-pro --output-format json -p "$(cat << 'EOF'
|
|
63
|
-
{constructed_prompt}
|
|
64
|
-
EOF
|
|
65
|
-
)"
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Step 4: JSON 응답 파싱
|
|
69
|
-
|
|
70
|
-
Gemini 응답 구조:
|
|
71
|
-
```json
|
|
72
|
-
{
|
|
73
|
-
"response": "실제 리뷰 내용",
|
|
74
|
-
"stats": {
|
|
75
|
-
"models": { ... },
|
|
76
|
-
"tools": { ... }
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
`response` 필드에서 리뷰 내용 추출. `jq` 사용:
|
|
82
|
-
```bash
|
|
83
|
-
result=$(gemini -m gemini-2.5-pro -p "..." --output-format json)
|
|
84
|
-
echo "$result" | jq -r '.response'
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Step 5: 결과를 두 섹션으로 제시
|
|
88
|
-
|
|
89
|
-
**중요**: 항상 두 개의 명확히 구분된 섹션으로 결과 제시:
|
|
90
|
-
|
|
91
|
-
#### 섹션 A: Gemini 원본 응답
|
|
92
|
-
Gemini의 완전한 응답을 수정 없이 제시. 사용자에게 Gemini가 발견한 내용을 그대로 보여줌.
|
|
93
|
-
|
|
94
|
-
#### 섹션 B: Claude 분석 및 액션 플랜
|
|
95
|
-
Gemini 피드백을 기반으로 Claude가 제공:
|
|
96
|
-
|
|
97
|
-
1. **요약** (2-3문장)
|
|
98
|
-
- 핵심 발견 사항
|
|
99
|
-
- 전체 평가
|
|
100
|
-
|
|
101
|
-
2. **액션 아이템** (우선순위 목록)
|
|
102
|
-
- 🔴 심각: 진행 전 반드시 수정
|
|
103
|
-
- 🟡 중요: 조속히 해결 필요
|
|
104
|
-
- 🟢 경미: 개선하면 좋음
|
|
105
|
-
|
|
106
|
-
3. **바로 적용 가능한 코드** (해당 시)
|
|
107
|
-
- 각 이슈에 대한 실제 코드 수정안
|
|
108
|
-
- 필요 시 before/after 비교 포함
|
|
109
|
-
|
|
110
|
-
## 출력 형식 템플릿
|
|
111
|
-
|
|
112
|
-
```markdown
|
|
113
|
-
---
|
|
114
|
-
## 📋 Gemini 리뷰 결과
|
|
115
|
-
|
|
116
|
-
### A. Gemini 응답 (원본)
|
|
117
|
-
|
|
118
|
-
{gemini_response_verbatim}
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
### B. Claude 분석
|
|
123
|
-
|
|
124
|
-
#### 요약
|
|
125
|
-
{2-3문장 개요}
|
|
126
|
-
|
|
127
|
-
#### 액션 아이템
|
|
128
|
-
|
|
129
|
-
🔴 **심각**
|
|
130
|
-
- 이슈: {설명}
|
|
131
|
-
- 수정: {해결책}
|
|
132
|
-
|
|
133
|
-
🟡 **중요**
|
|
134
|
-
- 이슈: {설명}
|
|
135
|
-
- 수정: {해결책}
|
|
136
|
-
|
|
137
|
-
🟢 **경미**
|
|
138
|
-
- 이슈: {설명}
|
|
139
|
-
- 수정: {해결책}
|
|
140
|
-
|
|
141
|
-
#### 바로 적용 가능한 코드
|
|
142
|
-
|
|
143
|
-
**{이슈명}**
|
|
144
|
-
```{language}
|
|
145
|
-
{fixed_code}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## 명령어 예시
|
|
152
|
-
|
|
153
|
-
### 계획 리뷰
|
|
154
|
-
```bash
|
|
155
|
-
gemini -m gemini-2.5-pro --output-format json -p "$(cat << 'EOF'
|
|
156
|
-
[계획 리뷰 요청]
|
|
157
|
-
이 구현 계획의 완전성과 잠재적 문제를 검토해주세요:
|
|
158
|
-
|
|
159
|
-
{plan_content}
|
|
160
|
-
|
|
161
|
-
확인 사항: 로직 오류, 누락된 엣지 케이스, 아키텍처 결함, 보안 우려.
|
|
162
|
-
구체적이고 실행 가능한 피드백을 제공해주세요.
|
|
163
|
-
EOF
|
|
164
|
-
)"
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### 코드 리뷰 (파일 파이핑)
|
|
168
|
-
```bash
|
|
169
|
-
cat src/routes/auth.ts | gemini -m gemini-2.5-pro -p "이 Hono 인증 코드를 보안 이슈, 버그, 베스트 프랙티스 관점에서 리뷰해주세요. 구체적인 라인별 피드백을 제공해주세요." --output-format json
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### 아키텍처 리뷰
|
|
173
|
-
```bash
|
|
174
|
-
gemini -m gemini-2.5-pro --output-format json -p "$(cat << 'EOF'
|
|
175
|
-
[아키텍처 리뷰]
|
|
176
|
-
시스템: {system_name}
|
|
177
|
-
기술 스택: Hono + Cloudflare Workers + D1
|
|
178
|
-
|
|
179
|
-
{architecture_description}
|
|
180
|
-
|
|
181
|
-
평가 항목: 확장성, 신뢰성, 유지보수성, 보안, 비용 효율성.
|
|
182
|
-
트레이드오프 분석과 함께 개선안을 제시해주세요.
|
|
183
|
-
EOF
|
|
184
|
-
)"
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
## 환경 호환성
|
|
188
|
-
|
|
189
|
-
| 환경 | 실행 방법 |
|
|
190
|
-
|------|-----------|
|
|
191
|
-
| Claude Code | 직접 bash 실행 |
|
|
192
|
-
| Claude (Web/Desktop) | `bash_tool` 사용 |
|
|
193
|
-
|
|
194
|
-
명령어 문법은 모든 환경에서 동일.
|
|
195
|
-
|
|
196
|
-
## 에러 처리
|
|
197
|
-
|
|
198
|
-
Gemini 에러 발생 시:
|
|
199
|
-
1. 사용자에게 에러 메시지 표시
|
|
200
|
-
2. 일반적인 문제 확인:
|
|
201
|
-
- 할당량 초과 (60/min 또는 1000/day 한도)
|
|
202
|
-
- 네트워크 연결
|
|
203
|
-
- 잘못된 프롬프트 형식
|
|
204
|
-
3. 재시도 또는 대안 제안
|
|
205
|
-
|
|
206
|
-
## 할당량 관리
|
|
207
|
-
|
|
208
|
-
무료 티어 한도:
|
|
209
|
-
- 분당 60 요청
|
|
210
|
-
- 일당 1000 요청
|
|
211
|
-
|
|
212
|
-
할당량 절약:
|
|
213
|
-
- 관련 리뷰를 단일 프롬프트로 결합
|
|
214
|
-
- 구체적이고 집중된 리뷰 요청 사용
|
|
215
|
-
- 중복 리뷰 회피
|
|
216
|
-
|
|
217
|
-
## 참조 파일
|
|
218
|
-
|
|
219
|
-
- `references/checklists.md`: 기술 스택별 리뷰 체크리스트
|
|
220
|
-
- `references/prompt-templates.md`: 리뷰 타입별 프롬프트 템플릿
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# 기술 스택별 리뷰 체크리스트
|
|
2
|
-
|
|
3
|
-
## Hono 체크리스트
|
|
4
|
-
|
|
5
|
-
### API 설계
|
|
6
|
-
- [ ] RESTful 규칙 준수 (적절한 HTTP 메서드, 상태 코드)
|
|
7
|
-
- [ ] 일관된 URL 명명 (kebab-case, 복수형 명사)
|
|
8
|
-
- [ ] path vs query 파라미터 적절한 사용
|
|
9
|
-
- [ ] 응답 형식 일관성 (c.json, c.text, c.html)
|
|
10
|
-
- [ ] c.notFound() 및 에러 응답의 적절한 사용
|
|
11
|
-
|
|
12
|
-
### 미들웨어
|
|
13
|
-
- [ ] 미들웨어 순서가 올바름 (인증이 라우트 핸들러 전에)
|
|
14
|
-
- [ ] 타입드 미들웨어에 createMiddleware 사용
|
|
15
|
-
- [ ] 미들웨어가 next()로 제어를 올바르게 전달
|
|
16
|
-
- [ ] 빌트인 미들웨어 적절히 설정 (cors, logger 등)
|
|
17
|
-
- [ ] 커스텀 미들웨어가 재사용 가능하고 테스트 가능
|
|
18
|
-
|
|
19
|
-
### 유효성 검사 (zValidator)
|
|
20
|
-
- [ ] 모든 POST/PUT/PATCH 라우트에 zValidator 적용
|
|
21
|
-
- [ ] 유효성 검사 대상 올바름: json, query, param, header, form
|
|
22
|
-
- [ ] Zod v4 문법 사용 (z.email(), z.url())
|
|
23
|
-
- [ ] zValidator 콜백에서 커스텀 에러 처리
|
|
24
|
-
- [ ] 관련 엔드포인트 간 스키마 재사용
|
|
25
|
-
|
|
26
|
-
### 에러 처리
|
|
27
|
-
- [ ] HTTP 에러에 HTTPException 사용
|
|
28
|
-
- [ ] 전역 onError 핸들러 설정
|
|
29
|
-
- [ ] 일관된 에러 응답 형식
|
|
30
|
-
- [ ] 에러에 민감 정보 노출 없음
|
|
31
|
-
- [ ] 비즈니스 로직 에러용 커스텀 에러 클래스
|
|
32
|
-
|
|
33
|
-
### 타입 안전성
|
|
34
|
-
- [ ] 환경 변수용 Bindings 타입 정의
|
|
35
|
-
- [ ] 요청 컨텍스트용 Variables 타입 정의
|
|
36
|
-
- [ ] c.env와 c.var 적절히 타입 지정
|
|
37
|
-
- [ ] RPC 타입 내보내기 (AppType)
|
|
38
|
-
- [ ] 클라이언트에서 InferRequestType/InferResponseType 사용
|
|
39
|
-
|
|
40
|
-
### 보안
|
|
41
|
-
- [ ] 보호된 라우트에 인증 미들웨어 적용
|
|
42
|
-
- [ ] Bearer 토큰 또는 JWT 검증 구현
|
|
43
|
-
- [ ] CORS 적절히 설정
|
|
44
|
-
- [ ] 레이트 리미팅 고려
|
|
45
|
-
- [ ] 시크릿은 c.env로 접근, 하드코딩 금지
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Cloudflare Workers 체크리스트
|
|
50
|
-
|
|
51
|
-
### 바인딩 설정
|
|
52
|
-
- [ ] wrangler.toml 적절히 설정
|
|
53
|
-
- [ ] 모든 바인딩 선언 (KV, D1, R2 등)
|
|
54
|
-
- [ ] 바인딩 타입이 wrangler.toml과 일치
|
|
55
|
-
- [ ] 시크릿용 환경 변수 설정
|
|
56
|
-
- [ ] 필요 시 compatibility_flags에 nodejs_compat 포함
|
|
57
|
-
|
|
58
|
-
### KV Namespace
|
|
59
|
-
- [ ] 키가 적절히 네임스페이스됨
|
|
60
|
-
- [ ] 적절한 곳에 TTL (expirationTtl) 설정
|
|
61
|
-
- [ ] 추가 키 정보에 메타데이터 사용
|
|
62
|
-
- [ ] List 작업에 prefix와 cursor로 페이지네이션
|
|
63
|
-
- [ ] KV 작업에 에러 처리
|
|
64
|
-
|
|
65
|
-
### D1 데이터베이스
|
|
66
|
-
- [ ] Prepared statements 사용 (문자열 연결 금지)
|
|
67
|
-
- [ ] 여러 쿼리에 배치 작업 사용
|
|
68
|
-
- [ ] 데이터베이스 작업에 에러 처리
|
|
69
|
-
- [ ] 스키마 마이그레이션 적절히 관리
|
|
70
|
-
- [ ] 자주 쿼리되는 컬럼에 인덱스 생성
|
|
71
|
-
|
|
72
|
-
### R2 Bucket
|
|
73
|
-
- [ ] 업로드 시 Content-Type 설정
|
|
74
|
-
- [ ] 누락된 객체에 대한 적절한 에러 처리
|
|
75
|
-
- [ ] 대용량 파일에 멀티파트 업로드
|
|
76
|
-
- [ ] 커스텀 메타데이터 적절히 사용
|
|
77
|
-
- [ ] 액세스 제어 설정
|
|
78
|
-
|
|
79
|
-
### 엣지 런타임
|
|
80
|
-
- [ ] Node.js 전용 API 사용 안 함
|
|
81
|
-
- [ ] 웹 API 사용 (fetch, Request, Response)
|
|
82
|
-
- [ ] 메모리 한도 고려 (<128MB)
|
|
83
|
-
- [ ] CPU 시간 한도 고려 (<30s)
|
|
84
|
-
- [ ] 서브리퀘스트 한도 고려 (<50)
|
|
85
|
-
|
|
86
|
-
### 배포
|
|
87
|
-
- [ ] 환경별 wrangler.toml 섹션
|
|
88
|
-
- [ ] wrangler secret put으로 시크릿 설정
|
|
89
|
-
- [ ] 프리뷰 배포 작동 확인
|
|
90
|
-
- [ ] 프로덕션 배포 테스트
|
|
91
|
-
- [ ] 롤백 전략 마련
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## 범용 체크리스트
|
|
96
|
-
|
|
97
|
-
### 코드 품질
|
|
98
|
-
- [ ] 단일 책임 원칙 준수
|
|
99
|
-
- [ ] DRY - 불필요한 중복 없음
|
|
100
|
-
- [ ] 함수/메서드가 집중적이고 작음
|
|
101
|
-
- [ ] 명확한 명명 규칙
|
|
102
|
-
- [ ] 주석은 "why"를 설명, "what"이 아님
|
|
103
|
-
|
|
104
|
-
### 로직 및 정확성
|
|
105
|
-
- [ ] 엣지 케이스 처리 (빈 값, null, 경계값)
|
|
106
|
-
- [ ] 포괄적인 에러 처리
|
|
107
|
-
- [ ] 레이스 컨디션 고려
|
|
108
|
-
- [ ] 입력 유효성 검사
|
|
109
|
-
- [ ] 반환값 확인
|
|
110
|
-
|
|
111
|
-
### 보안
|
|
112
|
-
- [ ] 하드코딩된 시크릿 없음
|
|
113
|
-
- [ ] 사용자 입력 살균
|
|
114
|
-
- [ ] SQL 인젝션 방지 (파라미터화된 쿼리)
|
|
115
|
-
- [ ] XSS 방지 조치
|
|
116
|
-
- [ ] 적절한 인증/인가
|
|
117
|
-
|
|
118
|
-
### 성능
|
|
119
|
-
- [ ] 스케일에 적합한 시간 복잡도
|
|
120
|
-
- [ ] 적절한 공간 복잡도
|
|
121
|
-
- [ ] 불필요한 반복 없음
|
|
122
|
-
- [ ] 데이터베이스 쿼리 최적화
|
|
123
|
-
- [ ] 적절한 캐싱 고려
|
|
124
|
-
|
|
125
|
-
### 유지보수성
|
|
126
|
-
- [ ] 테스트 가능한 코드
|
|
127
|
-
- [ ] 최소한의 정당화된 의존성
|
|
128
|
-
- [ ] 설정 외부화
|
|
129
|
-
- [ ] 디버깅을 위한 로깅
|
|
130
|
-
- [ ] 도움이 되는 에러 메시지
|
|
131
|
-
|
|
132
|
-
### 문서화
|
|
133
|
-
- [ ] 공개 API 문서화
|
|
134
|
-
- [ ] 복잡한 로직 설명
|
|
135
|
-
- [ ] 명확한 설정 가이드
|
|
136
|
-
- [ ] 환경 변수 문서화
|