Menu
CoddyTech

프로덕션용 정적 파일

Coddy Django 여정의 JSON API 섹션에 포함된 레슨. 19개 중 19번째.

프로덕션 환경에서는 Gunicorn 같은 프로그램이 runserver 대신 Django를 실행하며, app.js 같은 정적 파일을 제공하지 않습니다. 정적 파일은 웹 서버나 WhiteNoise 같은 패키지가 하나의 폴더에서 제공합니다.

그 폴더는 절대 경로인 STATIC_ROOT입니다. python manage.py collectstatic은 각 앱의 static/ 파일을 모두 이 폴더로 복사하며, 배포할 때마다 실행합니다. STATIC_ROOT가 없으면 ImproperlyConfigured 오류와 함께 실행이 중단됩니다.

설정에서 경로는 manage.py가 있는 폴더인 BASE_DIR을 기준으로 pathlib의 / 연산자를 사용해 만듭니다. 사이트의 내보내기 파일을 저장할 폴더는 다음과 같습니다.

EXPORTS_DIR = BASE_DIR / "data" / "exports"

서비스를 시작하기 전에 python manage.py check --deploy를 실행하면 준비되지 않은 설정이 표시됩니다.

challenge icon

챌린지

쉬움

mysite/settings.py에서 STATIC_URL 아래에 STATIC_ROOT를 manage.py와 같은 위치에 있는 staticfiles 폴더를 가리키는 절대 경로로 설정하세요.

Shell 탭에서 아래 줄을 실행하세요. 그러면 127 static files copied와 같은 줄이 출력됩니다. 대부분은 관리자 페이지의 정적 파일이며, 그중에 tasks/app.js도 있습니다.

from django.core.management import call_command; call_command("collectstatic", interactive=False)

직접 해보기

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "django-insecure-change-me")
DEBUG = os.environ.get("DJANGO_DEBUG", "False") == "True"
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "localhost,127.0.0.1").split(",")

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "tasks",
]

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

ROOT_URLCONF = "mysite.urls"

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}

LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True

STATIC_URL = "static/"
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

JSON API의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드