@kood/claude-code 0.1.7 → 0.1.9
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 +118 -3
- package/package.json +8 -2
- package/templates/hono/CLAUDE.md +53 -326
- package/templates/hono/docs/architecture/architecture.md +93 -747
- package/templates/hono/docs/deployment/cloudflare.md +59 -513
- package/templates/hono/docs/deployment/docker.md +41 -356
- package/templates/hono/docs/deployment/index.md +49 -190
- package/templates/hono/docs/deployment/railway.md +36 -306
- package/templates/hono/docs/deployment/vercel.md +49 -434
- package/templates/hono/docs/library/ai-sdk/index.md +53 -290
- package/templates/hono/docs/library/ai-sdk/openrouter.md +19 -387
- package/templates/hono/docs/library/ai-sdk/providers.md +28 -394
- package/templates/hono/docs/library/ai-sdk/streaming.md +52 -353
- package/templates/hono/docs/library/ai-sdk/structured-output.md +63 -395
- package/templates/hono/docs/library/ai-sdk/tools.md +62 -431
- package/templates/hono/docs/library/hono/env-setup.md +24 -313
- package/templates/hono/docs/library/hono/error-handling.md +34 -295
- package/templates/hono/docs/library/hono/index.md +24 -122
- package/templates/hono/docs/library/hono/middleware.md +21 -188
- package/templates/hono/docs/library/hono/rpc.md +40 -341
- package/templates/hono/docs/library/hono/validation.md +35 -195
- package/templates/hono/docs/library/pino/index.md +42 -333
- package/templates/hono/docs/library/prisma/cloudflare-d1.md +64 -367
- package/templates/hono/docs/library/prisma/config.md +19 -260
- package/templates/hono/docs/library/prisma/index.md +64 -320
- package/templates/hono/docs/library/zod/index.md +53 -257
- package/templates/npx/CLAUDE.md +58 -276
- package/templates/npx/docs/references/patterns.md +160 -0
- package/templates/tanstack-start/CLAUDE.md +0 -4
- package/templates/tanstack-start/docs/architecture/architecture.md +44 -589
- package/templates/tanstack-start/docs/design/index.md +119 -12
- package/templates/tanstack-start/docs/guides/conventions.md +103 -0
- package/templates/tanstack-start/docs/guides/env-setup.md +34 -340
- package/templates/tanstack-start/docs/guides/getting-started.md +22 -209
- package/templates/tanstack-start/docs/guides/hooks.md +166 -0
- package/templates/tanstack-start/docs/guides/routes.md +166 -0
- package/templates/tanstack-start/docs/guides/services.md +143 -0
- package/templates/tanstack-start/docs/library/tanstack-query/index.md +18 -2
- package/templates/tanstack-start/docs/library/zod/index.md +16 -1
- package/templates/tanstack-start/docs/design/accessibility.md +0 -163
- package/templates/tanstack-start/docs/design/color.md +0 -93
- package/templates/tanstack-start/docs/design/spacing.md +0 -122
- package/templates/tanstack-start/docs/design/typography.md +0 -80
- package/templates/tanstack-start/docs/guides/best-practices.md +0 -950
- package/templates/tanstack-start/docs/guides/husky-lint-staged.md +0 -303
- package/templates/tanstack-start/docs/guides/prettier.md +0 -189
- package/templates/tanstack-start/docs/guides/project-templates.md +0 -710
- package/templates/tanstack-start/docs/library/tanstack-query/setup.md +0 -48
- package/templates/tanstack-start/docs/library/zod/basic-types.md +0 -74
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
# Hono - 환경 변수 설정
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
환경별 `.env` 파일 설정 및 타입 안전한 환경 변수 관리 방법입니다.
|
|
3
|
+
> 타입 안전한 환경 변수 관리
|
|
6
4
|
|
|
7
5
|
---
|
|
8
6
|
|
|
9
|
-
##
|
|
7
|
+
## 파일 구조
|
|
10
8
|
|
|
11
9
|
```
|
|
12
10
|
프로젝트/
|
|
13
|
-
├── .env # 기본
|
|
11
|
+
├── .env # 기본 (공통)
|
|
14
12
|
├── .env.development # 개발 환경
|
|
15
|
-
├── .env.production # 프로덕션
|
|
16
|
-
├── .env.local # 로컬
|
|
17
|
-
├── .env.example #
|
|
18
|
-
└── src/
|
|
19
|
-
└── env.ts # 환경 변수 검증 및 타입
|
|
13
|
+
├── .env.production # 프로덕션
|
|
14
|
+
├── .env.local # 로컬 (gitignore)
|
|
15
|
+
├── .env.example # 템플릿 (커밋용)
|
|
16
|
+
└── src/env.ts # 검증 및 타입
|
|
20
17
|
```
|
|
21
18
|
|
|
22
19
|
---
|
|
@@ -24,242 +21,77 @@
|
|
|
24
21
|
## 설치
|
|
25
22
|
|
|
26
23
|
```bash
|
|
27
|
-
npm install dotenv
|
|
24
|
+
npm install dotenv zod
|
|
28
25
|
npm install -D @types/node
|
|
29
26
|
```
|
|
30
27
|
|
|
31
28
|
---
|
|
32
29
|
|
|
33
|
-
## 환경 변수
|
|
34
|
-
|
|
35
|
-
### .env.example (커밋용 템플릿)
|
|
36
|
-
|
|
37
|
-
```env
|
|
38
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
39
|
-
# 환경 변수 템플릿
|
|
40
|
-
# 복사 후 .env.local 로 저장하여 사용
|
|
41
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
42
|
-
|
|
43
|
-
# 앱 설정
|
|
44
|
-
NODE_ENV=development
|
|
45
|
-
PORT=3000
|
|
46
|
-
|
|
47
|
-
# 데이터베이스
|
|
48
|
-
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
|
|
49
|
-
|
|
50
|
-
# 인증
|
|
51
|
-
JWT_SECRET=your-secret-key-here
|
|
52
|
-
JWT_EXPIRES_IN=7d
|
|
53
|
-
|
|
54
|
-
# 외부 서비스
|
|
55
|
-
OPENAI_API_KEY=sk-xxx
|
|
56
|
-
REDIS_URL=redis://localhost:6379
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### .env.development
|
|
60
|
-
|
|
61
|
-
```env
|
|
62
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
63
|
-
# 개발 환경 설정
|
|
64
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
65
|
-
|
|
66
|
-
NODE_ENV=development
|
|
67
|
-
PORT=3000
|
|
68
|
-
|
|
69
|
-
# 개발용 데이터베이스
|
|
70
|
-
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp_dev
|
|
71
|
-
|
|
72
|
-
# 개발용 시크릿 (짧은 값 OK)
|
|
73
|
-
JWT_SECRET=dev-secret-key
|
|
74
|
-
JWT_EXPIRES_IN=1d
|
|
75
|
-
|
|
76
|
-
# 개발용 외부 서비스
|
|
77
|
-
OPENAI_API_KEY=sk-dev-xxx
|
|
78
|
-
REDIS_URL=redis://localhost:6379
|
|
79
|
-
|
|
80
|
-
# 개발용 옵션
|
|
81
|
-
LOG_LEVEL=debug
|
|
82
|
-
CORS_ORIGIN=http://localhost:5173
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### .env.production
|
|
86
|
-
|
|
87
|
-
```env
|
|
88
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
89
|
-
# 프로덕션 환경 설정
|
|
90
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
91
|
-
|
|
92
|
-
NODE_ENV=production
|
|
93
|
-
PORT=8080
|
|
94
|
-
|
|
95
|
-
# 프로덕션 데이터베이스
|
|
96
|
-
DATABASE_URL=postgresql://user:strongpassword@prod-db.example.com:5432/myapp
|
|
97
|
-
|
|
98
|
-
# 프로덕션 시크릿 (강력한 값 필수)
|
|
99
|
-
JWT_SECRET=super-secure-production-secret-key-at-least-32-chars
|
|
100
|
-
JWT_EXPIRES_IN=7d
|
|
101
|
-
|
|
102
|
-
# 프로덕션 외부 서비스
|
|
103
|
-
OPENAI_API_KEY=sk-prod-xxx
|
|
104
|
-
REDIS_URL=redis://prod-redis.example.com:6379
|
|
105
|
-
|
|
106
|
-
# 프로덕션 옵션
|
|
107
|
-
LOG_LEVEL=info
|
|
108
|
-
CORS_ORIGIN=https://myapp.com
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## 타입 안전한 환경 변수 (Zod)
|
|
30
|
+
## Zod로 환경 변수 검증
|
|
114
31
|
|
|
115
32
|
### src/env.ts
|
|
116
33
|
|
|
117
34
|
```typescript
|
|
118
|
-
// src/env.ts
|
|
119
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
120
|
-
// 환경 변수 검증 및 타입 정의
|
|
121
|
-
// 앱 시작 시 자동으로 환경 변수를 검증합니다
|
|
122
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
123
35
|
import { z } from 'zod'
|
|
124
36
|
|
|
125
|
-
// 환경 변수 스키마
|
|
126
37
|
const envSchema = z.object({
|
|
127
|
-
// 앱 설정
|
|
128
38
|
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
129
39
|
PORT: z.coerce.number().default(3000),
|
|
130
|
-
|
|
131
|
-
// 데이터베이스
|
|
132
40
|
DATABASE_URL: z.string().url(),
|
|
133
|
-
|
|
134
|
-
// 인증
|
|
135
41
|
JWT_SECRET: z.string().min(16),
|
|
136
42
|
JWT_EXPIRES_IN: z.string().default('7d'),
|
|
137
|
-
|
|
138
|
-
// 외부 서비스 (선택적)
|
|
139
43
|
OPENAI_API_KEY: z.string().optional(),
|
|
140
|
-
REDIS_URL: z.string().url().optional(),
|
|
141
|
-
|
|
142
|
-
// 옵션
|
|
143
44
|
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
144
45
|
CORS_ORIGIN: z.string().default('*'),
|
|
145
46
|
})
|
|
146
47
|
|
|
147
|
-
// 환경 변수 타입 추출
|
|
148
48
|
export type Env = z.infer<typeof envSchema>
|
|
149
49
|
|
|
150
|
-
// 환경 변수 파싱 및 검증
|
|
151
50
|
const parseEnv = (): Env => {
|
|
152
51
|
const result = envSchema.safeParse(process.env)
|
|
153
|
-
|
|
154
52
|
if (!result.success) {
|
|
155
|
-
console.error('
|
|
156
|
-
console.error(result.error.format())
|
|
53
|
+
console.error('환경 변수 검증 실패:', result.error.format())
|
|
157
54
|
process.exit(1)
|
|
158
55
|
}
|
|
159
|
-
|
|
160
56
|
return result.data
|
|
161
57
|
}
|
|
162
58
|
|
|
163
|
-
// 검증된 환경 변수 export
|
|
164
59
|
export const env = parseEnv()
|
|
165
60
|
```
|
|
166
61
|
|
|
167
62
|
---
|
|
168
63
|
|
|
169
|
-
## dotenv
|
|
64
|
+
## dotenv 로드
|
|
170
65
|
|
|
171
|
-
### src/index.ts
|
|
66
|
+
### src/index.ts
|
|
172
67
|
|
|
173
68
|
```typescript
|
|
174
|
-
//
|
|
175
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
176
|
-
// Hono 앱 진입점
|
|
177
|
-
// dotenv는 가장 먼저 import해야 합니다
|
|
178
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
179
|
-
import 'dotenv/config' // ⚠️ 반드시 최상단!
|
|
69
|
+
import 'dotenv/config' // 최상단!
|
|
180
70
|
import { serve } from '@hono/node-server'
|
|
181
71
|
import { app } from './app'
|
|
182
72
|
import { env } from './env'
|
|
183
73
|
|
|
184
|
-
serve({
|
|
185
|
-
|
|
186
|
-
port: env.PORT,
|
|
187
|
-
}, (info) => {
|
|
188
|
-
console.log(`🚀 Server running on http://localhost:${info.port}`)
|
|
189
|
-
console.log(`📍 Environment: ${env.NODE_ENV}`)
|
|
74
|
+
serve({ fetch: app.fetch, port: env.PORT }, (info) => {
|
|
75
|
+
console.log(`Server: http://localhost:${info.port}`)
|
|
190
76
|
})
|
|
191
77
|
```
|
|
192
78
|
|
|
193
|
-
### 환경별 dotenv 로드
|
|
194
|
-
|
|
195
|
-
```typescript
|
|
196
|
-
// src/load-env.ts
|
|
197
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
198
|
-
// 환경별 .env 파일 로드
|
|
199
|
-
// NODE_ENV에 따라 적절한 파일을 로드합니다
|
|
200
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
201
|
-
import { config } from 'dotenv'
|
|
202
|
-
import path from 'node:path'
|
|
203
|
-
|
|
204
|
-
const loadEnv = () => {
|
|
205
|
-
const nodeEnv = process.env.NODE_ENV || 'development'
|
|
206
|
-
|
|
207
|
-
// 로드 순서: .env.local → .env.{환경} → .env
|
|
208
|
-
const envFiles = [
|
|
209
|
-
`.env.local`, // 로컬 오버라이드 (gitignore)
|
|
210
|
-
`.env.${nodeEnv}`, // 환경별 설정
|
|
211
|
-
`.env`, // 기본 설정
|
|
212
|
-
]
|
|
213
|
-
|
|
214
|
-
envFiles.forEach((file) => {
|
|
215
|
-
config({ path: path.resolve(process.cwd(), file) })
|
|
216
|
-
})
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
loadEnv()
|
|
220
|
-
|
|
221
|
-
export {}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
```typescript
|
|
225
|
-
// src/index.ts
|
|
226
|
-
import './load-env' // ⚠️ 반드시 최상단!
|
|
227
|
-
import { serve } from '@hono/node-server'
|
|
228
|
-
import { app } from './app'
|
|
229
|
-
import { env } from './env'
|
|
230
|
-
|
|
231
|
-
// ... 나머지 코드
|
|
232
|
-
```
|
|
233
|
-
|
|
234
79
|
---
|
|
235
80
|
|
|
236
|
-
## Hono Bindings
|
|
81
|
+
## Hono Bindings
|
|
237
82
|
|
|
238
83
|
### src/types/hono.ts
|
|
239
84
|
|
|
240
85
|
```typescript
|
|
241
|
-
// src/types/hono.ts
|
|
242
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
243
|
-
// Hono 앱 타입 정의
|
|
244
|
-
// Bindings, Variables 등 전역 타입을 정의합니다
|
|
245
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
246
86
|
import type { Env } from '../env'
|
|
247
87
|
|
|
248
|
-
// 환경 변수 Bindings
|
|
249
88
|
export type Bindings = Env
|
|
250
89
|
|
|
251
|
-
// 요청 간 공유 변수
|
|
252
90
|
export type Variables = {
|
|
253
91
|
requestId: string
|
|
254
92
|
userId?: string
|
|
255
|
-
user?: {
|
|
256
|
-
id: string
|
|
257
|
-
email: string
|
|
258
|
-
role: string
|
|
259
|
-
}
|
|
260
93
|
}
|
|
261
94
|
|
|
262
|
-
// Hono 앱 타입
|
|
263
95
|
export type HonoEnv = {
|
|
264
96
|
Bindings: Bindings
|
|
265
97
|
Variables: Variables
|
|
@@ -269,50 +101,24 @@ export type HonoEnv = {
|
|
|
269
101
|
### src/app.ts
|
|
270
102
|
|
|
271
103
|
```typescript
|
|
272
|
-
// src/app.ts
|
|
273
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
274
|
-
// Hono 앱 설정
|
|
275
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
276
104
|
import { Hono } from 'hono'
|
|
277
|
-
import { cors } from 'hono/cors'
|
|
278
|
-
import { logger } from 'hono/logger'
|
|
279
105
|
import type { HonoEnv } from './types/hono'
|
|
280
106
|
import { env } from './env'
|
|
281
107
|
|
|
282
108
|
export const app = new Hono<HonoEnv>()
|
|
283
109
|
|
|
284
|
-
//
|
|
285
|
-
app.use('*', logger())
|
|
286
|
-
app.use('*', cors({ origin: env.CORS_ORIGIN }))
|
|
287
|
-
|
|
288
|
-
// 환경 변수 바인딩 미들웨어 (Node.js용)
|
|
110
|
+
// Node.js에서 env 바인딩
|
|
289
111
|
app.use('*', async (c, next) => {
|
|
290
|
-
// Node.js에서는 process.env를 c.env로 바인딩
|
|
291
112
|
Object.assign(c.env, env)
|
|
292
113
|
await next()
|
|
293
114
|
})
|
|
294
115
|
|
|
295
|
-
|
|
296
|
-
app.get('/', (c) => {
|
|
297
|
-
return c.json({
|
|
298
|
-
message: 'Hello Hono!',
|
|
299
|
-
environment: c.env.NODE_ENV,
|
|
300
|
-
})
|
|
301
|
-
})
|
|
302
|
-
|
|
303
|
-
app.get('/health', (c) => {
|
|
304
|
-
return c.json({
|
|
305
|
-
status: 'ok',
|
|
306
|
-
timestamp: new Date().toISOString(),
|
|
307
|
-
})
|
|
308
|
-
})
|
|
116
|
+
app.get('/', (c) => c.json({ env: c.env.NODE_ENV }))
|
|
309
117
|
```
|
|
310
118
|
|
|
311
119
|
---
|
|
312
120
|
|
|
313
|
-
## Cloudflare Workers
|
|
314
|
-
|
|
315
|
-
Cloudflare Workers에서는 `wrangler.toml`과 `.dev.vars`를 사용합니다.
|
|
121
|
+
## Cloudflare Workers
|
|
316
122
|
|
|
317
123
|
### wrangler.toml
|
|
318
124
|
|
|
@@ -324,135 +130,40 @@ compatibility_date = "2024-01-01"
|
|
|
324
130
|
[vars]
|
|
325
131
|
NODE_ENV = "production"
|
|
326
132
|
LOG_LEVEL = "info"
|
|
327
|
-
|
|
328
|
-
# 개발 환경 오버라이드
|
|
329
|
-
[env.development.vars]
|
|
330
|
-
NODE_ENV = "development"
|
|
331
|
-
LOG_LEVEL = "debug"
|
|
332
133
|
```
|
|
333
134
|
|
|
334
|
-
### .dev.vars (
|
|
135
|
+
### .dev.vars (시크릿, gitignore)
|
|
335
136
|
|
|
336
137
|
```env
|
|
337
|
-
|
|
338
|
-
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp_dev
|
|
138
|
+
DATABASE_URL=postgresql://localhost:5432/myapp_dev
|
|
339
139
|
JWT_SECRET=dev-secret-key
|
|
340
|
-
OPENAI_API_KEY=sk-dev-xxx
|
|
341
140
|
```
|
|
342
141
|
|
|
343
|
-
###
|
|
142
|
+
### 시크릿 설정
|
|
344
143
|
|
|
345
144
|
```bash
|
|
346
|
-
# 시크릿 추가
|
|
347
145
|
wrangler secret put DATABASE_URL
|
|
348
146
|
wrangler secret put JWT_SECRET
|
|
349
|
-
wrangler secret put OPENAI_API_KEY
|
|
350
|
-
|
|
351
|
-
# 시크릿 목록 확인
|
|
352
|
-
wrangler secret list
|
|
353
147
|
```
|
|
354
148
|
|
|
355
149
|
---
|
|
356
150
|
|
|
357
|
-
## .gitignore
|
|
151
|
+
## .gitignore
|
|
358
152
|
|
|
359
153
|
```gitignore
|
|
360
|
-
# 환경 변수 파일
|
|
361
154
|
.env
|
|
362
155
|
.env.local
|
|
363
156
|
.env.*.local
|
|
364
157
|
.dev.vars
|
|
365
158
|
|
|
366
|
-
# 커밋해도 되는 파일
|
|
367
159
|
!.env.example
|
|
368
160
|
!.env.development
|
|
369
161
|
!.env.production
|
|
370
162
|
```
|
|
371
163
|
|
|
372
|
-
⚠️ **주의**: `.env.development`와 `.env.production`에는 **실제 시크릿을 절대 넣지 마세요!**
|
|
373
|
-
- 실제 시크릿은 `.env.local` 또는 CI/CD 환경 변수로 관리
|
|
374
|
-
- `.env.development`, `.env.production`은 기본값과 플레이스홀더만 포함
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
## package.json 스크립트
|
|
379
|
-
|
|
380
|
-
```json
|
|
381
|
-
{
|
|
382
|
-
"scripts": {
|
|
383
|
-
"dev": "NODE_ENV=development tsx watch src/index.ts",
|
|
384
|
-
"build": "tsc",
|
|
385
|
-
"start": "NODE_ENV=production node dist/index.js",
|
|
386
|
-
"start:dev": "NODE_ENV=development node dist/index.js",
|
|
387
|
-
"typecheck": "tsc --noEmit"
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
### cross-env 사용 (Windows 호환)
|
|
393
|
-
|
|
394
|
-
```bash
|
|
395
|
-
npm install -D cross-env
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
```json
|
|
399
|
-
{
|
|
400
|
-
"scripts": {
|
|
401
|
-
"dev": "cross-env NODE_ENV=development tsx watch src/index.ts",
|
|
402
|
-
"start": "cross-env NODE_ENV=production node dist/index.js"
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
---
|
|
408
|
-
|
|
409
|
-
## 환경 변수 사용 예시
|
|
410
|
-
|
|
411
|
-
### 라우트에서 사용
|
|
412
|
-
|
|
413
|
-
```typescript
|
|
414
|
-
// src/routes/users.ts
|
|
415
|
-
import { Hono } from 'hono'
|
|
416
|
-
import type { HonoEnv } from '../types/hono'
|
|
417
|
-
import { env } from '../env'
|
|
418
|
-
|
|
419
|
-
const users = new Hono<HonoEnv>()
|
|
420
|
-
|
|
421
|
-
users.get('/', (c) => {
|
|
422
|
-
// 방법 1: env 모듈에서 직접 가져오기 (권장)
|
|
423
|
-
const dbUrl = env.DATABASE_URL
|
|
424
|
-
|
|
425
|
-
// 방법 2: context에서 가져오기
|
|
426
|
-
const nodeEnv = c.env.NODE_ENV
|
|
427
|
-
|
|
428
|
-
return c.json({ environment: nodeEnv })
|
|
429
|
-
})
|
|
430
|
-
|
|
431
|
-
export { users }
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
### 조건부 로직
|
|
435
|
-
|
|
436
|
-
```typescript
|
|
437
|
-
import { env } from '../env'
|
|
438
|
-
|
|
439
|
-
// 개발 환경에서만 실행
|
|
440
|
-
if (env.NODE_ENV === 'development') {
|
|
441
|
-
console.log('🔧 Development mode')
|
|
442
|
-
// 개발용 설정...
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
// 프로덕션에서만 실행
|
|
446
|
-
if (env.NODE_ENV === 'production') {
|
|
447
|
-
// 프로덕션 최적화...
|
|
448
|
-
}
|
|
449
|
-
```
|
|
450
|
-
|
|
451
164
|
---
|
|
452
165
|
|
|
453
166
|
## 관련 문서
|
|
454
167
|
|
|
455
168
|
- [Hono 개요](./index.md)
|
|
456
|
-
- [
|
|
457
|
-
- [Zod 검증](./validation.md)
|
|
458
|
-
- [Cloudflare 배포](../deployment/cloudflare.md)
|
|
169
|
+
- [Cloudflare 배포](../../deployment/cloudflare.md)
|