@kood/claude-code 0.1.2 → 0.1.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 +129 -5
- package/package.json +2 -2
- package/templates/hono/CLAUDE.md +20 -2
- package/templates/hono/docs/architecture/architecture.md +909 -0
- package/templates/hono/docs/commands/git.md +275 -0
- package/templates/hono/docs/deployment/cloudflare.md +527 -190
- package/templates/hono/docs/deployment/docker.md +514 -0
- package/templates/hono/docs/deployment/index.md +179 -214
- package/templates/hono/docs/deployment/railway.md +416 -0
- package/templates/hono/docs/deployment/vercel.md +567 -0
- package/templates/hono/docs/library/ai-sdk/index.md +427 -0
- package/templates/hono/docs/library/ai-sdk/openrouter.md +479 -0
- package/templates/hono/docs/library/ai-sdk/providers.md +468 -0
- package/templates/hono/docs/library/ai-sdk/streaming.md +447 -0
- package/templates/hono/docs/library/ai-sdk/structured-output.md +493 -0
- package/templates/hono/docs/library/ai-sdk/tools.md +513 -0
- package/templates/hono/docs/library/hono/env-setup.md +458 -0
- package/templates/hono/docs/library/hono/index.md +1 -3
- package/templates/hono/docs/library/pino/index.md +437 -0
- package/templates/hono/docs/library/prisma/cloudflare-d1.md +503 -0
- package/templates/hono/docs/library/prisma/config.md +362 -0
- package/templates/hono/docs/library/prisma/index.md +86 -13
- package/templates/hono/docs/skills/gemini-review/SKILL.md +116 -116
- package/templates/hono/docs/skills/gemini-review/references/checklists.md +125 -125
- package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +191 -191
- package/templates/npx/CLAUDE.md +309 -0
- package/templates/npx/docs/commands/git.md +275 -0
- package/templates/npx/docs/library/commander/index.md +164 -0
- package/templates/npx/docs/library/fs-extra/index.md +171 -0
- package/templates/npx/docs/library/prompts/index.md +253 -0
- package/templates/npx/docs/mcp/index.md +60 -0
- package/templates/npx/docs/skills/gemini-review/SKILL.md +220 -0
- package/templates/npx/docs/skills/gemini-review/references/checklists.md +134 -0
- package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +301 -0
- package/templates/tanstack-start/CLAUDE.md +43 -5
- package/templates/tanstack-start/docs/architecture/architecture.md +134 -4
- package/templates/tanstack-start/docs/commands/git.md +275 -0
- package/templates/tanstack-start/docs/deployment/cloudflare.md +223 -50
- package/templates/tanstack-start/docs/deployment/index.md +320 -30
- package/templates/tanstack-start/docs/deployment/nitro.md +195 -14
- package/templates/tanstack-start/docs/deployment/railway.md +302 -150
- package/templates/tanstack-start/docs/deployment/vercel.md +345 -75
- package/templates/tanstack-start/docs/guides/best-practices.md +203 -1
- package/templates/tanstack-start/docs/guides/env-setup.md +450 -0
- package/templates/tanstack-start/docs/library/ai-sdk/hooks.md +472 -0
- package/templates/tanstack-start/docs/library/ai-sdk/index.md +264 -0
- package/templates/tanstack-start/docs/library/ai-sdk/openrouter.md +371 -0
- package/templates/tanstack-start/docs/library/ai-sdk/providers.md +403 -0
- package/templates/tanstack-start/docs/library/ai-sdk/streaming.md +320 -0
- package/templates/tanstack-start/docs/library/ai-sdk/structured-output.md +454 -0
- package/templates/tanstack-start/docs/library/ai-sdk/tools.md +473 -0
- package/templates/tanstack-start/docs/library/pino/index.md +320 -0
- package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +404 -0
- package/templates/tanstack-start/docs/library/prisma/config.md +377 -0
- package/templates/tanstack-start/docs/library/prisma/index.md +3 -5
- package/templates/tanstack-start/docs/library/prisma/schema.md +123 -25
- package/templates/tanstack-start/docs/library/prisma/setup.md +0 -7
- package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +80 -2
- package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +116 -116
- package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +138 -144
- package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +186 -187
- package/templates/hono/docs/git/index.md +0 -180
- package/templates/tanstack-start/docs/git/index.md +0 -203
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# CLAUDE.md - Claude Code Instructions
|
|
2
|
+
|
|
3
|
+
> NPX CLI 도구 프로젝트 작업 지침
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🚨 STOP - 작업 전 필수 확인
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
11
|
+
│ 이 프로젝트에서 작업하기 전에 이 문서를 끝까지 읽으세요. │
|
|
12
|
+
│ 특히 ⛔ NEVER DO 섹션의 규칙은 절대 위반하지 마세요. │
|
|
13
|
+
│ │
|
|
14
|
+
│ 📖 작업 유형별 상세 문서: docs/ 폴더 참조 │
|
|
15
|
+
└─────────────────────────────────────────────────────────────┘
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## ⛔ NEVER DO (절대 금지 - 예외 없음)
|
|
21
|
+
|
|
22
|
+
### Git 커밋 금지 사항
|
|
23
|
+
```
|
|
24
|
+
❌ "Generated with Claude Code" 포함 금지
|
|
25
|
+
❌ "🤖" 또는 AI 관련 이모지 포함 금지
|
|
26
|
+
❌ "Co-Authored-By:" 헤더 포함 금지
|
|
27
|
+
❌ AI/봇이 작성했다는 어떤 표시도 금지
|
|
28
|
+
❌ 커밋 메시지 여러 줄 작성 금지
|
|
29
|
+
❌ 커밋 메시지에 이모지 사용 금지
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### CLI 구현 금지 사항
|
|
33
|
+
```
|
|
34
|
+
❌ process.exit() 없이 에러 상황 종료 금지
|
|
35
|
+
❌ console.log 직접 사용 금지 (logger 사용)
|
|
36
|
+
❌ 동기 파일 작업 (fs.readFileSync 등) 금지
|
|
37
|
+
❌ hardcoded 경로 사용 금지 (path.join 사용)
|
|
38
|
+
❌ 사용자 입력 검증 없이 처리 금지
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 코드 검색 금지 사항
|
|
42
|
+
```
|
|
43
|
+
❌ grep, rg 등 기본 검색 도구 사용 금지
|
|
44
|
+
❌ find 명령어로 코드 검색 금지
|
|
45
|
+
✅ 코드베이스 검색 시 sgrep 사용 필수
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## ✅ ALWAYS DO (필수 실행)
|
|
51
|
+
|
|
52
|
+
### 1. 작업 전: 관련 문서 읽기
|
|
53
|
+
```
|
|
54
|
+
CLI 작업 → docs/library/commander/ 읽기
|
|
55
|
+
파일 작업 → docs/library/fs-extra/ 읽기
|
|
56
|
+
사용자 입력 → docs/library/prompts/ 읽기
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. MCP 도구 적극 활용
|
|
60
|
+
```
|
|
61
|
+
코드베이스 검색 → sgrep 사용 (grep/rg 금지)
|
|
62
|
+
복잡한 분석/디버깅 → Sequential Thinking 사용
|
|
63
|
+
라이브러리 문서 → Context7 사용
|
|
64
|
+
```
|
|
65
|
+
**상세**: `docs/mcp/` 참고
|
|
66
|
+
|
|
67
|
+
### 3. 작업 완료 후: Git 커밋
|
|
68
|
+
```bash
|
|
69
|
+
git add .
|
|
70
|
+
git commit -m "<prefix>: <설명>"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**커밋 형식**: `<prefix>: <설명>` (한 줄, 본문 없음)
|
|
74
|
+
|
|
75
|
+
**Prefix**: `feat` | `fix` | `refactor` | `style` | `docs` | `test` | `chore` | `perf` | `ci`
|
|
76
|
+
|
|
77
|
+
**예시**:
|
|
78
|
+
```bash
|
|
79
|
+
feat: 템플릿 복사 기능 추가
|
|
80
|
+
fix: 경로 처리 오류 수정
|
|
81
|
+
docs: README 업데이트
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 📚 문서 참조 테이블
|
|
87
|
+
|
|
88
|
+
| 작업 | 문서 경로 | 필독 여부 |
|
|
89
|
+
|------|----------|----------|
|
|
90
|
+
| **Git 규칙** | `docs/git/git.md` | 🔴 필수 |
|
|
91
|
+
| **MCP 도구** | `docs/mcp/` | 🔴 필수 |
|
|
92
|
+
| **Commander** | `docs/library/commander/` | 🔴 필수 |
|
|
93
|
+
| **fs-extra** | `docs/library/fs-extra/` | 🔴 필수 |
|
|
94
|
+
| **prompts** | `docs/library/prompts/` | 🔴 필수 |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 🛠 Tech Stack (버전 주의)
|
|
99
|
+
|
|
100
|
+
| 기술 | 버전 | 주의사항 |
|
|
101
|
+
|------|------|----------|
|
|
102
|
+
| Node.js | >= 18 | ESM 모듈 사용 |
|
|
103
|
+
| TypeScript | 5.x | strict mode |
|
|
104
|
+
| Commander | 12.x | CLI 프레임워크 |
|
|
105
|
+
| fs-extra | 11.x | 파일 시스템 유틸리티 |
|
|
106
|
+
| prompts | 2.x | Interactive CLI prompts |
|
|
107
|
+
| picocolors | 1.x | 터미널 색상 출력 |
|
|
108
|
+
| tsup | 8.x | TypeScript 번들러 |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 📁 Directory Structure
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
src/
|
|
116
|
+
├── index.ts # Entry point (CLI 정의)
|
|
117
|
+
├── commands/ # 명령어 모듈
|
|
118
|
+
│ └── init.ts # init 명령어
|
|
119
|
+
├── utils/ # 유틸리티
|
|
120
|
+
│ ├── copy.ts # 파일 복사 유틸
|
|
121
|
+
│ └── logger.ts # 로깅 유틸
|
|
122
|
+
└── types/ # 타입 정의
|
|
123
|
+
└── index.ts # 공통 타입
|
|
124
|
+
|
|
125
|
+
templates/ # 템플릿 파일 (빌드 시 복사)
|
|
126
|
+
scripts/ # 빌드 스크립트
|
|
127
|
+
dist/ # 빌드 결과물
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 🔧 Code Conventions
|
|
133
|
+
|
|
134
|
+
### File Naming
|
|
135
|
+
- **kebab-case**: `copy-template.ts`, `file-utils.ts`
|
|
136
|
+
- **index.ts**: 모듈 진입점
|
|
137
|
+
|
|
138
|
+
### TypeScript
|
|
139
|
+
- `const` 선언 사용 (function 대신)
|
|
140
|
+
- 명시적 return type
|
|
141
|
+
- `interface` (객체) / `type` (유니온)
|
|
142
|
+
- `any` 금지 → `unknown` 사용
|
|
143
|
+
|
|
144
|
+
### ESM Module
|
|
145
|
+
```typescript
|
|
146
|
+
// ✅ ESM import
|
|
147
|
+
import fs from 'fs-extra';
|
|
148
|
+
import path from 'path';
|
|
149
|
+
import { fileURLToPath } from 'url';
|
|
150
|
+
|
|
151
|
+
// __dirname 대체
|
|
152
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
153
|
+
const __dirname = path.dirname(__filename);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 📝 Quick Patterns (복사용)
|
|
159
|
+
|
|
160
|
+
### CLI Entry Point
|
|
161
|
+
```typescript
|
|
162
|
+
#!/usr/bin/env node
|
|
163
|
+
import { Command } from 'commander';
|
|
164
|
+
|
|
165
|
+
const program = new Command();
|
|
166
|
+
|
|
167
|
+
program
|
|
168
|
+
.name('my-cli')
|
|
169
|
+
.description('CLI description')
|
|
170
|
+
.version('1.0.0');
|
|
171
|
+
|
|
172
|
+
program
|
|
173
|
+
.option('-t, --template <name>', 'template name')
|
|
174
|
+
.option('-f, --force', 'overwrite existing files')
|
|
175
|
+
.action(async (options) => {
|
|
176
|
+
// 명령어 실행
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
program.parse();
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Logger 유틸
|
|
183
|
+
```typescript
|
|
184
|
+
import pc from 'picocolors';
|
|
185
|
+
|
|
186
|
+
export const logger = {
|
|
187
|
+
info: (msg: string) => console.log(pc.blue('ℹ'), msg),
|
|
188
|
+
success: (msg: string) => console.log(pc.green('✔'), msg),
|
|
189
|
+
warn: (msg: string) => console.log(pc.yellow('⚠'), msg),
|
|
190
|
+
error: (msg: string) => console.log(pc.red('✖'), msg),
|
|
191
|
+
step: (msg: string) => console.log(pc.gray(' →'), msg),
|
|
192
|
+
blank: () => console.log(),
|
|
193
|
+
};
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Interactive Prompts
|
|
197
|
+
```typescript
|
|
198
|
+
import prompts from 'prompts';
|
|
199
|
+
|
|
200
|
+
// Select (단일 선택)
|
|
201
|
+
const { template } = await prompts({
|
|
202
|
+
type: 'select',
|
|
203
|
+
name: 'template',
|
|
204
|
+
message: 'Select a template:',
|
|
205
|
+
choices: [
|
|
206
|
+
{ title: 'Template A', value: 'a' },
|
|
207
|
+
{ title: 'Template B', value: 'b' },
|
|
208
|
+
],
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
// Multiselect (다중 선택)
|
|
212
|
+
const { templates } = await prompts({
|
|
213
|
+
type: 'multiselect',
|
|
214
|
+
name: 'templates',
|
|
215
|
+
message: 'Select templates:',
|
|
216
|
+
choices: [
|
|
217
|
+
{ title: 'Template A', value: 'a' },
|
|
218
|
+
{ title: 'Template B', value: 'b' },
|
|
219
|
+
],
|
|
220
|
+
min: 1,
|
|
221
|
+
hint: '- Space to select. Return to submit',
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// Confirm
|
|
225
|
+
const { confirmed } = await prompts({
|
|
226
|
+
type: 'confirm',
|
|
227
|
+
name: 'confirmed',
|
|
228
|
+
message: 'Overwrite existing files?',
|
|
229
|
+
initial: false,
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### File Copy 유틸
|
|
234
|
+
```typescript
|
|
235
|
+
import fs from 'fs-extra';
|
|
236
|
+
import path from 'path';
|
|
237
|
+
|
|
238
|
+
export const copyRecursive = async (
|
|
239
|
+
src: string,
|
|
240
|
+
dest: string,
|
|
241
|
+
): Promise<{ files: number; directories: number }> => {
|
|
242
|
+
const counter = { files: 0, directories: 0 };
|
|
243
|
+
|
|
244
|
+
const copy = async (s: string, d: string): Promise<void> => {
|
|
245
|
+
const stat = await fs.stat(s);
|
|
246
|
+
|
|
247
|
+
if (stat.isDirectory()) {
|
|
248
|
+
await fs.ensureDir(d);
|
|
249
|
+
counter.directories++;
|
|
250
|
+
|
|
251
|
+
const items = await fs.readdir(s);
|
|
252
|
+
for (const item of items) {
|
|
253
|
+
await copy(path.join(s, item), path.join(d, item));
|
|
254
|
+
}
|
|
255
|
+
} else {
|
|
256
|
+
await fs.copy(s, d);
|
|
257
|
+
counter.files++;
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
await copy(src, dest);
|
|
262
|
+
return counter;
|
|
263
|
+
};
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Package.json 설정
|
|
267
|
+
```json
|
|
268
|
+
{
|
|
269
|
+
"name": "@scope/my-cli",
|
|
270
|
+
"version": "1.0.0",
|
|
271
|
+
"type": "module",
|
|
272
|
+
"bin": "./dist/index.js",
|
|
273
|
+
"files": ["dist", "templates"],
|
|
274
|
+
"scripts": {
|
|
275
|
+
"build": "tsup",
|
|
276
|
+
"dev": "tsup --watch",
|
|
277
|
+
"prepublishOnly": "npm run build"
|
|
278
|
+
},
|
|
279
|
+
"engines": {
|
|
280
|
+
"node": ">=18"
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### tsup.config.ts
|
|
286
|
+
```typescript
|
|
287
|
+
import { defineConfig } from 'tsup';
|
|
288
|
+
|
|
289
|
+
export default defineConfig({
|
|
290
|
+
entry: ['src/index.ts'],
|
|
291
|
+
format: ['esm'],
|
|
292
|
+
target: 'node18',
|
|
293
|
+
clean: true,
|
|
294
|
+
dts: true,
|
|
295
|
+
banner: {
|
|
296
|
+
js: '#!/usr/bin/env node',
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## 🔗 Quick Links
|
|
304
|
+
|
|
305
|
+
- [Commander 가이드](./docs/library/commander/index.md)
|
|
306
|
+
- [fs-extra 가이드](./docs/library/fs-extra/index.md)
|
|
307
|
+
- [prompts 가이드](./docs/library/prompts/index.md)
|
|
308
|
+
- [Git 규칙](./docs/git/git.md)
|
|
309
|
+
- [MCP 가이드](./docs/mcp/index.md)
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# Git 워크플로우
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## ⛔ NEVER (절대 금지)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
❌ 커밋에 "Generated with Claude Code" 포함
|
|
9
|
+
❌ 커밋에 "🤖" 또는 AI 관련 이모지 포함
|
|
10
|
+
❌ 커밋에 "Co-Authored-By:" 헤더 포함
|
|
11
|
+
❌ 커밋에 AI/봇이 작성했다는 어떤 표시도 포함
|
|
12
|
+
❌ 커밋 메시지 여러 줄 작성
|
|
13
|
+
❌ 커밋 메시지에 이모지 사용
|
|
14
|
+
❌ 커밋 메시지에 마침표(.) 사용
|
|
15
|
+
❌ 여러 작업을 하나의 커밋으로 퉁치기
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## ✅ ALWAYS (필수)
|
|
21
|
+
|
|
22
|
+
### 작업 완료 후 반드시 실행
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
git add <관련 파일들>
|
|
26
|
+
git commit -m "<prefix>: <설명>"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### ⭐ 커밋 분리 원칙
|
|
30
|
+
|
|
31
|
+
**하나의 커밋 = 하나의 논리적 변경 단위**
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# ❌ 잘못된 방식: 모든 작업을 하나로 퉁침
|
|
35
|
+
git add .
|
|
36
|
+
git commit -m "feat: 여러 기능 추가"
|
|
37
|
+
|
|
38
|
+
# ✅ 올바른 방식: 논리적 단위로 분리
|
|
39
|
+
git add src/auth/
|
|
40
|
+
git commit -m "feat: 사용자 인증 기능 추가"
|
|
41
|
+
|
|
42
|
+
git add src/users/
|
|
43
|
+
git commit -m "feat: 사용자 관리 기능 추가"
|
|
44
|
+
|
|
45
|
+
git add docs/
|
|
46
|
+
git commit -m "docs: API 문서 업데이트"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 📝 커밋 형식
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
<prefix>: <설명>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**한 줄로 간결하게** 작성합니다. 본문이나 푸터는 작성하지 않습니다.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 🏷 Prefix 목록
|
|
62
|
+
|
|
63
|
+
| Prefix | 용도 | 예시 |
|
|
64
|
+
|--------|------|------|
|
|
65
|
+
| `feat` | 새로운 기능 | `feat: 사용자 인증 기능 추가` |
|
|
66
|
+
| `fix` | 버그 수정 | `fix: 토큰 검증 오류 수정` |
|
|
67
|
+
| `refactor` | 리팩토링 | `refactor: 인증 로직 분리` |
|
|
68
|
+
| `style` | 코드 스타일 | `style: prettier 적용` |
|
|
69
|
+
| `docs` | 문서 수정 | `docs: API 문서 업데이트` |
|
|
70
|
+
| `test` | 테스트 | `test: 인증 테스트 추가` |
|
|
71
|
+
| `chore` | 빌드/설정 | `chore: 의존성 업데이트` |
|
|
72
|
+
| `perf` | 성능 개선 | `perf: 쿼리 최적화` |
|
|
73
|
+
| `ci` | CI/CD | `ci: GitHub Actions 추가` |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## ✅ 올바른 예시
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
feat: 사용자 로그인 기능 추가
|
|
81
|
+
fix: 세션 만료 오류 수정
|
|
82
|
+
refactor: 서비스 클래스 구조 개선
|
|
83
|
+
docs: README 설치 가이드 추가
|
|
84
|
+
chore: 의존성 버전 업그레이드
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## ❌ 잘못된 예시
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# prefix 없음
|
|
93
|
+
사용자 인증 기능 추가함
|
|
94
|
+
|
|
95
|
+
# 마침표 불필요
|
|
96
|
+
feat: 사용자 인증 추가.
|
|
97
|
+
|
|
98
|
+
# 대문자 사용
|
|
99
|
+
FEAT: 사용자 인증 추가
|
|
100
|
+
|
|
101
|
+
# scope 불필요
|
|
102
|
+
feat(auth): 인증 추가
|
|
103
|
+
|
|
104
|
+
# AI 작성 표시 (절대 금지!)
|
|
105
|
+
feat: 로그인 기능 추가
|
|
106
|
+
|
|
107
|
+
🤖 Generated with Claude Code
|
|
108
|
+
|
|
109
|
+
# Co-Author 표시 (절대 금지!)
|
|
110
|
+
feat: 로그인 기능 추가
|
|
111
|
+
|
|
112
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
113
|
+
|
|
114
|
+
# 여러 줄 본문 (금지)
|
|
115
|
+
feat: 로그인 기능 추가
|
|
116
|
+
|
|
117
|
+
- 이메일 인증 추가
|
|
118
|
+
- 세션 관리 구현
|
|
119
|
+
|
|
120
|
+
# 여러 작업을 하나로 퉁침 (금지)
|
|
121
|
+
feat: 로그인, 회원가입, 프로필 기능 추가
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 🔄 작업 흐름
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# 1. 작업 전 최신 코드 동기화
|
|
130
|
+
git pull origin main
|
|
131
|
+
|
|
132
|
+
# 2. 기능 A 작업 완료 → 커밋
|
|
133
|
+
git add src/feature-a/
|
|
134
|
+
git commit -m "feat: 기능 A 구현"
|
|
135
|
+
|
|
136
|
+
# 3. 기능 B 작업 완료 → 커밋
|
|
137
|
+
git add src/feature-b/
|
|
138
|
+
git commit -m "feat: 기능 B 구현"
|
|
139
|
+
|
|
140
|
+
# 4. 문서 작업 완료 → 커밋
|
|
141
|
+
git add docs/
|
|
142
|
+
git commit -m "docs: 기능 문서 추가"
|
|
143
|
+
|
|
144
|
+
# 5. 푸시
|
|
145
|
+
git push origin main
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 📦 커밋 분리 가이드
|
|
151
|
+
|
|
152
|
+
### 언제 커밋을 분리해야 하나요?
|
|
153
|
+
|
|
154
|
+
| 상황 | 커밋 분리 |
|
|
155
|
+
|------|----------|
|
|
156
|
+
| 서로 다른 기능 구현 | ✅ 분리 |
|
|
157
|
+
| 버그 수정 + 새 기능 | ✅ 분리 |
|
|
158
|
+
| 코드 변경 + 문서 변경 | ✅ 분리 |
|
|
159
|
+
| 리팩토링 + 기능 추가 | ✅ 분리 |
|
|
160
|
+
| 동일 기능의 관련 파일들 | 🔄 묶어도 됨 |
|
|
161
|
+
| 동일 기능의 타입 + 구현 | 🔄 묶어도 됨 |
|
|
162
|
+
|
|
163
|
+
### 예시: 사용자 관리 기능 개발
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# 1. 인증 기능 커밋
|
|
167
|
+
git add src/auth/
|
|
168
|
+
git commit -m "feat: 사용자 인증 기능 추가"
|
|
169
|
+
|
|
170
|
+
# 2. 사용자 관리 커밋
|
|
171
|
+
git add src/users/
|
|
172
|
+
git commit -m "feat: 사용자 CRUD 기능 추가"
|
|
173
|
+
|
|
174
|
+
# 3. 유효성 검사 커밋
|
|
175
|
+
git add src/validators/
|
|
176
|
+
git commit -m "feat: 입력값 유효성 검사 추가"
|
|
177
|
+
|
|
178
|
+
# 4. 테스트 커밋
|
|
179
|
+
git add tests/
|
|
180
|
+
git commit -m "test: 사용자 관리 테스트 추가"
|
|
181
|
+
|
|
182
|
+
# 5. 문서 커밋
|
|
183
|
+
git add docs/
|
|
184
|
+
git commit -m "docs: 사용자 API 문서 추가"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 🌿 브랜치 전략
|
|
190
|
+
|
|
191
|
+
### 간단한 프로젝트
|
|
192
|
+
```
|
|
193
|
+
main ← 모든 작업 직접 커밋
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 팀 프로젝트
|
|
197
|
+
```
|
|
198
|
+
main
|
|
199
|
+
└── feature/기능명
|
|
200
|
+
└── fix/버그명
|
|
201
|
+
└── hotfix/긴급수정
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 브랜치 명명
|
|
205
|
+
```bash
|
|
206
|
+
feature/user-authentication
|
|
207
|
+
feature/payment-integration
|
|
208
|
+
fix/session-error
|
|
209
|
+
hotfix/security-patch
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 📋 자주 사용하는 명령어
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# 상태 확인
|
|
218
|
+
git status
|
|
219
|
+
|
|
220
|
+
# 변경 내용 확인
|
|
221
|
+
git diff
|
|
222
|
+
|
|
223
|
+
# 최근 커밋 로그
|
|
224
|
+
git log --oneline -10
|
|
225
|
+
|
|
226
|
+
# 커밋 취소 (작업 내용 유지)
|
|
227
|
+
git reset --soft HEAD~1
|
|
228
|
+
|
|
229
|
+
# 스테이징 취소
|
|
230
|
+
git restore --staged .
|
|
231
|
+
|
|
232
|
+
# 변경사항 임시 저장
|
|
233
|
+
git stash
|
|
234
|
+
git stash pop
|
|
235
|
+
|
|
236
|
+
# 특정 파일만 스테이징
|
|
237
|
+
git add <파일경로>
|
|
238
|
+
|
|
239
|
+
# 대화형 스테이징 (부분 커밋용)
|
|
240
|
+
git add -p
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 📚 .gitignore
|
|
246
|
+
|
|
247
|
+
```gitignore
|
|
248
|
+
# Dependencies
|
|
249
|
+
node_modules/
|
|
250
|
+
|
|
251
|
+
# Build
|
|
252
|
+
dist/
|
|
253
|
+
.output/
|
|
254
|
+
build/
|
|
255
|
+
|
|
256
|
+
# Environment
|
|
257
|
+
.env
|
|
258
|
+
.env.local
|
|
259
|
+
.env.*.local
|
|
260
|
+
|
|
261
|
+
# IDE
|
|
262
|
+
.idea/
|
|
263
|
+
.vscode/
|
|
264
|
+
*.swp
|
|
265
|
+
|
|
266
|
+
# OS
|
|
267
|
+
.DS_Store
|
|
268
|
+
|
|
269
|
+
# Cache
|
|
270
|
+
.cache/
|
|
271
|
+
.turbo/
|
|
272
|
+
|
|
273
|
+
# Logs
|
|
274
|
+
*.log
|
|
275
|
+
```
|