피드로 돌아가기
Stop Putting Everything in settings.py
Dev.toDev.to
Backend

Environment Split 설계를 통한 Production 보안 사고 원천 차단

Stop Putting Everything in settings.py

Houssem Reggai2026년 4월 12일4intermediate

Context

단일 settings.py 파일 내 조건문 기반 환경 분리로 인한 설정 혼선 및 SECRET_KEY 유출 위험 상존. 환경별 설정값이 Version Control에 포함되어 보안 취약점 및 휴먼 에러 가능성이 높은 구조적 한계 노출.

Technical Solution

  • config/settings/ 디렉토리 하위에 base, local, production, test 4개 파일로 책임 분리하는 구조 설계
  • base.py에 공통 설정 및 django-environ을 통한 환경 변수 주입 로직을 구현하여 코드와 설정의 완전 분리
  • local.py에서 DEBUG=True 및 SQLite 등 개발 편의성을 위한 Override 설정 적용
  • production.py에서 HTTPS 강제화 및 S3 저장소, Structured Logging 등 고가용성/보안 설정 전담
  • .env.example 파일을 통한 필수 환경 변수 명세화 및 .gitignore 설정을 통한 Secret 유출 방지
  • python manage.py check --deploy 명령어를 CI 파이프라인에 통합하여 배포 전 보안 설정 자동 검증

1. settings.py를 4개 파일(base, local, production, test)로 분리했는가

2. 모든 Secret 및 Credential이 .env 파일과 환경 변수를 통해 주입되는가

3. .env.example 파일을 통해 팀 내 환경 변수 명세가 공유되고 있는가

4. CI/CD 파이프라인에 check --deploy 단계가 포함되어 설정 오류를 사전 차단하는가

5. Git History에 유출된 SECRET_KEY가 있는지 확인하고 필요 시 Rotate를 수행했는가

원문 읽기