이 프로젝트는 모노레포 구조로 web과 admin 앱을 포함합니다:
- apps/web: Next.js 기반 웹 애플리케이션 (
NEXT_PUBLIC_*환경 변수) - apps/admin: Vite 기반 어드민 애플리케이션 (
VITE_*환경 변수)
각 앱은 독립적인 환경 변수를 가지며, 공통 빌드 도구 설정은 packages/config에서 관리됩니다.
문제점: Next.js는 production 빌드 시 .env.preview를 인식하지 않습니다. Vercel Integration의 preview 배포도 NODE_ENV=production으로 빌드되기 때문에 .env.production을 로드합니다.
해결 방안:
- ❌
.env.preview파일 사용 → Next.js가 인식하지 못함 - ✅ Vercel 대시보드에서 환경 변수 관리 (채택)
- Preview 환경: stage API 설정
- Production 환경: production API 설정 (또는 파일 사용)
장점:
- 환경별로 명확한 값 관리 가능
- 파일 기반
.env는 로컬 개발용으로만 사용 - Vercel의 환경 변수가 파일보다 우선순위가 높아 배포 시 정확히 적용됨
- 용도: 모든 환경의 공통 기본값
- 커밋: ✅ Git에 포함
- 내용: 공통 설정 (IMAGE_URL 등)
- 용도: 로컬 개발 환경 (
npm run dev) - 커밋: ✅ Git에 포함
- 내용: localhost:3000, stage API, 로컬스토리지 로그인
- 용도: Production 배포 참고용
- 커밋: ✅ Git에 포함
- 사용: release.yml의
--build-env플래그로 값 주입 시 참고
- 용도: 개발자별 로컬 설정
- 커밋: ❌ Git에서 제외 (.gitignore)
- 사용: 개인 테스트 키, 로컬 API 서버 등
NODE_ENV=development.env.development사용- localhost:3000, stage API
NODE_ENV=production(빌드)- Vercel Preview 환경 변수 사용 ⭐
- stage 도메인, stage API
⚠️ .env.preview는 Next.js가 인식하지 않으므로 사용 불가
NODE_ENV=production(빌드)- Vercel Production 환경 변수 사용 ⭐
- production 도메인, production API
NODE_ENV=production(빌드)--build-env플래그로 production API 명시적 주입- GitHub Release 태그 생성
SENTRY_ENVIRONMENT=preview
NEXT_PUBLIC_WEB_URL=https://www.stage.solid-connection.com
NEXT_PUBLIC_API_SERVER_URL=https://api.stage.solid-connection.com
NEXT_PUBLIC_KAKAO_JS_KEY=c080f1d215a69b47401cda1d7528418a
SENTRY_ENVIRONMENT=production
NEXT_PUBLIC_WEB_URL=https://www.solid-connection.com
NEXT_PUBLIC_API_SERVER_URL=https://api.solid-connection.com
NEXT_PUBLIC_KAKAO_JS_KEY=b285223d3e57a6820552018b93805658
-
환경별 값은 Vercel 대시보드에서 관리
- Preview/Production 환경에서 다른 API를 사용해야 할 때
- 파일보다 Vercel 환경 변수가 우선순위가 높음
-
로컬 개발 시
.env.local활용# .env.local (gitignore됨) NEXT_PUBLIC_API_SERVER_URL=http://localhost:8080 -
환경별 우선순위
- Vercel 환경 변수 > Vercel CLI
--build-env>.env.production>.env.local>.env.development>.env
- Vercel 환경 변수 > Vercel CLI
-
.env.preview를 사용하지 않는 이유- Next.js는 production 빌드 시
.env.preview를 로드하지 않음 - Vercel의 preview 배포도
NODE_ENV=production으로 빌드됨 - 대신 Vercel 대시보드의 Preview 환경 변수 사용
- Next.js는 production 빌드 시