새발블로그

프론트엔드 환경변수(.env) 관리, 우선순위 본문

Client

프론트엔드 환경변수(.env) 관리, 우선순위

EUG 2025. 10. 7. 16:16

1. 환경변수가 뭐길래?

환경변수(Environment Variable)는 빌드 시점에 코드에 주입되는 설정값이에요.
API 서버 주소, 서비스 이름, Firebase 키처럼 환경마다 달라지는 값을 코드에 직접 하드코딩하지 않기 위해 사용합니다.

 

2. .env 파일 구조와 우선순위

프론트엔드 빌드 도구들은 대부분 dotenv 규칙을 따릅니다. 즉, 파일명이 아래 순서로 있으면 뒤의 파일이 앞의 파일을 덮어씁니다.

우선순위 파일명 설명
1 .env 공통 설정 (모든 모드 공용)
2 .env.local 로컬 전용 (Git에 올리지 않음)
3 .env.[mode] 특정 모드용 (development, production 등)
4 .env.[mode].local 특정 모드 + 로컬용 (가장 높은 우선순위)

 

개발 시 적용 순서

.env → .env.local → .env.development → .env.development.local

 

3. 실행 모드(mode)

각 프레임워크는 명령어에 따라 기본 mode를 지정합니다.

명령어 mode 예시 적용 파일
npm run dev development .env,
.env.local,
.env.development,
.env.development.local
npm run build production .env,
.env.local,
.env.production,
.env.production.local

필요하다면 직접 지정도 가능

vite build --mode staging
next build --mode staging # 일부 프레임워크는 환경 변수만 바꿔서 실행

4. 프레임워크별 “접두사(prefix)” 규칙

보안상의 이유로, 클라이언트 코드(브라우저) 에 노출될 수 있는 환경변수는 각 프레임워크별로 특정 접두사(prefix) 를 강제합니다.

프레임워크 접두사 접근방법 비고
Vite VITE_ import.meta.env.VITE_XXX VITE_만 클라이언트 접근 가능
Create React App REACT_APP_ process.env.REACT_APP_XXX CRA 빌드 시점에 주입
Next.js NEXT_PUBLIC_ process.env.NEXT_PUBLIC_XXX NEXT_PUBLIC_만 브라우저에 노출
Nuxt.js NUXT_PUBLIC_ process.env.NUXT_PUBLIC_XXX 서버/클라이언트 구분
SvelteKit PUBLIC_ import.meta.env.PUBLIC_XXX 서버 변수는 PRIVATE_으로 관리

 

공통 원칙

  • 서버에서만 필요한 변수(API key 등)는 접두사 없음
  • 클라이언트에 노출되어야 하는 변수만 접두사 붙임
  • 브라우저에서 console.log(import.meta.env) 하면 노출 범위를 직접 확인 가능

5. Git 관리와 보안

 

  • .env : 기본값만 (공유 가능)
  • .env.local, .env.*.local : 절대 커밋 금지 (API 키 등 민감한 정보)
# local env files
.env.local
.env.*.local

 

 

6. 실제 예시 (Vite 기준)

# .env
VITE_APP_NAME=BankLab
VITE_API_BASE_URL=https://api.banklab.kr

# .env.development
VITE_API_BASE_URL=http://localhost:8080

# .env.local
VITE_DEV_TOKEN=dev-only-token-123
console.log(import.meta.env.VITE_APP_NAME); // BankLab
console.log(import.meta.env.VITE_API_BASE_URL); // http://localhost:8080
console.log(import.meta.env.VITE_DEV_TOKEN); // dev-only-token-123

7. 자주 하는 실수 정리

실수 해결방법
.env.local 적용이 안 됨 mode가 맞는 .env.[mode].local인지 확인
API_KEY가 undefined로 나옴 접두사(VITE_, NEXT_PUBLIC_ 등) 추가
env 수정했는데 반영 안 됨 개발 서버 재시작 필요
Git에 키가 올라감 .gitignore 설정 누락 확인

'Client' 카테고리의 다른 글

이벤트 전파 단계와 e.target vs e.currentTarget  (0) 2025.03.22
용어 정리  (0) 2025.03.15
웹 서버 vs 웹 애플리케이션 서버(WAS)  (0) 2025.03.15
SPA  (0) 2025.03.15
JSON이란?  (1) 2025.03.15