# .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 ``` ## 문제 해결 ### 문제: 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` 파일을 생성하여 사용하면 됩니다.