6. 환경 변수와 시크릿
Worker 코드 안에 API 키나 설정값을 하드코딩하면 안 됩니다. Cloudflare Workers는 두 가지 방식으로 값을 주입할 수 있습니다: 환경 변수(vars)와 시크릿(secrets).
6.1 환경 변수 (vars)
민감하지 않은 설정값은 wrangler.jsonc에 직접 적어둘 수 있습니다.
jsonc
{
"name": "cloudflare-workers-course-sample",
"main": "src/index.js",
"compatibility_date": "2024-11-01",
"vars": {
"GREETING": "Hello"
}
}
Worker 코드에서는 env 파라미터로 접근합니다.
js
export default { async fetch(request, env, ctx) { return new Response(`${env.GREETING}, World!`); }, };
이 강의의 샘플 프로젝트(sample-worker/wrangler.jsonc)에도 GREETING 변수가 정의되어 있고, sample-worker/src/index.js의 /api/hello 라우트에서 사용하고 있습니다.
6.2 시크릿 (secrets)
API 키, 비밀번호처럼 민감한 값은 절대 wrangler.jsonc나 코드에 커밋하면 안 됩니다. 대신 wrangler secret 명령으로 등록합니다.
bash
npx wrangler secret put API_KEY
실행하면 터미널에서 값 입력을 요청하고, 입력한 값은 Cloudflare에 암호화되어 저장됩니다. 사용하는 방식은 일반 환경 변수와 동일합니다.
js
export default { async fetch(request, env, ctx) { // env.API_KEY 는 wrangler secret put 으로 등록한 값 const res = await fetch("https://api.example.com/data", { headers: { Authorization: `Bearer ${env.API_KEY}` }, }); return res; }, };
6.3 로컬 개발용 시크릿: .dev.vars
로컬에서 wrangler dev를 실행할 때는 실제 시크릿 대신 프로젝트 루트에 .dev.vars 파일을 만들어 사용합니다.
text
# .dev.vars API_KEY=local-dev-fake-key
.dev.vars는 반드시.gitignore에 추가해서 커밋되지 않도록 해야 합니다. 이 강의의 샘플 프로젝트.gitignore에도 이미 포함되어 있습니다.
6.4 환경별로 값 분리하기 (staging / production)
wrangler.jsonc의 env 필드로 배포 환경별 설정을 나눌 수 있습니다.
jsonc
{
"name": "my-worker",
"main": "src/index.js",
"compatibility_date": "2024-11-01",
"vars": { "GREETING": "Hello (default)" },
"env": {
"staging": {
"vars": { "GREETING": "Hello (staging)" }
},
"production": {
"vars": { "GREETING": "Hello (production)" }
}
}
}
bash
npx wrangler deploy --env staging npx wrangler deploy --env production