Files
sam-sales/ENV_SETUP_GUIDE.md
2026-01-06 09:11:45 +09:00

198 lines
4.9 KiB
Markdown

# .env 파일 설정 가이드 (로컬/서버 환경 분리)
## 현재 구조
프로젝트는 `.env` 파일을 사용하여 데이터베이스 연결 정보를 관리합니다.
### 파일 구조
```
sales/
├── .env # 환경별 설정 파일 (Git에 포함되지 않음)
├── session.php # .env 파일 로드
└── lib/mydb.php # DB 연결 (session.php에서 로드된 .env 사용)
```
### 코드 동작 방식
1. **session.php**: 프로젝트 루트의 `.env` 파일을 읽어 `$_ENV` 배열에 저장
2. **lib/mydb.php**: `$_ENV` 배열에서 DB 연결 정보를 읽어옴 (기본값 제공)
## 환경별 설정
### 로컬 개발 환경 (Docker)
**파일 위치**: `C:\Users\aweso\sam\sales\.env`
```env
DB_HOST=sam-mysql-1
DB_NAME=chandj
DB_USER=root
DB_PASS=root
```
또는 Docker Compose 서비스 이름 사용:
```env
DB_HOST=mysql
DB_NAME=chandj
DB_USER=root
DB_PASS=root
```
**중요 사항**:
- Docker 네트워크에서 MySQL 컨테이너는 서비스 이름(`mysql`) 또는 컨테이너 이름(`sam-mysql-1`)으로 접근
- `localhost`를 사용하면 Docker 컨테이너 내부의 localhost를 가리켜 연결 실패
### 서버 환경 (실서버)
**파일 위치**: `/home/webservice/sales/.env`
```env
DB_HOST=localhost
DB_NAME=chandj
DB_USER=codebridge
DB_PASS=실제비밀번호
APP_URL=https://sales.codebridge-x.com/
DOCUMENT_ROOT=/home/webservice/sales
```
**중요 사항**:
- 서버에서는 MySQL이 같은 서버에 설치되어 있으므로 `localhost` 사용
- 보안상 `root` 계정 대신 전용 계정(`codebridge`) 사용
## 기본값 (Fallback)
`.env` 파일이 없거나 값이 설정되지 않은 경우 `lib/mydb.php`의 기본값이 사용됩니다:
```php
$db_host = $_ENV['DB_HOST'] ?? 'localhost'; // 기본값: localhost
$db_name = $_ENV['DB_NAME'] ?? 'chandj';
$db_user = $_ENV['DB_USER'] ?? 'root';
$db_pass = $_ENV['DB_PASS'] ?? 'root';
```
**주의**: 기본값이 `localhost`인데, Docker 환경에서는 `.env` 파일이 필수입니다!
## 현재 구조의 장단점
### ✅ 장점
1. **환경 분리**: 로컬과 서버에서 다른 설정 파일 사용 가능
2. **보안**: `.env` 파일은 Git에 포함되지 않음 (`.gitignore`에 추가됨)
3. **유연성**: 환경별로 다른 DB 계정, 호스트, 비밀번호 사용 가능
4. **기본값 제공**: `.env` 파일이 없어도 기본값으로 동작 (단, Docker 환경에서는 문제 발생)
### ⚠️ 주의사항
1. **Docker 환경**: `.env` 파일이 반드시 필요 (기본값 `localhost`는 Docker에서 작동하지 않음)
2. **기본값 불일치**: 기본값이 `localhost`인데 Docker 환경 기본값은 `mysql`이어야 함
3. **배포 시**: 서버에 `.env` 파일을 수동으로 생성해야 함
## 권장 설정
### 로컬 개발 환경
`.env` 파일 생성 (필수):
```env
DB_HOST=mysql
DB_NAME=chandj
DB_USER=root
DB_PASS=root
```
### 서버 환경
`.env` 파일 생성 (필수):
```env
DB_HOST=localhost
DB_NAME=chandj
DB_USER=codebridge
DB_PASS=실제비밀번호
APP_URL=https://sales.codebridge-x.com/
DOCUMENT_ROOT=/home/webservice/sales
```
## 확인 방법
### 로컬에서 .env 파일 확인
```powershell
# Windows PowerShell
cd C:\Users\aweso\sam\sales
Get-Content .env
# 또는 파일이 있는지 확인
Test-Path .env
```
### 서버에서 .env 파일 확인
```bash
cd /home/webservice/sales
cat .env
# 또는 파일이 있는지 확인
test -f .env && echo "존재함" || echo "없음"
```
### PHP에서 현재 설정 확인
임시 파일 생성 (`check_env.php`):
```php
<?php
require_once 'session.php';
echo "DB_HOST: " . ($_ENV['DB_HOST'] ?? '기본값 사용') . "\n";
echo "DB_NAME: " . ($_ENV['DB_NAME'] ?? '기본값 사용') . "\n";
echo "DB_USER: " . ($_ENV['DB_USER'] ?? '기본값 사용') . "\n";
?>
```
## 문제 해결
### 문제: Docker 환경에서 DB 연결 실패
**원인**: `.env` 파일이 없거나 `DB_HOST``localhost`로 설정됨
**해결**:
```env
DB_HOST=mysql
```
또는 Docker Compose에서 정의한 서비스 이름 사용
### 문제: 서버에서 DB 연결 실패
**원인**: `.env` 파일이 없거나 잘못된 설정
**해결**:
1. `.env` 파일 생성
2. `DB_HOST=localhost` 확인
3. 올바른 DB 사용자 계정 및 비밀번호 설정
### 문제: Git에 .env 파일이 포함됨
**해결**: `.gitignore``.env` 추가 확인
```gitignore
.env
.env.*
!.env.example
```
## 개선 제안
현재 구조는 올바르게 작동하지만, 다음을 고려할 수 있습니다:
1. **기본값 개선**: Docker 환경 감지하여 기본값을 `mysql`로 변경
2. **.env.example 파일**: 환경 변수 템플릿 제공
3. **환경 변수 검증**: 필수 환경 변수가 없을 때 명확한 에러 메시지
---
**결론**: 현재 구조는 로컬과 서버 환경 분리에 적합합니다. 각 환경에 맞는 `.env` 파일을 생성하여 사용하면 됩니다.