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

4.9 KiB

.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

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 파일이 필수입니다!

현재 구조의 장단점

장점

  1. 환경 분리: 로컬과 서버에서 다른 설정 파일 사용 가능
  2. 보안: .env 파일은 Git에 포함되지 않음 (.gitignore에 추가됨)
  3. 유연성: 환경별로 다른 DB 계정, 호스트, 비밀번호 사용 가능
  4. 기본값 제공: .env 파일이 없어도 기본값으로 동작 (단, Docker 환경에서는 문제 발생)

⚠️ 주의사항

  1. Docker 환경: .env 파일이 반드시 필요 (기본값 localhost는 Docker에서 작동하지 않음)
  2. 기본값 불일치: 기본값이 localhost인데 Docker 환경 기본값은 mysql이어야 함
  3. 배포 시: 서버에 .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_HOSTlocalhost로 설정됨

해결:

DB_HOST=mysql

또는 Docker Compose에서 정의한 서비스 이름 사용

문제: 서버에서 DB 연결 실패

원인: .env 파일이 없거나 잘못된 설정

해결:

  1. .env 파일 생성
  2. DB_HOST=localhost 확인
  3. 올바른 DB 사용자 계정 및 비밀번호 설정

문제: Git에 .env 파일이 포함됨

해결: .gitignore.env 추가 확인

.env
.env.*
!.env.example

개선 제안

현재 구조는 올바르게 작동하지만, 다음을 고려할 수 있습니다:

  1. 기본값 개선: Docker 환경 감지하여 기본값을 mysql로 변경
  2. .env.example 파일: 환경 변수 템플릿 제공
  3. 환경 변수 검증: 필수 환경 변수가 없을 때 명확한 에러 메시지

결론: 현재 구조는 로컬과 서버 환경 분리에 적합합니다. 각 환경에 맞는 .env 파일을 생성하여 사용하면 됩니다.