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