Files
sam-react-prod/claudedocs/[REF] production-deployment-checklist.md
byeongcheolryu 2307b1f2c0 [docs]: 프로젝트 문서 추가
세부 항목:
- 인증 및 미들웨어 구현 가이드
- 품목 관리 마이그레이션 가이드
- API 분석 및 요구사항 문서
- 대시보드 통합 완료 문서
- 브라우저 호환성 및 쿠키 처리 가이드
- Next.js 15 마이그레이션 참고 문서

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 21:17:43 +09:00

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주 전