233 lines
5.8 KiB
Markdown
233 lines
5.8 KiB
Markdown
|
|
# 운영 배포 체크리스트
|
||
|
|
|
||
|
|
**문서 목적**: 로컬/개발 환경에서 운영 환경으로 전환 시 필요한 변경사항 정리
|
||
|
|
**작성일**: 2025-11-07
|
||
|
|
**상태**: 내부 개발용 → 추후 운영 배포 시 참고
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔴 필수 변경 사항 (운영 배포 전 필수)
|
||
|
|
|
||
|
|
### 1. Frontend URL 변경
|
||
|
|
**현재 설정** (로컬 개발용):
|
||
|
|
```bash
|
||
|
|
# .env.local
|
||
|
|
NEXT_PUBLIC_FRONTEND_URL=http://localhost:3000
|
||
|
|
```
|
||
|
|
|
||
|
|
**운영 배포 시 변경**:
|
||
|
|
```bash
|
||
|
|
# .env.production 또는 배포 플랫폼 환경 변수
|
||
|
|
NEXT_PUBLIC_FRONTEND_URL=https://your-production-domain.com
|
||
|
|
# 예시: https://5130.co.kr
|
||
|
|
```
|
||
|
|
|
||
|
|
**영향 범위**:
|
||
|
|
- `src/lib/api/auth/auth-config.ts:8` - CORS 설정
|
||
|
|
- 백엔드 PHP API의 CORS 허용 도메인 추가 필요
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. API Key 보안 강화 ⚠️
|
||
|
|
|
||
|
|
**현재 상태** (내부 개발용):
|
||
|
|
```bash
|
||
|
|
# .env.local
|
||
|
|
NEXT_PUBLIC_API_KEY=42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a
|
||
|
|
```
|
||
|
|
|
||
|
|
**보안 위험**:
|
||
|
|
- `NEXT_PUBLIC_` 접두사로 인해 브라우저에서 API Key 노출
|
||
|
|
- 개발자 도구 → Network/Console에서 키 확인 가능
|
||
|
|
- 클라이언트 측 JavaScript에서 접근 가능
|
||
|
|
|
||
|
|
**운영 배포 시 해결 방안** (택 1):
|
||
|
|
|
||
|
|
#### 방안 A: 서버 전용 API Key로 전환
|
||
|
|
```bash
|
||
|
|
# .env.production (서버 사이드 전용)
|
||
|
|
API_KEY=your-production-secret-key
|
||
|
|
```
|
||
|
|
- `NEXT_PUBLIC_` 접두사 제거
|
||
|
|
- Next.js API Routes에서만 사용
|
||
|
|
- 브라우저 접근 불가
|
||
|
|
|
||
|
|
#### 방안 B: 운영용 별도 Public API Key 발급
|
||
|
|
```bash
|
||
|
|
# PHP 백엔드 팀에 운영용 Public API Key 요청
|
||
|
|
NEXT_PUBLIC_API_KEY=production-public-safe-key
|
||
|
|
```
|
||
|
|
- 제한된 권한으로 발급 (읽기 전용 등)
|
||
|
|
- IP 화이트리스트 적용
|
||
|
|
- Rate Limiting 설정
|
||
|
|
|
||
|
|
**코드 수정 필요 위치**:
|
||
|
|
- `src/lib/api/client.ts:40` - API Key 사용 로직
|
||
|
|
- `.env.example:32` - 문서 불일치 해결
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🟡 권장 변경 사항
|
||
|
|
|
||
|
|
### 3. 백엔드 CORS 설정
|
||
|
|
**PHP API 서버 설정 확인**:
|
||
|
|
```php
|
||
|
|
// Laravel sanctum config 예시
|
||
|
|
'allowed_origins' => [
|
||
|
|
'http://localhost:3000', // 개발
|
||
|
|
'https://5130.co.kr', // 운영 (추가 필요)
|
||
|
|
],
|
||
|
|
```
|
||
|
|
|
||
|
|
**Sanctum 쿠키 도메인**:
|
||
|
|
```php
|
||
|
|
// config/sanctum.php
|
||
|
|
'stateful' => explode(',', env(
|
||
|
|
'SANCTUM_STATEFUL_DOMAINS',
|
||
|
|
'localhost,localhost:3000,127.0.0.1,5130.co.kr'
|
||
|
|
)),
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 4. Next.js 운영 최적화
|
||
|
|
**next.config.ts 추가 권장**:
|
||
|
|
```typescript
|
||
|
|
const nextConfig: NextConfig = {
|
||
|
|
turbopack: {},
|
||
|
|
|
||
|
|
// 운영 환경 추가 설정
|
||
|
|
reactStrictMode: true,
|
||
|
|
poweredByHeader: false, // 보안: X-Powered-By 헤더 제거
|
||
|
|
output: 'standalone', // Docker 배포용
|
||
|
|
compress: true, // Gzip 압축
|
||
|
|
};
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 5. 빌드 스크립트 추가
|
||
|
|
**package.json 추가 권장**:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"scripts": {
|
||
|
|
"dev": "next dev",
|
||
|
|
"build": "next build",
|
||
|
|
"start": "next start",
|
||
|
|
"lint": "eslint",
|
||
|
|
|
||
|
|
// 추가 권장
|
||
|
|
"build:prod": "NODE_ENV=production next build",
|
||
|
|
"type-check": "tsc --noEmit",
|
||
|
|
"lint:fix": "eslint --fix"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🟢 배포 플랫폼별 설정
|
||
|
|
|
||
|
|
### Vercel 배포
|
||
|
|
**프로젝트 설정 → Environment Variables**:
|
||
|
|
```
|
||
|
|
NEXT_PUBLIC_API_URL=https://api.5130.co.kr
|
||
|
|
NEXT_PUBLIC_FRONTEND_URL=https://your-app.vercel.app
|
||
|
|
NEXT_PUBLIC_AUTH_MODE=sanctum
|
||
|
|
API_KEY=<서버 전용 키>
|
||
|
|
```
|
||
|
|
|
||
|
|
### Docker 배포
|
||
|
|
**docker-compose.yml 예시**:
|
||
|
|
```yaml
|
||
|
|
version: '3.8'
|
||
|
|
services:
|
||
|
|
nextjs-app:
|
||
|
|
build: .
|
||
|
|
environment:
|
||
|
|
- NEXT_PUBLIC_API_URL=https://api.5130.co.kr
|
||
|
|
- NEXT_PUBLIC_FRONTEND_URL=https://your-domain.com
|
||
|
|
- API_KEY=${API_KEY}
|
||
|
|
ports:
|
||
|
|
- "3000:3000"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 전통적인 서버 배포
|
||
|
|
**`.env.production` 파일 생성**:
|
||
|
|
```bash
|
||
|
|
NEXT_PUBLIC_API_URL=https://api.5130.co.kr
|
||
|
|
NEXT_PUBLIC_FRONTEND_URL=https://your-domain.com
|
||
|
|
NEXT_PUBLIC_AUTH_MODE=sanctum
|
||
|
|
API_KEY=<서버 전용 키>
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📋 최종 배포 체크리스트
|
||
|
|
|
||
|
|
### 환경 변수
|
||
|
|
- [ ] `NEXT_PUBLIC_FRONTEND_URL` → 운영 도메인으로 변경
|
||
|
|
- [ ] `NEXT_PUBLIC_API_KEY` → 보안 방안 적용 (서버 전용 또는 제한된 Public Key)
|
||
|
|
- [ ] `NEXT_PUBLIC_AUTH_MODE` → `sanctum` 또는 `bearer` 확인
|
||
|
|
- [ ] `.env.local` Git 커밋 안 됨 확인 (`.gitignore:100`)
|
||
|
|
|
||
|
|
### 백엔드 연동
|
||
|
|
- [ ] PHP API CORS 설정에 운영 도메인 추가
|
||
|
|
- [ ] Sanctum 쿠키 도메인 설정 확인
|
||
|
|
- [ ] 운영용 API Key 발급 (필요 시)
|
||
|
|
- [ ] API 엔드포인트 테스트 (`https://api.5130.co.kr`)
|
||
|
|
|
||
|
|
### 빌드 & 테스트
|
||
|
|
- [ ] `npm run build` 로컬 테스트
|
||
|
|
- [ ] `npm run lint` 통과 확인
|
||
|
|
- [ ] `tsc --noEmit` TypeScript 타입 체크
|
||
|
|
- [ ] 브라우저 콘솔 에러 없는지 확인
|
||
|
|
|
||
|
|
### 보안
|
||
|
|
- [ ] API Key 브라우저 노출 문제 해결
|
||
|
|
- [ ] HTTPS 사용 확인
|
||
|
|
- [ ] 민감 정보 환경 변수로 분리
|
||
|
|
- [ ] `X-Powered-By` 헤더 제거 (`poweredByHeader: false`)
|
||
|
|
|
||
|
|
### 성능
|
||
|
|
- [ ] 이미지 최적화 (Next.js Image 컴포넌트 사용)
|
||
|
|
- [ ] 번들 사이즈 확인 (`npm run build` 출력 확인)
|
||
|
|
- [ ] Gzip/Brotli 압축 활성화
|
||
|
|
- [ ] CDN 설정 (필요 시)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 현재 상태 (2025-11-07)
|
||
|
|
|
||
|
|
**개발 환경**:
|
||
|
|
- ✅ API URL: `https://api.5130.co.kr` (운영 API 사용 중)
|
||
|
|
- ⚠️ Frontend URL: `http://localhost:3000` (로컬)
|
||
|
|
- ⚠️ API Key: `NEXT_PUBLIC_API_KEY` (브라우저 노출)
|
||
|
|
- ✅ Auth Mode: `sanctum` (쿠키 기반 인증)
|
||
|
|
|
||
|
|
**내부 개발용 사용 중**:
|
||
|
|
- 현재는 개발/테스트 목적으로 API Key 노출 허용
|
||
|
|
- 운영 배포 시 반드시 위 체크리스트 검토 필요
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📌 참고 문서
|
||
|
|
|
||
|
|
- `claudedocs/api-key-management.md` - API Key 관리 가이드
|
||
|
|
- `claudedocs/authentication-design.md` - 인증 시스템 설계
|
||
|
|
- `claudedocs/authentication-implementation-guide.md` - 구현 가이드
|
||
|
|
- `.env.example` - 환경 변수 템플릿
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📞 배포 전 확인 담당
|
||
|
|
|
||
|
|
- **API Key 발급**: PHP 백엔드 팀
|
||
|
|
- **CORS 설정**: PHP 백엔드 팀
|
||
|
|
- **인프라 설정**: DevOps 팀
|
||
|
|
- **보안 검토**: 보안 담당자
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**마지막 업데이트**: 2025-11-07
|
||
|
|
**다음 검토 예정**: 운영 배포 1주 전
|