본문으로 건너뛰기
프로킷

배포와 릴리스

비밀값 지키기

한눈에

DB 비밀번호나 API 키 같은 비밀값은 저장소와 배포 파일에 남기지 않아요. 내 컴퓨터의 값은 GitHub에 올라가지 않는 파일에, 인터넷에 올린 서비스의 값은 Vercel 설정에만 둬요. 저장(커밋)하기 전과 올리기 전에 한 번 더 검사해요.

값을 두는 곳

환경변수 값은 환경마다 한 곳에만 둬요. 파일에 두는 값은 로컬 값뿐이에요.

환경앱 환경변수
로컬apps/web/.env (git이 무시해요)
developVercel Preview 환경변수
productionVercel Production 환경변수

배포 값을 .env.development나 .env.production에 두지 않아요. 이 파일은 .vercelignore에 걸려 배포에 올라가지 않고, Vercel은 Preview도 NODE_ENV=production으로 빌드해서 파일로는 develop과 운영을 나눌 수도 없어요. 쓰이지 않는 비밀값 사본만 남고, 에이전트가 그 파일을 읽으면 값이 대화 기록에 남아요.

막는 장치

장치하는 일
.gitignore의 .env.*루트와 packages/*의 .env.*를 git이 무시해요(.env.schema는 커밋해요)
.vercelignorevercel deploy는 .gitignore를 따르지 않고 작업 폴더를 그대로 올려요. 설치기가 넣는 .vercelignore가 로컬 .env, .neon, .codex, supabase/.temp, *.pem, *.local, *.local.* 등을 빼요
pnpm dev-cycle secrets커밋 전에 스테이징한 변경에서 로컬 .env*의 비밀값과 흔한 키 형식(개인 키, sk-, GitHub 토큰 등)을 찾아요. 값은 출력하지 않아요. 걸리면 exit 1이라 커밋하지 않아요
pnpm vercel:deploy … --check빠진 환경변수까지 배포 준비를 검사하고 걸리면 배포하지 않아요
pnpm export:html화면만 프로젝트에서 서버 전용 .env 값이 결과물에 들어가면 exit 2로 멈춰요

자세히

에이전트가 지키는 것

  • 연결 문자열과 비밀번호는 파일과 출력에 남기지 않아요. neon은 neon link … --no-env-pull로 연결해 비밀번호가 든 주소를 파일로 받지 않고, supabase는 연결 문자열을 파일에 적지 않아요.

  • 대조표의 증거 칸에도 비밀값, 토큰, 연결 문자열을 옮겨 적지 않아요.

  • pnpm dev-cycle secrets에 걸리면 걸린 파일과 변수 이름만 보고하고, 값을 지우거나 그 파일을 스테이징에서 뺀 뒤 다시 검사해요.

  • 배포 토큰(GH_TOKEN, VERCEL_TOKEN)은 node scripts/load-keys.mjs -- <명령>으로 그 명령에만 넣어요. 값을 대화창에 붙여 넣으라고 하지 않아요.

이미지 키

OPENAI_API_KEY를 프로젝트나 작업 폴더의 .env에 두면 Claude Code 세션을 열 때 훅(scripts/load-keys.mjs)이 셸 환경에 불러와요. 키는 커밋하는 파일에 적지 않아요. 준비 방법은 비용과 키에 있어요.

관련 문서

GitHub에서 고치기(새 탭)