@kood/claude-code 0.1.2 → 0.1.3
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 +12 -3
- 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/deployment/cloudflare.md +537 -190
- package/templates/hono/docs/deployment/docker.md +517 -0
- package/templates/hono/docs/deployment/index.md +181 -213
- package/templates/hono/docs/deployment/railway.md +416 -0
- package/templates/hono/docs/deployment/vercel.md +572 -0
- package/templates/hono/docs/git/git.md +285 -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 -0
- 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/git/git.md +307 -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/deployment/cloudflare.md +234 -51
- package/templates/tanstack-start/docs/deployment/index.md +322 -32
- package/templates/tanstack-start/docs/deployment/nitro.md +201 -20
- package/templates/tanstack-start/docs/deployment/railway.md +305 -153
- package/templates/tanstack-start/docs/deployment/vercel.md +353 -78
- package/templates/tanstack-start/docs/git/{index.md → git.md} +81 -7
- 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 -1
- package/templates/tanstack-start/docs/library/prisma/schema.md +123 -25
- 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
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# Vercel 배포
|
|
2
2
|
|
|
3
3
|
> **상위 문서**: [배포](./index.md)
|
|
4
|
+
> **Version**: Nitro 3.x
|
|
4
5
|
|
|
5
|
-
Vercel은 TanStack Start 앱을 위한 최적화된 배포 플랫폼입니다.
|
|
6
|
+
Vercel은 TanStack Start 앱을 위한 최적화된 서버리스 배포 플랫폼입니다.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
---
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
## 🚀 Quick Reference (복사용)
|
|
10
11
|
|
|
11
12
|
```typescript
|
|
12
13
|
// nitro.config.ts
|
|
@@ -14,47 +15,210 @@ import { defineNitroConfig } from 'nitro/config'
|
|
|
14
15
|
|
|
15
16
|
export default defineNitroConfig({
|
|
16
17
|
preset: 'vercel',
|
|
18
|
+
compatibilityDate: '2024-09-19',
|
|
17
19
|
})
|
|
18
20
|
```
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
```json
|
|
23
|
+
// vercel.json
|
|
24
|
+
{
|
|
25
|
+
"buildCommand": "pnpm build",
|
|
26
|
+
"outputDirectory": ".vercel/output"
|
|
27
|
+
}
|
|
28
|
+
```
|
|
21
29
|
|
|
22
30
|
```bash
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# Vercel CLI로 배포
|
|
31
|
+
# Vercel CLI 배포
|
|
32
|
+
vercel login
|
|
27
33
|
vercel
|
|
28
34
|
```
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
---
|
|
31
37
|
|
|
32
|
-
|
|
38
|
+
## Nitro 설정
|
|
39
|
+
|
|
40
|
+
### 기본 설정
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// nitro.config.ts
|
|
44
|
+
import { defineNitroConfig } from 'nitro/config'
|
|
45
|
+
|
|
46
|
+
export default defineNitroConfig({
|
|
47
|
+
// Vercel 서버리스 preset
|
|
48
|
+
preset: 'vercel',
|
|
49
|
+
|
|
50
|
+
// 호환성 날짜 (Nitro v3 필수)
|
|
51
|
+
compatibilityDate: '2024-09-19',
|
|
52
|
+
})
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Edge Functions 설정
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// nitro.config.ts
|
|
59
|
+
import { defineNitroConfig } from 'nitro/config'
|
|
60
|
+
|
|
61
|
+
export default defineNitroConfig({
|
|
62
|
+
// Vercel Edge Functions preset
|
|
63
|
+
preset: 'vercel-edge',
|
|
64
|
+
|
|
65
|
+
// 호환성 날짜
|
|
66
|
+
compatibilityDate: '2024-09-19',
|
|
67
|
+
})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Bun 런타임 설정
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// nitro.config.ts
|
|
74
|
+
import { defineNitroConfig } from 'nitro/config'
|
|
75
|
+
|
|
76
|
+
export default defineNitroConfig({
|
|
77
|
+
preset: 'vercel',
|
|
78
|
+
compatibilityDate: '2024-09-19',
|
|
79
|
+
|
|
80
|
+
// Bun 런타임 사용
|
|
81
|
+
vercel: {
|
|
82
|
+
functions: {
|
|
83
|
+
runtime: 'bun@1',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
})
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Vite 설정
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
// vite.config.ts
|
|
95
|
+
import { defineConfig } from 'vite'
|
|
96
|
+
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
|
|
97
|
+
import { nitro } from 'nitro/vite'
|
|
98
|
+
import viteReact from '@vitejs/plugin-react'
|
|
99
|
+
|
|
100
|
+
export default defineConfig({
|
|
101
|
+
plugins: [
|
|
102
|
+
tanstackStart(),
|
|
103
|
+
nitro(),
|
|
104
|
+
viteReact(),
|
|
105
|
+
],
|
|
106
|
+
})
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## vercel.json 설정
|
|
112
|
+
|
|
113
|
+
### 기본 설정
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
118
|
+
"buildCommand": "pnpm build",
|
|
119
|
+
"outputDirectory": ".vercel/output",
|
|
120
|
+
"framework": null,
|
|
121
|
+
"installCommand": "pnpm install"
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 고급 설정
|
|
33
126
|
|
|
34
127
|
```json
|
|
35
128
|
{
|
|
36
129
|
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
37
|
-
"buildCommand": "
|
|
38
|
-
"outputDirectory": ".output",
|
|
39
|
-
|
|
130
|
+
"buildCommand": "pnpm build",
|
|
131
|
+
"outputDirectory": ".vercel/output",
|
|
132
|
+
|
|
133
|
+
"functions": {
|
|
134
|
+
"api/**/*.ts": {
|
|
135
|
+
"memory": 1024,
|
|
136
|
+
"maxDuration": 30
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
"headers": [
|
|
141
|
+
{
|
|
142
|
+
"source": "/api/(.*)",
|
|
143
|
+
"headers": [
|
|
144
|
+
{ "key": "Access-Control-Allow-Origin", "value": "*" },
|
|
145
|
+
{ "key": "Access-Control-Allow-Methods", "value": "GET, POST, PUT, DELETE, OPTIONS" }
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
|
|
150
|
+
"rewrites": [
|
|
151
|
+
{ "source": "/(.*)", "destination": "/api" }
|
|
152
|
+
]
|
|
40
153
|
}
|
|
41
154
|
```
|
|
42
155
|
|
|
43
|
-
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 배포 방법
|
|
159
|
+
|
|
160
|
+
### 방법 1: GitHub 연동 (권장)
|
|
44
161
|
|
|
45
|
-
Vercel
|
|
162
|
+
1. **Vercel 프로젝트 생성**
|
|
163
|
+
- [Vercel 대시보드](https://vercel.com) 접속
|
|
164
|
+
- "Add New" → "Project" → GitHub 저장소 선택
|
|
165
|
+
|
|
166
|
+
2. **빌드 설정**
|
|
167
|
+
- Framework Preset: "Other"
|
|
168
|
+
- Build Command: `pnpm build`
|
|
169
|
+
- Output Directory: `.vercel/output`
|
|
170
|
+
- Install Command: `pnpm install`
|
|
171
|
+
|
|
172
|
+
3. **환경 변수 설정**
|
|
173
|
+
- Vercel 대시보드에서 Settings → Environment Variables
|
|
174
|
+
|
|
175
|
+
### 방법 2: Vercel CLI
|
|
46
176
|
|
|
47
177
|
```bash
|
|
48
|
-
#
|
|
49
|
-
|
|
178
|
+
# Vercel CLI 설치
|
|
179
|
+
npm install -g vercel
|
|
50
180
|
|
|
51
|
-
#
|
|
52
|
-
vercel
|
|
181
|
+
# 로그인
|
|
182
|
+
vercel login
|
|
183
|
+
|
|
184
|
+
# 프로젝트 연결 및 배포
|
|
185
|
+
vercel
|
|
186
|
+
|
|
187
|
+
# 프로덕션 배포
|
|
188
|
+
vercel --prod
|
|
189
|
+
|
|
190
|
+
# 환경 변수 설정
|
|
191
|
+
vercel env add DATABASE_URL
|
|
192
|
+
vercel env add API_SECRET
|
|
53
193
|
```
|
|
54
194
|
|
|
195
|
+
---
|
|
196
|
+
|
|
55
197
|
## ISR (Incremental Static Regeneration)
|
|
56
198
|
|
|
57
|
-
###
|
|
199
|
+
### ISR 설정
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
// nitro.config.ts
|
|
203
|
+
import { defineNitroConfig } from 'nitro/config'
|
|
204
|
+
|
|
205
|
+
export default defineNitroConfig({
|
|
206
|
+
preset: 'vercel',
|
|
207
|
+
compatibilityDate: '2024-09-19',
|
|
208
|
+
|
|
209
|
+
// ISR 설정
|
|
210
|
+
vercel: {
|
|
211
|
+
config: {
|
|
212
|
+
// 정적 페이지 재생성 간격 (초)
|
|
213
|
+
isr: {
|
|
214
|
+
bypassToken: process.env.ISR_BYPASS_TOKEN,
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
})
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### 라우트별 ISR
|
|
58
222
|
|
|
59
223
|
```typescript
|
|
60
224
|
// nitro.config.ts
|
|
@@ -62,6 +226,8 @@ import { defineNitroConfig } from 'nitro/config'
|
|
|
62
226
|
|
|
63
227
|
export default defineNitroConfig({
|
|
64
228
|
preset: 'vercel',
|
|
229
|
+
compatibilityDate: '2024-09-19',
|
|
230
|
+
|
|
65
231
|
routeRules: {
|
|
66
232
|
// 60초마다 재검증
|
|
67
233
|
'/products/**': {
|
|
@@ -69,6 +235,11 @@ export default defineNitroConfig({
|
|
|
69
235
|
expiration: 60,
|
|
70
236
|
},
|
|
71
237
|
},
|
|
238
|
+
|
|
239
|
+
// 캐시하지 않음
|
|
240
|
+
'/api/user/**': {
|
|
241
|
+
isr: false,
|
|
242
|
+
},
|
|
72
243
|
},
|
|
73
244
|
})
|
|
74
245
|
```
|
|
@@ -81,6 +252,8 @@ import { defineNitroConfig } from 'nitro/config'
|
|
|
81
252
|
|
|
82
253
|
export default defineNitroConfig({
|
|
83
254
|
preset: 'vercel',
|
|
255
|
+
compatibilityDate: '2024-09-19',
|
|
256
|
+
|
|
84
257
|
vercel: {
|
|
85
258
|
config: {
|
|
86
259
|
bypassToken: process.env.VERCEL_BYPASS_TOKEN,
|
|
@@ -120,52 +293,36 @@ export default defineHandler(async (event) => {
|
|
|
120
293
|
})
|
|
121
294
|
```
|
|
122
295
|
|
|
123
|
-
|
|
296
|
+
---
|
|
124
297
|
|
|
125
|
-
|
|
298
|
+
## 환경변수
|
|
126
299
|
|
|
127
|
-
|
|
128
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
300
|
+
### Vercel 대시보드에서 설정
|
|
129
301
|
|
|
130
|
-
export default defineNitroConfig({
|
|
131
|
-
preset: 'vercel',
|
|
132
|
-
vercel: {
|
|
133
|
-
functions: {
|
|
134
|
-
runtime: 'bun1.x',
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
})
|
|
138
302
|
```
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
```json
|
|
143
|
-
{
|
|
144
|
-
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
145
|
-
"bunVersion": "1.x"
|
|
146
|
-
}
|
|
303
|
+
DATABASE_URL=postgresql://user:pass@host:5432/db
|
|
304
|
+
API_SECRET=your-secret-key
|
|
305
|
+
NODE_ENV=production
|
|
147
306
|
```
|
|
148
307
|
|
|
149
|
-
|
|
308
|
+
### 환경별 설정
|
|
150
309
|
|
|
151
|
-
|
|
310
|
+
Vercel은 환경별로 다른 값 설정 가능:
|
|
311
|
+
- **Production**: 프로덕션 환경
|
|
312
|
+
- **Preview**: PR 프리뷰 환경
|
|
313
|
+
- **Development**: 로컬 개발 환경
|
|
152
314
|
|
|
153
|
-
|
|
154
|
-
// nitro.config.ts
|
|
155
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
315
|
+
### Vercel 자동 제공 변수
|
|
156
316
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
},
|
|
167
|
-
})
|
|
168
|
-
```
|
|
317
|
+
| 변수 | 설명 |
|
|
318
|
+
|------|------|
|
|
319
|
+
| `VERCEL` | Vercel 환경인지 여부 ("1") |
|
|
320
|
+
| `VERCEL_ENV` | 환경 (production, preview, development) |
|
|
321
|
+
| `VERCEL_URL` | 배포 URL |
|
|
322
|
+
| `VERCEL_REGION` | 실행 리전 |
|
|
323
|
+
| `VERCEL_GIT_COMMIT_SHA` | Git 커밋 SHA |
|
|
324
|
+
|
|
325
|
+
---
|
|
169
326
|
|
|
170
327
|
## 환경별 설정
|
|
171
328
|
|
|
@@ -179,6 +336,8 @@ const isProduction = process.env.VERCEL_ENV === 'production'
|
|
|
179
336
|
|
|
180
337
|
export default defineNitroConfig({
|
|
181
338
|
preset: 'vercel',
|
|
339
|
+
compatibilityDate: '2024-09-19',
|
|
340
|
+
|
|
182
341
|
routeRules: {
|
|
183
342
|
'/api/**': {
|
|
184
343
|
cors: !isProduction, // 개발 환경에서만 CORS 허용
|
|
@@ -187,6 +346,8 @@ export default defineNitroConfig({
|
|
|
187
346
|
})
|
|
188
347
|
```
|
|
189
348
|
|
|
349
|
+
---
|
|
350
|
+
|
|
190
351
|
## 모노레포 설정
|
|
191
352
|
|
|
192
353
|
### vercel.json
|
|
@@ -194,12 +355,14 @@ export default defineNitroConfig({
|
|
|
194
355
|
```json
|
|
195
356
|
{
|
|
196
357
|
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
197
|
-
"installCommand": "
|
|
198
|
-
"buildCommand": "
|
|
199
|
-
"outputDirectory": "apps/web/.output"
|
|
358
|
+
"installCommand": "pnpm install",
|
|
359
|
+
"buildCommand": "pnpm --filter web build",
|
|
360
|
+
"outputDirectory": "apps/web/.vercel/output"
|
|
200
361
|
}
|
|
201
362
|
```
|
|
202
363
|
|
|
364
|
+
---
|
|
365
|
+
|
|
203
366
|
## GitHub 통합
|
|
204
367
|
|
|
205
368
|
### 자동 배포 설정
|
|
@@ -224,46 +387,140 @@ export default defineNitroConfig({
|
|
|
224
387
|
}
|
|
225
388
|
```
|
|
226
389
|
|
|
227
|
-
|
|
390
|
+
---
|
|
228
391
|
|
|
229
|
-
|
|
230
|
-
# 커스텀 도메인 추가
|
|
231
|
-
vercel domains add example.com
|
|
392
|
+
## CI/CD 설정
|
|
232
393
|
|
|
233
|
-
|
|
234
|
-
|
|
394
|
+
### GitHub Actions
|
|
395
|
+
|
|
396
|
+
```yaml
|
|
397
|
+
# .github/workflows/vercel.yml
|
|
398
|
+
name: Deploy to Vercel
|
|
399
|
+
|
|
400
|
+
on:
|
|
401
|
+
push:
|
|
402
|
+
branches: [main]
|
|
403
|
+
pull_request:
|
|
404
|
+
branches: [main]
|
|
405
|
+
|
|
406
|
+
jobs:
|
|
407
|
+
deploy:
|
|
408
|
+
runs-on: ubuntu-latest
|
|
409
|
+
|
|
410
|
+
steps:
|
|
411
|
+
- uses: actions/checkout@v4
|
|
412
|
+
|
|
413
|
+
- name: Setup pnpm
|
|
414
|
+
uses: pnpm/action-setup@v2
|
|
415
|
+
with:
|
|
416
|
+
version: 8
|
|
417
|
+
|
|
418
|
+
- name: Setup Node.js
|
|
419
|
+
uses: actions/setup-node@v4
|
|
420
|
+
with:
|
|
421
|
+
node-version: '20'
|
|
422
|
+
cache: 'pnpm'
|
|
423
|
+
|
|
424
|
+
- name: Install dependencies
|
|
425
|
+
run: pnpm install
|
|
426
|
+
|
|
427
|
+
- name: Build
|
|
428
|
+
run: pnpm build
|
|
429
|
+
|
|
430
|
+
- name: Deploy to Vercel
|
|
431
|
+
uses: amondnet/vercel-action@v25
|
|
432
|
+
with:
|
|
433
|
+
vercel-token: ${{ secrets.VERCEL_TOKEN }}
|
|
434
|
+
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
|
|
435
|
+
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
|
|
436
|
+
vercel-args: ${{ github.ref == 'refs/heads/main' && '--prod' || '' }}
|
|
235
437
|
```
|
|
236
438
|
|
|
237
|
-
|
|
439
|
+
---
|
|
238
440
|
|
|
239
|
-
|
|
441
|
+
## 최적화
|
|
240
442
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
443
|
+
### Cold Start 최소화
|
|
444
|
+
|
|
445
|
+
```typescript
|
|
446
|
+
// nitro.config.ts
|
|
447
|
+
import { defineNitroConfig } from 'nitro/config'
|
|
448
|
+
|
|
449
|
+
export default defineNitroConfig({
|
|
450
|
+
preset: 'vercel',
|
|
451
|
+
compatibilityDate: '2024-09-19',
|
|
452
|
+
|
|
453
|
+
// 번들 최적화
|
|
454
|
+
minify: true,
|
|
244
455
|
|
|
245
|
-
|
|
246
|
-
|
|
456
|
+
// 트리 쉐이킹
|
|
457
|
+
experimental: {
|
|
458
|
+
wasm: true,
|
|
459
|
+
},
|
|
460
|
+
})
|
|
247
461
|
```
|
|
248
462
|
|
|
249
|
-
### Function 크기
|
|
463
|
+
### Function 크기 최소화
|
|
250
464
|
|
|
251
465
|
```typescript
|
|
252
466
|
// nitro.config.ts
|
|
467
|
+
import { defineNitroConfig } from 'nitro/config'
|
|
468
|
+
|
|
253
469
|
export default defineNitroConfig({
|
|
254
470
|
preset: 'vercel',
|
|
255
|
-
|
|
256
|
-
|
|
471
|
+
compatibilityDate: '2024-09-19',
|
|
472
|
+
|
|
473
|
+
// 외부 패키지 제외 (번들 크기 감소)
|
|
474
|
+
externals: ['sharp', 'prisma', '@prisma/client'],
|
|
257
475
|
})
|
|
258
476
|
```
|
|
259
477
|
|
|
260
|
-
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## 도메인 설정
|
|
261
481
|
|
|
262
482
|
```bash
|
|
263
|
-
#
|
|
483
|
+
# 커스텀 도메인 추가
|
|
484
|
+
vercel domains add example.com
|
|
485
|
+
|
|
486
|
+
# DNS 설정 확인
|
|
487
|
+
vercel domains inspect example.com
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## 트러블슈팅
|
|
493
|
+
|
|
494
|
+
### 일반적인 문제
|
|
495
|
+
|
|
496
|
+
| 문제 | 원인 | 해결 |
|
|
497
|
+
|------|------|------|
|
|
498
|
+
| Function Timeout | 실행 시간 초과 | `maxDuration` 증가 또는 최적화 |
|
|
499
|
+
| Edge 호환성 오류 | Node.js API 사용 | Edge 호환 API로 변경 |
|
|
500
|
+
| 환경 변수 누락 | 설정 안됨 | Vercel 대시보드에서 설정 |
|
|
501
|
+
| 빌드 실패 | 의존성 문제 | `pnpm-lock.yaml` 확인 |
|
|
502
|
+
|
|
503
|
+
### 디버깅
|
|
504
|
+
|
|
505
|
+
```bash
|
|
506
|
+
# 로컬에서 Vercel 환경 시뮬레이션
|
|
507
|
+
vercel dev
|
|
508
|
+
|
|
509
|
+
# 로그 확인
|
|
510
|
+
vercel logs
|
|
511
|
+
|
|
512
|
+
# 환경 변수 확인
|
|
513
|
+
vercel env ls
|
|
514
|
+
|
|
515
|
+
# 환경 변수 풀 다운
|
|
264
516
|
vercel env pull .env.local
|
|
517
|
+
|
|
518
|
+
# 함수 상태 확인
|
|
519
|
+
vercel inspect
|
|
265
520
|
```
|
|
266
521
|
|
|
522
|
+
---
|
|
523
|
+
|
|
267
524
|
## 유용한 명령어
|
|
268
525
|
|
|
269
526
|
```bash
|
|
@@ -280,8 +537,26 @@ vercel ls
|
|
|
280
537
|
vercel rollback [deployment-url]
|
|
281
538
|
```
|
|
282
539
|
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## package.json 스크립트
|
|
543
|
+
|
|
544
|
+
```json
|
|
545
|
+
{
|
|
546
|
+
"scripts": {
|
|
547
|
+
"dev": "vite dev",
|
|
548
|
+
"build": "vite build && tsc --noEmit",
|
|
549
|
+
"start": "node .output/server/index.mjs",
|
|
550
|
+
"preview": "vite preview"
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
---
|
|
556
|
+
|
|
283
557
|
## 참고 자료
|
|
284
558
|
|
|
559
|
+
- [TanStack Start Hosting](https://tanstack.com/start/latest/docs/framework/react/hosting)
|
|
285
560
|
- [Vercel 공식 문서](https://vercel.com/docs)
|
|
286
561
|
- [Vercel CLI](https://vercel.com/docs/cli)
|
|
287
562
|
- [Nitro Vercel Preset](https://nitro.build/deploy/providers/vercel)
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
❌ 커밋 메시지 여러 줄 작성
|
|
15
15
|
❌ 커밋 메시지에 이모지 사용
|
|
16
16
|
❌ 커밋 메시지에 마침표(.) 사용
|
|
17
|
+
❌ 여러 작업을 하나의 커밋으로 퉁치기
|
|
17
18
|
```
|
|
18
19
|
|
|
19
20
|
---
|
|
@@ -23,10 +24,30 @@
|
|
|
23
24
|
### 작업 완료 후 반드시 실행
|
|
24
25
|
|
|
25
26
|
```bash
|
|
26
|
-
git add
|
|
27
|
+
git add <관련 파일들>
|
|
27
28
|
git commit -m "<prefix>: <설명>"
|
|
28
29
|
```
|
|
29
30
|
|
|
31
|
+
### ⭐ 커밋 분리 원칙
|
|
32
|
+
|
|
33
|
+
**하나의 커밋 = 하나의 논리적 변경 단위**
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# ❌ 잘못된 방식: 모든 작업을 하나로 퉁침
|
|
37
|
+
git add .
|
|
38
|
+
git commit -m "feat: 여러 기능 추가"
|
|
39
|
+
|
|
40
|
+
# ✅ 올바른 방식: 논리적 단위로 분리
|
|
41
|
+
git add src/routes/auth.tsx src/functions/auth.ts
|
|
42
|
+
git commit -m "feat: 사용자 로그인 기능 추가"
|
|
43
|
+
|
|
44
|
+
git add src/routes/profile.tsx src/functions/user.ts
|
|
45
|
+
git commit -m "feat: 프로필 조회 기능 추가"
|
|
46
|
+
|
|
47
|
+
git add docs/
|
|
48
|
+
git commit -m "docs: API 문서 업데이트"
|
|
49
|
+
```
|
|
50
|
+
|
|
30
51
|
---
|
|
31
52
|
|
|
32
53
|
## 📝 커밋 형식
|
|
@@ -97,6 +118,9 @@ feat: 로그인 기능 추가
|
|
|
97
118
|
|
|
98
119
|
- 이메일 인증 추가
|
|
99
120
|
- 세션 관리 구현
|
|
121
|
+
|
|
122
|
+
# 여러 작업을 하나로 퉁침 (금지)
|
|
123
|
+
feat: 로그인, 회원가입, 프로필 기능 추가
|
|
100
124
|
```
|
|
101
125
|
|
|
102
126
|
---
|
|
@@ -107,19 +131,63 @@ feat: 로그인 기능 추가
|
|
|
107
131
|
# 1. 작업 전 최신 코드 동기화
|
|
108
132
|
git pull origin main
|
|
109
133
|
|
|
110
|
-
# 2.
|
|
111
|
-
|
|
134
|
+
# 2. 기능 A 작업 완료 → 커밋
|
|
135
|
+
git add src/routes/feature-a.tsx src/functions/feature-a.ts
|
|
136
|
+
git commit -m "feat: 기능 A 구현"
|
|
112
137
|
|
|
113
|
-
# 3.
|
|
114
|
-
git add .
|
|
115
|
-
git commit -m "feat:
|
|
138
|
+
# 3. 기능 B 작업 완료 → 커밋
|
|
139
|
+
git add src/routes/feature-b.tsx src/functions/feature-b.ts
|
|
140
|
+
git commit -m "feat: 기능 B 구현"
|
|
141
|
+
|
|
142
|
+
# 4. 문서 작업 완료 → 커밋
|
|
143
|
+
git add docs/
|
|
144
|
+
git commit -m "docs: 기능 A, B 문서 추가"
|
|
116
145
|
|
|
117
|
-
#
|
|
146
|
+
# 5. 푸시
|
|
118
147
|
git push origin main
|
|
119
148
|
```
|
|
120
149
|
|
|
121
150
|
---
|
|
122
151
|
|
|
152
|
+
## 📦 커밋 분리 가이드
|
|
153
|
+
|
|
154
|
+
### 언제 커밋을 분리해야 하나요?
|
|
155
|
+
|
|
156
|
+
| 상황 | 커밋 분리 |
|
|
157
|
+
|------|----------|
|
|
158
|
+
| 서로 다른 기능 구현 | ✅ 분리 |
|
|
159
|
+
| 버그 수정 + 새 기능 | ✅ 분리 |
|
|
160
|
+
| 코드 변경 + 문서 변경 | ✅ 분리 |
|
|
161
|
+
| 리팩토링 + 기능 추가 | ✅ 분리 |
|
|
162
|
+
| 동일 기능의 라우트 + 함수 | 🔄 묶어도 됨 |
|
|
163
|
+
| 동일 기능의 스키마 + 서비스 | 🔄 묶어도 됨 |
|
|
164
|
+
|
|
165
|
+
### 예시: 사용자 관리 기능 개발
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# 1. 인증 기능 커밋
|
|
169
|
+
git add src/routes/auth/ src/functions/auth.ts src/middleware/auth.ts
|
|
170
|
+
git commit -m "feat: 사용자 인증 기능 추가"
|
|
171
|
+
|
|
172
|
+
# 2. 프로필 기능 커밋
|
|
173
|
+
git add src/routes/profile/ src/functions/user.ts
|
|
174
|
+
git commit -m "feat: 프로필 조회 및 수정 기능 추가"
|
|
175
|
+
|
|
176
|
+
# 3. 유효성 검사 커밋
|
|
177
|
+
git add src/validators/
|
|
178
|
+
git commit -m "feat: 사용자 입력 유효성 검사 추가"
|
|
179
|
+
|
|
180
|
+
# 4. 테스트 커밋
|
|
181
|
+
git add tests/
|
|
182
|
+
git commit -m "test: 사용자 관리 기능 테스트 추가"
|
|
183
|
+
|
|
184
|
+
# 5. 문서 커밋
|
|
185
|
+
git add docs/
|
|
186
|
+
git commit -m "docs: 사용자 API 문서 추가"
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
123
191
|
## 🌿 브랜치 전략
|
|
124
192
|
|
|
125
193
|
### 간단한 프로젝트
|
|
@@ -166,6 +234,12 @@ git restore --staged .
|
|
|
166
234
|
# 변경사항 임시 저장
|
|
167
235
|
git stash
|
|
168
236
|
git stash pop
|
|
237
|
+
|
|
238
|
+
# 특정 파일만 스테이징
|
|
239
|
+
git add <파일경로>
|
|
240
|
+
|
|
241
|
+
# 대화형 스테이징 (부분 커밋용)
|
|
242
|
+
git add -p
|
|
169
243
|
```
|
|
170
244
|
|
|
171
245
|
---
|