1. 환경변수 로드 순서 : 우선순위 (높음 -> 낮음)
- 시스템 환경 변수
- .env.$(NODE_ENV).local
- .env.local (.env.test.local 제외)
- .env.$(NODE_ENV)
- .env
$(NODE_ENV)는
npm run dev
npm run build / npm run start
npm test 에 따라 자동으로 할당되는 값이며
일반적으로 development, production, test 세가지 값을 가질 수 있습니다.
그래서
# 개발 환경에서 실행 시 우선순위
1. .env.development.local
2. .env.local
3. .env.development
4. .env
# 프로덕션 환경에서 실행 시 우선순위
1. .env.production.local
2. .env.local
3. .env.production
4. .env
이런 순서로 실행이 됩니다
2. 환경변수 파일별특징
1) .env.local
- 가장 높은 우선순위의 로컬 오버라이드
- 로컬 환경에서만 사용되는 값
- git에 커밋되지 않아야 함 (보통 .gitignore에 포함)
- 개인적인 환경 설정이나 시크릿 키 저장에 적합
- 테스트(NODE_ENV=test)에서는 무시됨
2) .env.development
- 개발 환경(npm run dev)에서만 사용
- 팀원들과 공유해야 하는 개발 환경 설정
3) .env.production
- 프로덕션 환경(npm run build, npm run start)에서만 사용
- 실제 서비스에 필요한 환경 설정
4) .env.test
- 테스트 환경 전용
- .env.local 무시 (테스트 재현성)
- Vitest, Cypress 등 테스트 도구에서 사용
5) .env
- 모든 환경의 공통 기본값
- git에 커밋 가능
- 가장 낮은 우선순위
3. 환경 변수 접두사 규칙
NEXT_PUBLIC_ 접두사가 있는 경우
- 클라이언트와 서버 모두 접근 가능
- 빌드 시 실제 값으로 대체됨
- 공개해도 괜찮은 값에만 사용
NEXT_PUBLIC_API_URL=https://api.example.com
NEXT_PUBLIC_GA_ID=GA123456
주의 !! = 뒤에는 따옴표가 없습니다
NEXT_PUBLIC_ 접두사가 없는 경우
- 서버 사이드에서만 접근 가능
- 클라이언트에서 접근 불가
- 보안이 중요한 값에 사용
DATABASE_URL=postgresql://...
API_SECRET_KEY=xxx
4. 환경 변수 접근 방법
서버 컴포넌트에서
// 모든 환경 변수 접근 가능
console.log(process.env.DATABASE_URL)
console.log(process.env.NEXT_PUBLIC_API_URL)
클라이언트 컴포넌트에서
// NEXT_PUBLIC_ 접두사 있는 변수만 접근 가능
console.log(process.env.NEXT_PUBLIC_API_URL)
5. .gitignore 설정
# 로컬 환경 변수
.env*.local
# 버전 관리에서 제외할 환경 변수 파일
.env
.env.development
.env.test
.env.production
'NEXT.js' 카테고리의 다른 글
[Next.js] Next.js 프로젝트에 Vitest + React Testing Library 설정하기 (React 19, Next 15, TS) (0) | 2025.01.06 |
---|---|
[Next.js] redirect 함수, notFound 함수는 try/catch 밖에서 사용해야 합니다 (0) | 2025.01.04 |
[Next.js] layout.js 와 templete.js 의 차이점 (0) | 2025.01.02 |
[Next.js] Server Actions 시 놓치면 안되는 revalidatePath, revalidateTag ( 데이터 캐시 관리) (0) | 2024.11.29 |
[Next.js] react 와 next의 form submit 차이( Server Actions 시 ) (0) | 2024.11.28 |