← 전체 강의 목록
M1 · 강의일: 2026-06-08 (FDE 데일리) · 소요: 30분

L01 — Django 프로젝트 구조와 settings 환경 분리

강의일 2026-06-08 (FDE 데일리) · 소요: 30분  ·  소요 30분  ·  FDE 실무 교육

한 줄 목표 — standarda 프로젝트의 폴더 구조(앱들 + 루트 설정 앱)를 읽고, settings 가 base / local / production 으로 갈리는 이유와, 요청이 들어올 때 어떤 설정이 로드되는지 설명할 수 있다.

1. 파일 주고받기 — SFTP / Cyberduck

로컬 컴퓨터와 서버 사이에 파일을 주고받는 방법부터.


2. 서버에 있는 standarda-template / standarda-core


3. Django 프로젝트 구조 — 앱들 + 루트(설정) 앱

템플릿 구조 = 우리 프로젝트 구조다. (.claude/, GitHub 설정, 그리고 cookiecutter{project_slug} 폴더)

{프로젝트명}/            ← 루트 앱 (프로젝트 이름과 동일)
├── settings/           ← ★ 이 앱에만 있다
├── urls.py
├── wsgi.py
└── ...
accounts/  profiles/  projects/  emails/  sms/  export_web/   ← 일반 Django 앱들

4. settings 는 파일이 아니라 "패키지"

settings/
├── __init__.py     # 환경에 따라 무엇을 로드할지 고르는 곳
├── base.py         # 공통 설정
├── local.py        # 개발 환경
└── production.py    # 운영 환경

5. __init__.py — 환경에 따라 무엇을 로드하나

# {프로젝트명}/settings/__init__.py
if os.environ.get('{프로젝트명대문자}_PRODUCTION') == 'True':
    load_dotenv(_BASE_DIR / '.env.production', override=True)
else:
    load_dotenv(_BASE_DIR / '.env', override=True)

from .base import *           # 공통을 먼저 다 가져옴

if os.environ.get('{프로젝트명대문자}_PRODUCTION') == 'True':
    from .production import *  # 운영이면 production 으로 덮어씀
else:
    from .local import *       # 아니면 local

6. .env / .env.example

비밀값(키·비번)은 settings 코드가 아니라 .env(개발) / .env.production(운영) 에 둔다.


7. 왜 dev / prod 를 나누나

.envproduction 을 구분하는 이유는, 개발 환경과 운영 환경이 실제로 다르기 때문이다.

→ 그래서 환경마다 달라지는 값들을 따로따로 관리한다.


8. 요청이 들어오면 무슨 일이 — settings 로딩 흐름

브라우저 (도메인 입력)
  → DNS 가 도메인 → IP 조회        (예: meetings.popupstudio.ai → 43.200.38.93)
  → 그 서버의 포트로 요청 도착       (현재 dev 서버에 배포됨, 예: :8024 에서 Django 가 대기)
  → Django 가 settings/__init__.py 를 "제일 먼저" 읽음
       → os.environ 에서 {프로젝트명대문자}_PRODUCTION 확인
       → 없으면 else → .env + base + local
       → 있으면(True)        → .env.production + base + production

9. base.py 에 들어가는 "공통" 설정

두 환경이 똑같이 쓰는 것은 전부 base.py 에 한 번만 넣는다. 강의에서 짚은 항목:


10. localproduction 은 실제로 뭐가 다른가

반대로 환경마다 달라져야 하는 것만 local.py / production.py 로 갈린다.

항목 local.py (개발) production.py (운영)
SECRET_KEY 개발용 운영용 (달라야 함 — 지금 같은 건 나중에 수정 예정)
DEBUG True (에러가 나면 메시지를 브라우저에 표시) False (운영에선 에러 메시지를 띄우면 안 됨)
ALLOWED_HOSTS localhost + dev 서버 IP 43.200.38.93 + dev 도메인 운영 도메인
CSRF dev 주소 기준 운영 주소 기준 (주소에 따라 체크가 달라짐)
DATABASES dev 서버의 PostgreSQL (포트 5432) 운영 서버의 PostgreSQL

Django 앱은 자기를 서빙하는 IP/도메인으로 들어오는 요청만 처리한다. 그래서 ALLOWED_HOSTS 에 그 주소들이 들어가 있어야 한다.


오늘 정리 + 다음