블로그로 돌아가기
Nextjs

vercel 환경변수 설정: 실무 적용 가이드와 주의점 정리

vercel 환경변수 설정을 통해 개발·스테이징·프로덕션별 비밀값과 설정을 안전하게 관리하는 방법을 실무 예제와 체크리스트로 정리합니다. 실무 적용 흐름과 자주 하는 실수까지 함께 확인할 수 있습니다.

vercel환경변수배포nextjsci-cd
Vercel 환경변수 설정을 설명하는 기술 블로그용 썸네일

vercel 환경변수 설정이 필요한 상황

vercel 환경변수 설정은 로컬과 배포 환경에서 비밀값(API 키, DB 접속 정보 등)을 분리하고, 환경별로 설정을 달리 적용해야 할 때 필요합니다. 이 글에서는 개념 이해, 실무 적용 예제(Next.js 기준), 주의점 및 체크리스트를 제공해 바로 적용할 수 있게 설명합니다.

vercel 환경변수 설정 핵심 개념

  • 환경변수 스코프: Vercel은 Project 단위로 Environment(Development, Preview, Production) 스코프를 제공합니다.
  • 공개 변수와 비공개 변수: NEXT_PUBLIC_ 로 시작하는 변수는 클라이언트 번들에 포함됩니다. 민감 정보는 절대 NEXT_PUBLIC_ 로 노출하지 마세요.
  • 우선순위: 배포 시 Vercel 대시보드에 설정된 값이 빌드 시점에 적용됩니다. 로컬 .env 파일은 로컬 개발에만 영향.

vercel 환경변수 설정 실무 예제

아래는 Next.js 프로젝트에서 Vercel에 환경변수를 설정하고 사용하는 기본 흐름입니다.

  1. Vercel 대시보드 -> Project -> Settings -> Environment Variables 에서 변수 추가
  1. Next.js 코드에서 사용
// pages/api/example.js export default async function handler(req, res) { const base = process.env.NEXT_PUBLIC_API_BASE; const r = await fetch(`${base}/health`); const json = await r.json(); res.status(200).json(json); }
  1. 서버 전용 비밀값(예: DB 패스워드)은 NEXT_PUBLIC_ 접두사 없이 사용
# Vercel에 DB_PASSWORD를 추가하고, Next.js getServerSideProps 등 서버사이드 코드에서 사용 DB_PASSWORD=mysecret

비교: 환경변수 관리 선택 기준

구분항목1항목2항목3
내용Vercel 대시보드.env.local (로컬)외부 비밀관리(예: HashiCorp)
내용배포 자동화와 통합개발자 편의성중앙 집중형 보안 관리
내용빌드 시 반영빌드에는 영향 없음별도 프로세스 필요

언제 쓰면 좋고 언제 피해야 할까

언제 쓰면 좋은가

  • 프로젝트를 Vercel에 배포하고 빌드 시점에 환경설정을 분리해야 할 때
  • 공개 API 엔드포인트와 내부 비밀을 분리하여 관리해야 할 때
  • Preview 배포마다 다른 설정(토큰, 피처 플래그)을 적용하고 싶을 때

언제 피해야 하는가

  • 민감한 값을 클라이언트 번들에 노출해야 하는 경우(NEXT_PUBLIC_ 사용 시)
  • 복잡한 비밀회전 정책, 감사 로그가 필요한 엔터프라이즈 환경에서는 더 강력한 비밀관리 솔루션을 사용해야 할 때

실무 체크리스트

  • 로컬 개발: .env.local에 개발 전용 값 유지(버전관리 제외)
  • 대시보드: Vercel Project Settings에서 Environment 별로 값 설정(Development/Preview/Production)
  • 공개 변수 검증: NEXT_PUBLIC_ 접두사가 붙는 변수는 클라이언트 번들에 포함되는지 확인
  • 빌드 테스트: 값 변경 후 Preview 배포로 빌드 로그와 런타임 동작 확인
  • 비밀 회전: 주기적으로 시크릿 교체 계획 수립
  • 접근 제어: Vercel 팀 권한과 대시보드 접근 통제

성능·보안·운영 주의점

  • 성능: 빌드 타임 환경변수 변경은 전체 재배포를 유발할 수 있습니다. 잦은 변경은 빌드 비용과 지연을 증가시킵니다.
  • 보안: 민감 정보는 절대 NEXT_PUBLIC_ 접두사로 노출하지 마십시오. 가능한 경우 암호화된 시크릿 관리(외부 서비스 사용)를 고려하세요.
  • 운영: 자동화된 배포 파이프라인에서 환경변수를 하드코딩하지 말고 Vercel 환경변수 또는 CI 시크릿으로 주입하세요.

추가 팁: 보안 강화

  • Rotate keys: 주기적 키 회전 정책 수립
  • Audit: 누가 시크릿을 추가·변경했는지 로그 기록(팀 권한 활용)
  • Least privilege: 접근 권한 최소화

vercel 환경변수 설정 실무 고려 사항 예시

  • 빌드 시점에 필요한 값과 런타임 시점에 필요한 값을 구분하세요. 정적 빌드 시에는 빌드 타임 변수만 반영됩니다.
  • Preview 환경에 테스트용 토큰을 넣어 실제 데이터를 건드리지 않도록 하세요.

자주 묻는 질문

Q: Vercel 환경변수는 어디에 저장되나요? A: Vercel 대시보드의 Project Settings에 암호화되어 저장되며, 빌드 및 런타임 시 필요한 값만 노출됩니다.

Q: NEXT_PUBLIC_ 접두사는 무엇을 의미하나요? A: NEXT_PUBLIC_ 로 시작하는 변수는 클라이언트 번들에 포함되어 브라우저에서 접근 가능합니다. 민감 정보는 제외해야 합니다.

Q: 환경변수 변경 후 배포가 필요할까요? A: 빌드 타임에 사용되는 변수는 변경 시 전체 재빌드(재배포)가 필요합니다. 런타임에서만 참조하는 서버리스 함수 변수는 재배포 없이 바로 적용될 수 있지만, Vercel의 동작에 따라 달라질 수 있습니다.

Q: 여러 프로젝트에서 같은 시크릿을 공유해도 될까요? A: 보안상 권장하지 않습니다. 프로젝트별로 분리하거나 중앙 비밀관리 시스템을 사용하는 것이 안전합니다.

정리

  • vercel 환경변수 설정으로 개발/스테이징/프로덕션을 명확히 분리하세요.
  • NEXT_PUBLIC_ 접두사는 클라이언트 노출용, 민감값은 사용 금지.
  • 변경 시 빌드 영향과 보안 위험을 고려해 체크리스트를 따르세요.
  • 필요 시 외부 비밀관리 솔루션 도입을 검토하세요.