@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,13 +1,6 @@
|
|
|
1
1
|
# Railway 배포
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> **Version**: Nitro 3.x
|
|
5
|
-
|
|
6
|
-
Railway는 Node.js 서버를 간편하게 배포할 수 있는 플랫폼입니다.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 🚀 Quick Reference (복사용)
|
|
3
|
+
## Quick Reference
|
|
11
4
|
|
|
12
5
|
```typescript
|
|
13
6
|
// nitro.config.ts
|
|
@@ -20,184 +13,55 @@ export default defineNitroConfig({
|
|
|
20
13
|
```
|
|
21
14
|
|
|
22
15
|
```json
|
|
23
|
-
// package.json
|
|
16
|
+
// package.json
|
|
24
17
|
{
|
|
25
18
|
"scripts": {
|
|
26
19
|
"build": "vite build && tsc --noEmit",
|
|
27
20
|
"start": "node .output/server/index.mjs"
|
|
28
|
-
}
|
|
21
|
+
},
|
|
22
|
+
"engines": { "node": ">=20.0.0" }
|
|
29
23
|
}
|
|
30
24
|
```
|
|
31
25
|
|
|
32
26
|
```bash
|
|
33
|
-
|
|
34
|
-
railway login
|
|
35
|
-
railway init
|
|
36
|
-
railway up
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Nitro 설정
|
|
42
|
-
|
|
43
|
-
### nitro.config.ts
|
|
44
|
-
|
|
45
|
-
```typescript
|
|
46
|
-
// nitro.config.ts
|
|
47
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
48
|
-
|
|
49
|
-
export default defineNitroConfig({
|
|
50
|
-
// Node.js 서버 preset
|
|
51
|
-
preset: 'node',
|
|
52
|
-
|
|
53
|
-
// 호환성 날짜 (Nitro v3 필수)
|
|
54
|
-
compatibilityDate: '2024-09-19',
|
|
55
|
-
})
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Vite 설정
|
|
61
|
-
|
|
62
|
-
```typescript
|
|
63
|
-
// vite.config.ts
|
|
64
|
-
import { defineConfig } from 'vite'
|
|
65
|
-
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
|
|
66
|
-
import { nitro } from 'nitro/vite'
|
|
67
|
-
import viteReact from '@vitejs/plugin-react'
|
|
68
|
-
|
|
69
|
-
export default defineConfig({
|
|
70
|
-
plugins: [
|
|
71
|
-
tanstackStart(),
|
|
72
|
-
nitro(),
|
|
73
|
-
viteReact(),
|
|
74
|
-
],
|
|
75
|
-
})
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## package.json 설정
|
|
81
|
-
|
|
82
|
-
```json
|
|
83
|
-
{
|
|
84
|
-
"name": "tanstack-start-app",
|
|
85
|
-
"type": "module",
|
|
86
|
-
"scripts": {
|
|
87
|
-
"dev": "vite dev",
|
|
88
|
-
"build": "vite build && tsc --noEmit",
|
|
89
|
-
"start": "node .output/server/index.mjs",
|
|
90
|
-
"preview": "vite preview"
|
|
91
|
-
},
|
|
92
|
-
"engines": {
|
|
93
|
-
"node": ">=20.0.0"
|
|
94
|
-
}
|
|
95
|
-
}
|
|
27
|
+
railway login && railway init && railway up
|
|
96
28
|
```
|
|
97
29
|
|
|
98
30
|
---
|
|
99
31
|
|
|
100
32
|
## Railway 설정
|
|
101
33
|
|
|
102
|
-
### railway.json
|
|
103
|
-
|
|
104
34
|
```json
|
|
35
|
+
// railway.json
|
|
105
36
|
{
|
|
106
|
-
"
|
|
107
|
-
"build": {
|
|
108
|
-
"builder": "NIXPACKS",
|
|
109
|
-
"buildCommand": "yarn install && yarn build"
|
|
110
|
-
},
|
|
37
|
+
"build": { "builder": "NIXPACKS", "buildCommand": "yarn install && yarn build" },
|
|
111
38
|
"deploy": {
|
|
112
39
|
"startCommand": "node .output/server/index.mjs",
|
|
113
40
|
"healthcheckPath": "/health",
|
|
114
|
-
"
|
|
115
|
-
"restartPolicyType": "ON_FAILURE",
|
|
116
|
-
"restartPolicyMaxRetries": 3
|
|
41
|
+
"restartPolicyType": "ON_FAILURE"
|
|
117
42
|
}
|
|
118
43
|
}
|
|
119
44
|
```
|
|
120
45
|
|
|
121
|
-
### railway.toml (선택)
|
|
122
|
-
|
|
123
|
-
```toml
|
|
124
|
-
# railway.toml
|
|
125
|
-
[build]
|
|
126
|
-
builder = "nixpacks"
|
|
127
|
-
buildCommand = "yarn install && yarn build"
|
|
128
|
-
|
|
129
|
-
[deploy]
|
|
130
|
-
startCommand = "node .output/server/index.mjs"
|
|
131
|
-
healthcheckPath = "/health"
|
|
132
|
-
healthcheckTimeout = 300
|
|
133
|
-
restartPolicyType = "ON_FAILURE"
|
|
134
|
-
restartPolicyMaxRetries = 3
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### nixpacks.toml (선택)
|
|
138
|
-
|
|
139
|
-
```toml
|
|
140
|
-
[phases.setup]
|
|
141
|
-
nixPkgs = ["nodejs_20"]
|
|
142
|
-
|
|
143
|
-
[phases.install]
|
|
144
|
-
cmds = ["yarn install"]
|
|
145
|
-
|
|
146
|
-
[phases.build]
|
|
147
|
-
cmds = ["yarn build"]
|
|
148
|
-
|
|
149
|
-
[start]
|
|
150
|
-
cmd = "node .output/server/index.mjs"
|
|
151
|
-
```
|
|
152
|
-
|
|
153
46
|
---
|
|
154
47
|
|
|
155
48
|
## 배포 방법
|
|
156
49
|
|
|
157
|
-
###
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
- [Railway 대시보드](https://railway.app) 접속
|
|
161
|
-
- "New Project" → "Deploy from GitHub repo" 선택
|
|
162
|
-
- 저장소 연결
|
|
163
|
-
|
|
164
|
-
2. **자동 감지**
|
|
165
|
-
- Railway가 자동으로 Node.js 프로젝트 감지
|
|
166
|
-
- `package.json`의 `build`, `start` 스크립트 사용
|
|
167
|
-
|
|
168
|
-
3. **환경 변수 설정**
|
|
169
|
-
- Railway 대시보드에서 Variables 탭 선택
|
|
170
|
-
- 필요한 환경 변수 추가
|
|
171
|
-
|
|
172
|
-
### 방법 2: Railway CLI
|
|
50
|
+
### GitHub 연동 (권장)
|
|
51
|
+
1. Railway 대시보드 → "Deploy from GitHub repo"
|
|
52
|
+
2. 자동으로 `build`, `start` 스크립트 사용
|
|
173
53
|
|
|
54
|
+
### CLI
|
|
174
55
|
```bash
|
|
175
|
-
# Railway CLI 설치
|
|
176
56
|
npm install -g @railway/cli
|
|
177
|
-
|
|
178
|
-
# 로그인
|
|
179
57
|
railway login
|
|
180
|
-
|
|
181
|
-
# 프로젝트 초기화
|
|
182
58
|
railway init
|
|
183
|
-
|
|
184
|
-
# 배포
|
|
185
59
|
railway up
|
|
186
|
-
|
|
187
|
-
# 환경 변수 설정
|
|
188
60
|
railway variables set DATABASE_URL="postgresql://..."
|
|
189
|
-
railway variables set API_SECRET="your-secret"
|
|
190
|
-
|
|
191
|
-
# 로그 확인
|
|
192
|
-
railway logs
|
|
193
61
|
```
|
|
194
62
|
|
|
195
|
-
###
|
|
196
|
-
|
|
197
|
-
Railway는 Dockerfile을 자동으로 감지합니다.
|
|
198
|
-
|
|
63
|
+
### Docker
|
|
199
64
|
```dockerfile
|
|
200
|
-
# Dockerfile
|
|
201
65
|
FROM node:20-alpine AS builder
|
|
202
66
|
WORKDIR /app
|
|
203
67
|
COPY package.json yarn.lock ./
|
|
@@ -209,7 +73,6 @@ FROM node:20-alpine
|
|
|
209
73
|
WORKDIR /app
|
|
210
74
|
COPY --from=builder /app/.output ./.output
|
|
211
75
|
ENV PORT=3000 NODE_ENV=production
|
|
212
|
-
EXPOSE 3000
|
|
213
76
|
CMD ["node", ".output/server/index.mjs"]
|
|
214
77
|
```
|
|
215
78
|
|
|
@@ -217,300 +80,68 @@ CMD ["node", ".output/server/index.mjs"]
|
|
|
217
80
|
|
|
218
81
|
## 환경변수
|
|
219
82
|
|
|
220
|
-
### Railway 대시보드에서 설정
|
|
221
|
-
|
|
222
|
-
```
|
|
223
|
-
DATABASE_URL=postgresql://user:pass@host:5432/db
|
|
224
|
-
API_SECRET=your-secret-key
|
|
225
|
-
NODE_ENV=production
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### 코드에서 사용
|
|
229
|
-
|
|
230
|
-
```typescript
|
|
231
|
-
// server/api/health.ts
|
|
232
|
-
import { defineHandler } from 'nitro/h3'
|
|
233
|
-
|
|
234
|
-
export default defineHandler(() => {
|
|
235
|
-
return {
|
|
236
|
-
status: 'ok',
|
|
237
|
-
environment: process.env.NODE_ENV,
|
|
238
|
-
// Railway 자동 제공 변수
|
|
239
|
-
railway: {
|
|
240
|
-
environment: process.env.RAILWAY_ENVIRONMENT,
|
|
241
|
-
service: process.env.RAILWAY_SERVICE_NAME,
|
|
242
|
-
},
|
|
243
|
-
}
|
|
244
|
-
})
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Railway 자동 제공 변수
|
|
248
|
-
|
|
249
83
|
| 변수 | 설명 |
|
|
250
84
|
|------|------|
|
|
251
|
-
| `PORT` | 서버 포트 (자동
|
|
252
|
-
| `RAILWAY_ENVIRONMENT` |
|
|
85
|
+
| `PORT` | 서버 포트 (자동) |
|
|
86
|
+
| `RAILWAY_ENVIRONMENT` | production/staging |
|
|
253
87
|
| `RAILWAY_SERVICE_NAME` | 서비스 이름 |
|
|
254
|
-
| `RAILWAY_PROJECT_ID` | 프로젝트 ID |
|
|
255
|
-
| `RAILWAY_DEPLOYMENT_ID` | 배포 ID |
|
|
256
88
|
|
|
257
89
|
---
|
|
258
90
|
|
|
259
|
-
## 데이터베이스
|
|
260
|
-
|
|
261
|
-
### PostgreSQL 추가
|
|
91
|
+
## 데이터베이스
|
|
262
92
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
```typescript
|
|
267
|
-
// server/lib/db.ts
|
|
268
|
-
import { PrismaClient } from '@prisma/client'
|
|
269
|
-
|
|
270
|
-
// Railway의 DATABASE_URL 자동 사용
|
|
271
|
-
export const prisma = new PrismaClient()
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
### Redis 추가
|
|
275
|
-
|
|
276
|
-
1. Railway 대시보드에서 "New" → "Database" → "Redis" 선택
|
|
277
|
-
2. `REDIS_URL` 환경 변수 자동 연결
|
|
278
|
-
|
|
279
|
-
```typescript
|
|
280
|
-
// server/lib/redis.ts
|
|
281
|
-
import { createClient } from 'redis'
|
|
282
|
-
|
|
283
|
-
const client = createClient({
|
|
284
|
-
url: process.env.REDIS_URL,
|
|
285
|
-
})
|
|
286
|
-
|
|
287
|
-
export default client
|
|
93
|
+
```bash
|
|
94
|
+
# Railway 대시보드: New → Database → PostgreSQL/Redis
|
|
95
|
+
# DATABASE_URL, REDIS_URL 자동 연결
|
|
288
96
|
```
|
|
289
97
|
|
|
290
98
|
---
|
|
291
99
|
|
|
292
|
-
## 도메인 설정
|
|
293
|
-
|
|
294
|
-
### 자동 도메인
|
|
295
|
-
|
|
296
|
-
Railway는 자동으로 도메인을 생성합니다:
|
|
297
|
-
- `your-app-production.up.railway.app`
|
|
298
|
-
|
|
299
|
-
### 커스텀 도메인
|
|
300
|
-
|
|
301
|
-
1. Railway 대시보드 → Settings → Domains
|
|
302
|
-
2. "Add Custom Domain" 클릭
|
|
303
|
-
3. DNS 설정:
|
|
304
|
-
```
|
|
305
|
-
CNAME your-domain.com → your-app-production.up.railway.app
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
---
|
|
309
|
-
|
|
310
100
|
## 헬스체크
|
|
311
101
|
|
|
312
|
-
### 헬스체크 엔드포인트
|
|
313
|
-
|
|
314
102
|
```typescript
|
|
315
103
|
// server/api/health.ts
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
status: 'ok',
|
|
321
|
-
timestamp: new Date().toISOString(),
|
|
322
|
-
}
|
|
323
|
-
})
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
### railway.json 헬스체크 설정
|
|
327
|
-
|
|
328
|
-
```json
|
|
329
|
-
{
|
|
330
|
-
"deploy": {
|
|
331
|
-
"healthcheckPath": "/api/health",
|
|
332
|
-
"healthcheckTimeout": 300
|
|
333
|
-
}
|
|
334
|
-
}
|
|
104
|
+
export default defineHandler(() => ({
|
|
105
|
+
status: 'ok',
|
|
106
|
+
timestamp: new Date().toISOString(),
|
|
107
|
+
}))
|
|
335
108
|
```
|
|
336
109
|
|
|
337
110
|
---
|
|
338
111
|
|
|
339
|
-
## CI/CD
|
|
340
|
-
|
|
341
|
-
### GitHub Actions
|
|
112
|
+
## CI/CD
|
|
342
113
|
|
|
343
114
|
```yaml
|
|
344
115
|
# .github/workflows/railway.yml
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
branches: [main]
|
|
350
|
-
|
|
351
|
-
jobs:
|
|
352
|
-
deploy:
|
|
353
|
-
runs-on: ubuntu-latest
|
|
354
|
-
steps:
|
|
355
|
-
- uses: actions/checkout@v4
|
|
356
|
-
|
|
357
|
-
- name: Install Railway CLI
|
|
358
|
-
run: npm install -g @railway/cli
|
|
359
|
-
|
|
360
|
-
- name: Deploy
|
|
361
|
-
run: railway up
|
|
362
|
-
env:
|
|
363
|
-
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
### 환경별 배포
|
|
367
|
-
|
|
368
|
-
```yaml
|
|
369
|
-
# .github/workflows/railway-env.yml
|
|
370
|
-
name: Deploy to Railway (Multi-Environment)
|
|
371
|
-
|
|
372
|
-
on:
|
|
373
|
-
push:
|
|
374
|
-
branches:
|
|
375
|
-
- main
|
|
376
|
-
- staging
|
|
377
|
-
|
|
378
|
-
jobs:
|
|
379
|
-
deploy:
|
|
380
|
-
runs-on: ubuntu-latest
|
|
381
|
-
steps:
|
|
382
|
-
- uses: actions/checkout@v4
|
|
383
|
-
|
|
384
|
-
- name: Install Railway CLI
|
|
385
|
-
run: npm install -g @railway/cli
|
|
386
|
-
|
|
387
|
-
- name: Deploy to Production
|
|
388
|
-
if: github.ref == 'refs/heads/main'
|
|
389
|
-
run: railway up --environment production
|
|
390
|
-
env:
|
|
391
|
-
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
|
|
392
|
-
|
|
393
|
-
- name: Deploy to Staging
|
|
394
|
-
if: github.ref == 'refs/heads/staging'
|
|
395
|
-
run: railway up --environment staging
|
|
396
|
-
env:
|
|
397
|
-
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
|
|
116
|
+
- run: npm install -g @railway/cli
|
|
117
|
+
- run: railway up
|
|
118
|
+
env:
|
|
119
|
+
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
|
|
398
120
|
```
|
|
399
121
|
|
|
400
122
|
---
|
|
401
123
|
|
|
402
124
|
## 모니터링
|
|
403
125
|
|
|
404
|
-
### 로그 확인
|
|
405
|
-
|
|
406
126
|
```bash
|
|
407
|
-
#
|
|
408
|
-
railway logs
|
|
409
|
-
|
|
410
|
-
#
|
|
411
|
-
railway logs -f
|
|
412
|
-
|
|
413
|
-
# 특정 서비스 로그
|
|
414
|
-
railway logs --service my-service
|
|
127
|
+
railway logs # 로그 확인
|
|
128
|
+
railway logs -f # 실시간 로그
|
|
129
|
+
railway status # 서비스 상태
|
|
130
|
+
railway variables # 환경변수 확인
|
|
415
131
|
```
|
|
416
132
|
|
|
417
|
-
### 메트릭 확인
|
|
418
|
-
|
|
419
|
-
Railway 대시보드에서 확인 가능:
|
|
420
|
-
- CPU 사용량
|
|
421
|
-
- 메모리 사용량
|
|
422
|
-
- 네트워크 트래픽
|
|
423
|
-
- 요청 수
|
|
424
|
-
|
|
425
|
-
---
|
|
426
|
-
|
|
427
|
-
## 비용 최적화
|
|
428
|
-
|
|
429
|
-
### Hobby Plan 활용
|
|
430
|
-
|
|
431
|
-
```toml
|
|
432
|
-
# railway.toml
|
|
433
|
-
[deploy]
|
|
434
|
-
# 유휴 시 슬립 (Hobby Plan)
|
|
435
|
-
sleepAfterInactivity = 300 # 5분 후 슬립
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
### 리소스 제한
|
|
439
|
-
|
|
440
|
-
Railway 대시보드에서 설정:
|
|
441
|
-
- Memory Limit: 512MB (시작점)
|
|
442
|
-
- Replicas: 1 (시작점)
|
|
443
|
-
|
|
444
133
|
---
|
|
445
134
|
|
|
446
135
|
## 트러블슈팅
|
|
447
136
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
|
451
|
-
|
|
452
|
-
|
|
|
453
|
-
|
|
|
454
|
-
| 메모리 초과 | 메모리 누수 | 리소스 제한 증가 또는 코드 최적화 |
|
|
455
|
-
| 헬스체크 실패 | 엔드포인트 없음 | `/health` 엔드포인트 추가 |
|
|
456
|
-
|
|
457
|
-
### 디버깅
|
|
458
|
-
|
|
459
|
-
```bash
|
|
460
|
-
# 로컬에서 Railway 환경 시뮬레이션
|
|
461
|
-
railway run yarn dev
|
|
462
|
-
|
|
463
|
-
# 환경 변수 확인
|
|
464
|
-
railway variables
|
|
465
|
-
|
|
466
|
-
# 서비스 상태 확인
|
|
467
|
-
railway status
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
### 포트 바인딩
|
|
471
|
-
|
|
472
|
-
Railway는 `PORT` 환경변수를 자동 설정합니다:
|
|
137
|
+
| 문제 | 해결 |
|
|
138
|
+
|------|------|
|
|
139
|
+
| 빌드 실패 | `yarn.lock` 커밋 확인 |
|
|
140
|
+
| 포트 바인딩 | `process.env.PORT` 사용 |
|
|
141
|
+
| 메모리 초과 | 리소스 제한 증가 |
|
|
142
|
+
| 헬스체크 실패 | `/health` 엔드포인트 추가 |
|
|
473
143
|
|
|
474
144
|
```typescript
|
|
475
|
-
// ❌
|
|
476
|
-
const port = 3000
|
|
477
|
-
|
|
478
|
-
// ✅ 올바른 예
|
|
479
|
-
const port = process.env.PORT || 3000
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
### 메모리 설정
|
|
483
|
-
|
|
484
|
-
```json
|
|
485
|
-
// package.json
|
|
486
|
-
{
|
|
487
|
-
"scripts": {
|
|
488
|
-
"start": "node --max-old-space-size=512 .output/server/index.mjs"
|
|
489
|
-
}
|
|
490
|
-
}
|
|
145
|
+
// ❌ const port = 3000
|
|
146
|
+
// ✅ const port = process.env.PORT || 3000
|
|
491
147
|
```
|
|
492
|
-
|
|
493
|
-
---
|
|
494
|
-
|
|
495
|
-
## 프로젝트 구조
|
|
496
|
-
|
|
497
|
-
```
|
|
498
|
-
my-app/
|
|
499
|
-
├── src/
|
|
500
|
-
│ └── routes/
|
|
501
|
-
├── server/
|
|
502
|
-
│ └── api/
|
|
503
|
-
├── nitro.config.ts
|
|
504
|
-
├── vite.config.ts
|
|
505
|
-
├── package.json
|
|
506
|
-
└── railway.json
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
---
|
|
510
|
-
|
|
511
|
-
## 참고 자료
|
|
512
|
-
|
|
513
|
-
- [TanStack Start Hosting](https://tanstack.com/start/latest/docs/framework/react/hosting)
|
|
514
|
-
- [Railway 공식 문서](https://docs.railway.app)
|
|
515
|
-
- [Railway CLI](https://docs.railway.app/reference/cli-api)
|
|
516
|
-
- [Nitro Node Preset](https://nitro.build/deploy/providers/node)
|