|
1 | 1 | # Environment Variables Setup Guide |
2 | 2 |
|
3 | | -## Structure |
| 3 | +## Architecture Decision |
| 4 | + |
| 5 | +### Why Only .env.development and .env.production? |
| 6 | + |
| 7 | +**문제점**: Next.js는 production 빌드 시 `.env.preview`를 인식하지 않습니다. Vercel Integration의 preview 배포도 `NODE_ENV=production`으로 빌드되기 때문에 `.env.production`을 로드합니다. |
| 8 | + |
| 9 | +**해결 방안**: |
| 10 | +1. ❌ `.env.preview` 파일 사용 → Next.js가 인식하지 못함 |
| 11 | +2. ✅ **Vercel 대시보드에서 환경 변수 관리** (채택) |
| 12 | + - Preview 환경: stage API 설정 |
| 13 | + - Production 환경: production API 설정 (또는 파일 사용) |
| 14 | + |
| 15 | +**장점**: |
| 16 | +- 환경별로 명확한 값 관리 가능 |
| 17 | +- 파일 기반 `.env`는 로컬 개발용으로만 사용 |
| 18 | +- Vercel의 환경 변수가 파일보다 우선순위가 높아 배포 시 정확히 적용됨 |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## File Structure |
4 | 23 |
|
5 | 24 | ### `.env` |
6 | | -- **용도**: 모든 환경의 공통 설정 |
| 25 | +- **용도**: 모든 환경의 공통 기본값 |
7 | 26 | - **커밋**: ✅ Git에 포함 |
8 | | -- **내용**: 공통 값만 (CURRENT_TERM, IMAGE_URL, GOOGLE_MAPS_KEY 등) |
| 27 | +- **내용**: 공통 설정 (CURRENT_TERM, IMAGE_URL 등) |
9 | 28 |
|
10 | 29 | ### `.env.development` |
11 | 30 | - **용도**: 로컬 개발 환경 (`npm run dev`) |
12 | 31 | - **커밋**: ✅ Git에 포함 |
13 | 32 | - **내용**: localhost:3000, stage API, 로컬스토리지 로그인 |
14 | 33 |
|
15 | | -### `.env.preview` |
16 | | -- **용도**: Vercel Preview 배포 (PR) |
17 | | -- **커밋**: ✅ Git에 포함 |
18 | | -- **내용**: stage 도메인, stage API, 쿠키 로그인 |
19 | | - |
20 | 34 | ### `.env.production` |
21 | | -- **용도**: Production 배포 |
| 35 | +- **용도**: Production 배포 참고용 |
22 | 36 | - **커밋**: ✅ Git에 포함 |
23 | | -- **내용**: production 도메인, production API, 쿠키 로그인 |
| 37 | +- **사용**: release.yml의 `--build-env` 플래그로 값 주입 시 참고 |
24 | 38 |
|
25 | | -### `.env.local` (권장) |
| 39 | +### `.env.local` (옵션) |
26 | 40 | - **용도**: 개발자별 로컬 설정 |
27 | 41 | - **커밋**: ❌ Git에서 제외 (.gitignore) |
28 | | -- **내용**: 로컬 API 서버, 개인 테스트 키 등 |
| 42 | +- **사용**: 개인 테스트 키, 로컬 API 서버 등 |
| 43 | + |
| 44 | +--- |
29 | 45 |
|
30 | 46 | ## Deployment Flow |
31 | 47 |
|
32 | 48 | ### 1. 로컬 개발 (`npm run dev`) |
| 49 | +- `NODE_ENV=development` |
33 | 50 | - `.env.development` 사용 |
34 | 51 | - localhost:3000, stage API |
35 | 52 |
|
36 | 53 | ### 2. PR/Preview (Vercel Integration) |
37 | | -- `.env.preview` 사용 |
| 54 | +- `NODE_ENV=production` (빌드) |
| 55 | +- **Vercel Preview 환경 변수** 사용 ⭐ |
38 | 56 | - stage 도메인, stage API |
| 57 | +- ⚠️ `.env.preview`는 Next.js가 인식하지 않으므로 사용 불가 |
39 | 58 |
|
40 | 59 | ### 3. Main 브랜치 머지 (Vercel Integration) |
41 | | -- `.env.production` 사용 |
| 60 | +- `NODE_ENV=production` (빌드) |
| 61 | +- **Vercel Production 환경 변수** 사용 ⭐ |
42 | 62 | - production 도메인, production API |
43 | 63 |
|
44 | 64 | ### 4. 수동 릴리즈 (release.yml) |
| 65 | +- `NODE_ENV=production` (빌드) |
45 | 66 | - `--build-env` 플래그로 production API 명시적 주입 |
46 | 67 | - GitHub Release 태그 생성 |
47 | 68 |
|
| 69 | +--- |
| 70 | + |
| 71 | +## Vercel Dashboard Setup |
| 72 | + |
| 73 | +### Preview 환경 변수 설정 |
| 74 | +``` |
| 75 | +SENTRY_ENVIRONMENT=preview |
| 76 | +NEXT_PUBLIC_WEB_URL=https://www.stage.solid-connection.com |
| 77 | +NEXT_PUBLIC_API_SERVER_URL=https://api.stage.solid-connection.com |
| 78 | +NEXT_PUBLIC_KAKAO_JS_KEY=c080f1d215a69b47401cda1d7528418a |
| 79 | +``` |
| 80 | + |
| 81 | +### Production 환경 변수 설정 |
| 82 | +``` |
| 83 | +SENTRY_ENVIRONMENT=production |
| 84 | +NEXT_PUBLIC_WEB_URL=https://www.solid-connection.com |
| 85 | +NEXT_PUBLIC_API_SERVER_URL=https://api.solid-connection.com |
| 86 | +NEXT_PUBLIC_KAKAO_JS_KEY=b285223d3e57a6820552018b93805658 |
| 87 | +``` |
| 88 | + |
| 89 | +--- |
| 90 | + |
48 | 91 | ## Best Practices |
49 | 92 |
|
50 | | -1. **환경별 파일 분리** |
51 | | - - 각 환경의 설정을 명확히 분리 |
52 | | - - 공통 설정은 `.env`에만 |
| 93 | +1. **환경별 값은 Vercel 대시보드에서 관리** |
| 94 | + - Preview/Production 환경에서 다른 API를 사용해야 할 때 |
| 95 | + - 파일보다 Vercel 환경 변수가 우선순위가 높음 |
53 | 96 |
|
54 | 97 | 2. **로컬 개발 시 `.env.local` 활용** |
55 | 98 | ```bash |
56 | 99 | # .env.local (gitignore됨) |
57 | 100 | NEXT_PUBLIC_API_SERVER_URL=http://localhost:8080 |
58 | 101 | ``` |
59 | 102 |
|
60 | | -3. **환경별 우선순위 이해** |
61 | | - - `.env.[mode].local` > `.env.[mode]` > `.env.local` > `.env` |
62 | | - - Vercel CLI `--build-env`는 모든 파일보다 우선 |
| 103 | +3. **환경별 우선순위** |
| 104 | + - Vercel 환경 변수 > Vercel CLI `--build-env` > `.env.production` > `.env.local` > `.env.development` > `.env` |
| 105 | + |
| 106 | +4. **`.env.preview`를 사용하지 않는 이유** |
| 107 | + - Next.js는 production 빌드 시 `.env.preview`를 로드하지 않음 |
| 108 | + - Vercel의 preview 배포도 `NODE_ENV=production`으로 빌드됨 |
| 109 | + - 대신 Vercel 대시보드의 Preview 환경 변수 사용 |
0 commit comments