상위 목록: 하위 목록: 작성 날짜: 읽는 데 9 분 소요

Django settings.py 설정

장고(Django)의 환경 설정은 settings.py 파일에서 관리할 수 있습니다.

환경 설정에서 데이터베이스, 디버그 모드, 허용 가능한 호스트, 애플리케이션, 다국어 및 지역 시간 등을 설정할 수 있습니다.

settings.py 파일의 설정이 올바르지 않거나, 필요한 구성이 누락되었다면 정상적으로 실행되지 않습니다.

장고의 기본적인 설정 파일의 구성은 다음과 같습니다.


"""
Django settings for daehee project.

Generated by 'django-admin startproject' using Django 6.1.2.

For more information on this file, see
https://docs.djangoproject.com/en/6.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/6.1/ref/settings/
"""

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/6.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '비밀 키'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

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

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 = 'daehee.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',
            ],
        },
    },
]

WSGI_APPLICATION = 'daehee.wsgi.application'


# Database
# https://docs.djangoproject.com/en/6.1/ref/settings/#databases

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


# Password validation
# https://docs.djangoproject.com/en/6.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/6.1/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/6.1/howto/static-files/

STATIC_URL = 'static/'


# Email
# https://docs.djangoproject.com/en/6.1/topics/email/#topic-email-configuration

MAILERS = {
    'default': {
        'BACKEND': 'django.core.mail.backends.console.EmailBackend',
    },
}



기본 디렉토리 경로

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

기본 디렉토리 경로는 BASE_DIR로 나타냅니다.

settings.py 파일의 상위 폴더의 상위 폴더, 즉 manage.py가 위치한 프로젝트 최상위 경로를 의미합니다.

BASE_DIR은 pathlib.Path 객체이므로, BASE_DIR / 'templates'처럼 슬래시(/) 연산자로 하위 경로를 만들 수 있습니다.

BASE_DIR은 임의적으로 디렉토리 구조를 수정한 경우가 아니라면 수정하지 않습니다.

  • Tip : 예전 버전의 장고는 os.path.join(BASE_DIR, 'templates')처럼 os.path 모듈을 사용했습니다. 현재 버전은 pathlib을 사용합니다.



비밀 키

SECRET_KEY = '비밀 키'

SECRET_KEY는 프로젝트를 생성할 때 무작위의 50 글자로 만들어지며, 암호화 서명(Cryptographic signing), 세션 데이터, 비밀번호 초기화 토큰, CSRF 토큰 등에 사용됩니다.

SECRET_KEY는 노출되어서는 안되며, SECRET_KEY 키가 노출되었을 때는 보안 기능이 상실되므로, 새로운 SECRET_KEY를 사용해야 합니다.

startproject로 생성된 키는 django-insecure-로 시작하며, 개발용으로만 사용해야 한다는 의미입니다.

SECRET_KEY의 값은 코드와 분리해서 사용하며, 크게 환경 변수에 등록하거나 비밀 파일로 저장해 사용합니다.


비밀 키 분리 방법 (1)

import os

SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]

환경 변수에 비밀 키를 등록해서 사용할 수 있습니다.

Windows의 경우에는 명령 프롬프트의 set이나 PowerShell의 $env:DJANGO_SECRET_KEY="..."로, Mac이나 Linux는 터미널의 export 명령어로 등록할 수 있습니다.

영구적으로 등록하려면 .bashrc, .zshrc, .profile 등에 등록합니다.


비밀 키 분리 방법 (2)

from keyfile import secret_key

SECRET_KEY = secret_key

간단하게 *.py 파일을 생성한 다음, 변수로 등록해 사용하거나, json 파일에 SECRET_KEY 값을 저장한 다음 불러와 사용할 수 있습니다.

이때, git과 같은 버전관리 시스템을 사용한다면, .gitignore에 해당 파일을 추가해 저장되지 않도록 합니다.


새로운 비밀 키 생성

from django.core.management.utils import get_random_secret_key

print(get_random_secret_key())

비밀 키가 노출되었거나 운영 환경용 키가 필요하다면, get_random_secret_key() 함수로 새로운 비밀 키를 생성할 수 있습니다.



디버그 모드

DEBUG = True

디버그 모드는 프로그램을 개발할 때 사용되는 모드입니다.

True로 설정되어 있다면, 오류가 발생했을 때 추적 정보(Traceback), 설정값, 요청 정보 등이 포함된 상세한 오류 페이지를 표시합니다.

상세한 오류 페이지에는 내부 정보가 노출될 수 있습니다.

개발이 완료되고 운영 서버 등에 배포할 때는 필히 디버그 모드를 False로 사용해야 합니다.

  • Tip : DEBUG = False일 때는 runserver가 정적 파일(CSS, JavaScript 등)을 제공하지 않으므로, 웹 서버나 whitenoise 같은 패키지로 정적 파일을 제공해야 합니다.

  • Tip : python manage.py check --deploy 명령어로 운영 환경 배포 전에 보안 설정을 점검할 수 있습니다.



허용 가능한 호스트

ALLOWED_HOSTS = []

허용 가능한 호스트는 운영 서버 등에 배포하여, 서비스할 때 호스트로 사용 가능한 호스트 또는 도메인 목록입니다.

요청의 Host 헤더가 목록에 등록되어 있지 않다면, Bad Request (400)를 반환합니다.

해당 기능은 HTTP Host 헤더 공격을 막기 위한 조치입니다.

DEBUG = True이고 ALLOWED_HOSTS가 비어 있다면, localhost, 127.0.0.1, [::1]이 자동으로 허용됩니다.

DEBUG = False라면 서비스하는 도메인을 반드시 등록해야 정상적으로 동작합니다. 구성은 아래와 같이 사용할 수 있습니다.

ALLOWED_HOSTS = ['localhost', '127.0.0.1', '076923.github.io']

DEBUG = False인 상태에서 ALLOWED_HOSTS가 비어 있다면, CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.의 오류를 반환하며 manage.py runserver가 작동하지 않습니다.

  • Tip : .076923.github.io처럼 온점(.)으로 시작하면 해당 도메인과 모든 하위 도메인을 허용합니다.

  • Tip : 모든 호스트를 허용한다면 ALLOWED_HOSTS = ['*']으로 설정합니다. 단, 운영 환경에서는 보안상 권장하지 않습니다.



설치된 애플리케이션

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

현재 장고 프로젝트에 설치된 애플리케이션의 목록을 의미합니다.

애플리케이션을 등록하지 않는다면 서비스에서 사용할 수 없습니다.

현재 프로젝트는 REST Framework와 CORS 패키지를 등록할 예정이므로 아래와 같이 추가합니다.


애플리케이션 등록

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    # '앞으로 추가할 애플리케이션',
]

rest_framework와 corsheaders는 1강에서 설치한 Django REST Framework와 Django CORS입니다.

해당 애플리케이션을 등록하지 않는다면, 장고 프로젝트에서 위의 기능을 사용할 수 없습니다.

앞으로 추가할 애플리케이션은 startapp 명령어를 통해 생성된 Python 패키지를 의미합니다.

추가되는 애플리케이션은 모두 INSTALLED_APPS 목록에 추가해야합니다.

  • Tip : startapp 명령어는 4강 애플리케이션 생성에서 확인할 수 있습니다.


CORS 허용

CORS_ALLOW_ALL_ORIGINS = False
CORS_ALLOW_CREDENTIALS = False

CORS_ALLOWED_ORIGINS = [
    'http://localhost:3000',
    'https://076923.github.io',
]

CORS 패키지를 등록했다면, 위와 같은 내용을 추가합니다.

CORS_ALLOW_ALL_ORIGINS는 모든 출처(Origin)의 HTTP 요청을 허용합니다. 개발 중에만 True로 사용합니다.

서비스 중인 서버에서는 False로 사용하고, CORS_ALLOWED_ORIGINS에 허용할 출처를 등록합니다.

CORS_ALLOWED_ORIGINS는 사이트 간 요청을 허용하는 출처 목록입니다. 출처는 프로토콜(http, https)을 포함하고, 경로나 마지막 슬래시(/) 없이 작성해야 합니다.

CORS_ALLOW_CREDENTIALS는 쿠키나 인증 헤더를 사이트 간 HTTP 요청에 포함할 수 있는지 설정합니다.

  • Tip : 예전 버전에서 사용하던 CORS_ORIGIN_ALLOW_ALL, CORS_ORIGIN_WHITELIST는 각각 CORS_ALLOW_ALL_ORIGINS, CORS_ALLOWED_ORIGINS로 이름이 변경되었습니다.

  • Tip : CORS_ALLOWED_ORIGIN_REGEXES를 사용하면 정규표현식으로 출처를 허용할 수 있습니다.


from corsheaders.defaults import default_headers, default_methods

CORS_ALLOW_HEADERS = (
    *default_headers,
    'my-custom-header',
)

CORS_ALLOW_METHODS = (
    *default_methods,
)

CORS_ALLOW_HEADERS는 예비 요청(preflight request) 응답의 Access-Control-Allow-Headers에 사용되는 헤더 목록입니다.

CORS_ALLOW_METHODS는 예비 요청 응답의 Access-Control-Allow-Methods에 사용되는 HTTP 메서드 목록입니다.

기본값에는 accept, authorization, content-type, user-agent, x-csrftoken, x-requested-with 헤더와 DELETE, GET, OPTIONS, PATCH, POST, PUT 메서드가 포함되어 있습니다.

기본값으로 충분하다면 두 설정은 작성하지 않아도 되며, 사용자 정의 헤더가 필요한 경우에만 기본값에 추가해 사용합니다.



미들웨어

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',
]

미들웨어(middleware)란 운영 체제와 응용 소프트웨어의 중간에서 조정과 중개의 역할을 수행하는 소프트웨어입니다.

장고의 미들웨어는 장고에서 발생하는 요청(Request)과 응답(Response) 처리 과정에 끼어들어 동작하는 플러그인(Plugin) 형태의 프레임워크입니다.

보안 헤더 추가, 세션, CSRF 검증, 사용자 인증 등이 미들웨어로 처리됩니다.

요청은 목록의 위에서 아래 순서로, 응답은 아래에서 위 순서로 미들웨어를 통과하므로, 등록 순서가 중요합니다.


미들웨어 등록

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    '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',
]

CORS 미들웨어는 응답을 생성할 수 있는 다른 미들웨어보다 가능한 한 위쪽에 등록해야 합니다.

특히 CommonMiddleware보다 위에 있어야 하므로, 일반적으로 목록의 가장 최상단에 등록합니다.

추가적으로 등록되는 미들웨어는 역할에 맞는 위치에 등록합니다.



루트 URL

ROOT_URLCONF = 'daehee.urls'

루트 URL 설정에 대한 Python 모듈 경로를 나타내는 문자열입니다.

장고는 요청이 들어오면 이 모듈의 urlpatterns부터 URL을 탐색합니다.



템플릿

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',
            ],
        },
    },
]

장고는 웹 사이트에서 활용할 수 있으므로 html 코드 등과 연동하여 사용할 수 있습니다.

BACKEND는 사용할 템플릿 백엔드를 설정합니다. 아래와 같이 템플릿을 변경해 사용할 수 있습니다.

  • ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’
  • ‘BACKEND’: ‘django.template.backends.jinja2.Jinja2’

DIRS는 장고가 템플릿 소스 파일을 찾아야하는 디렉터리 경로 목록입니다.

APP_DIRS는 장고가 설치된 애플리케이션의 templates 폴더에서 템플릿 소스 파일을 찾는 여부입니다.

OPTIONS는 템플릿 백엔드에 전달할 추가 매개 변수입니다. 사용 가능한 매개 변수는 템플릿 백엔드에 따라 달라집니다.


템플릿 등록

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

템플릿을 사용하는 경우 DIRS에 템플릿이 저장된 경로를 등록합니다.

현재 프로젝트 경로의 templates 폴더에서 템플릿을 검색합니다.

만약, 템플릿을 사용하지 않는다면 등록하지 않아도 됩니다.



WSGI 배포

WSGI_APPLICATION = 'daehee.wsgi.application'

runserver나 WSGI 서버가 사용할 WSGI(Web Server Gateway Interface) 애플리케이션 객체의 경로를 의미합니다.

프로젝트를 생성할 때 제공되는 wsgi.py의 application 객체를 가리킵니다.

  • Tip : 비동기 서버(ASGI)를 사용하는 경우에는 asgi.py의 application 객체를 서버에 직접 지정합니다. (예 : uvicorn daehee.asgi:application)



데이터베이스 설정

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

기본값으로 SQLite가 설정되어 있으며, 특정 데이터베이스를 연동할 때 DATABASES 설정값을 변경합니다.

ENGINE은 데이터베이스의 엔진을 의미하며, MySQL(MariaDB)이나 PostgreSQL, Oracle 등을 연동할 수 있습니다.


MySQL 연동

pip install mysqlclient

MySQL을 연동하기 위해서는 mysqlclient를 설치합니다.

'ENGINE': 'django.db.backends.mysql'

설치가 완료된 후, ENGINE 값을 수정해 사용할 수 있습니다.

  • Tip : mysqlclient는 Linux, macOS에서 MySQL 개발 헤더 등 빌드 도구가 필요할 수 있습니다. MariaDB도 같은 ENGINE을 사용합니다.


PostgreSQL 연동

pip install "psycopg[binary]"

PostgreSQL을 연동하기 위해서는 psycopg(psycopg 3)를 설치합니다.

'ENGINE': 'django.db.backends.postgresql'

설치가 완료된 후, ENGINE 값을 수정해 사용할 수 있습니다.

  • Tip : 예전 강좌에서 사용하던 psycopg2도 사용할 수 있지만, 장고 공식 문서는 새 프로젝트에 psycopg(3) 사용을 권장합니다.


데이터베이스 설정 수정

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': os.environ['DB_HOST'],
        'PORT': os.environ['DB_PORT'],
        'NAME': os.environ['DB_NAME'],
        'USER': os.environ['DB_USER'],
        'PASSWORD': os.environ['DB_PASSWORD'],
    }
}

데이터베이스를 연동시, 호스트(HOST), 포트(PORT), 이름(NAME), 유저(USER), 비밀번호(PASSWORD)를 설정해야합니다.

호스트(HOST)는 데이터베이스의 주소입니다. 만약, 로컬에서 사용하고 있다면, localhost를 입력합니다.

포트(PORT)는 데이터베이스의 포트 번호입니다. 데이터베이스에서 사용하고 있는 포트 번호를 작성합니다.

이름(NAME)은 연동할 데이터베이스의 이름을 의미합니다. 사용할 데이터베이스의 이름을 입력합니다.

유저(USER)는 데이터베이스에 접속할 계정 이름을 의미합니다.

비밀번호(PASSWORD)는 접속할 데이터베이스에 설정된 비밀번호를 의미합니다.

데이터베이스 설정은 SECRET_KEY와 같이 예제처럼 환경 변수 등으로 별도로 관리해야 합니다.

데이터베이스의 접속 정보가 노출된다면, 보안 기능이 상실되므로 큰 위험을 초래하게 됩니다.


클라우드 데이터베이스 연동

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': 'daehee.076923.ap-northeast-2.rds.amazonaws.com',
        'PORT': 5432,
        'NAME': os.environ['DB_NAME'],
        'USER': os.environ['DB_USER'],
        'PASSWORD': os.environ['DB_PASSWORD'],
    }
}

AWS RDS와 같이 클라우드 환경의 데이터베이스와 장고를 연동할 수 있습니다.

클라우드 데이터베이스의 엔드포인트를 호스트(HOST)에 문자열로 입력합니다.

클라우드 데이터베이스의 포트를 포트(PORT)에 입력합니다.

위의 예시와 같이 연동해 사용할 수 있습니다.

  • Tip : 요청마다 연결을 새로 맺지 않도록 'CONN_MAX_AGE': 60처럼 연결 유지 시간(초)을 설정하거나, PostgreSQL에서는 'OPTIONS': {'pool': True}로 연결 풀(Connection Pool)을 사용할 수 있습니다.



비밀번호 유효성 검사

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

사용자 비밀번호의 강도를 확인하는 데 사용되는 유효성 검증기 목록입니다.

UserAttributeSimilarityValidator는 사용자의 아이디, 이름, 이메일 등의 속성이 비밀번호와 유사한지 확인합니다.

MinimumLengthValidator는 비밀번호의 최소 길이를 확인합니다. 기본값은 8자입니다.

CommonPasswordValidator는 비밀번호가 흔히 사용되는 비밀번호 목록에 포함되는지 확인합니다.

NumericPasswordValidator는 비밀번호가 숫자로만 구성되어있는지 확인합니다.



다국어 및 지역 시간 설정

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True

LANGUAGE_CODE는 장고 프로젝트에서 사용되는 기본 언어를 설정합니다.

TIME_ZONE은 프로젝트의 기본 시간대를 설정하는 문자열입니다.

USE_I18N은 장고의 번역 시스템 활성화 여부를 설정합니다.

USE_TZ는 장고가 시간대를 인식하는(aware) 날짜/시간을 사용할지 여부를 설정합니다.

USE_TZ = True라면 데이터베이스에는 UTC로 저장되고, 템플릿이나 폼에서 표시할 때 TIME_ZONE의 시간대로 변환됩니다.

  • Tip : I18N은 국제화(Internationalization)의 약어입니다.

  • Tip : 예전 버전에 있던 USE_L10N 설정은 Django 5.0에서 제거되었으며, 현재는 현지화된 형식이 항상 사용됩니다.


다국어 및 지역 시간 변경

LANGUAGE_CODE = 'ko-kr'

TIME_ZONE = 'Asia/Seoul'

USE_I18N = True

USE_TZ = True

다국어 및 지역시간을 한국 시간대에 맞춘다면, 위와 같이 변경해 사용합니다.

관리자 페이지 등 장고에 내장된 문구가 한국어로 표시됩니다.

  • Tip : DRF의 응답은 USE_TZ = True일 때 TIME_ZONE에 맞춰 시간대 정보(예 : +09:00)가 포함된 형식으로 직렬화됩니다.



정적 파일 설정

STATIC_URL = 'static/'

STATIC_URL은 정적 파일을 참조할 때 사용할 URL을 의미합니다.

CSS, JavaScript, 이미지와 같은 정적 파일 경로를 설정합니다.

비어 있지 않은 값으로 설정되면 슬래시(/)로 끝나야합니다.

  • Tip : 사용자가 업로드한 파일은 정적 파일이 아닌 미디어 파일로 분류되며, MEDIA_URL과 MEDIA_ROOT로 별도 설정합니다.


정적 파일 경로 변경

STATICFILES_DIRS = [
    BASE_DIR / 'static',
]

STATIC_ROOT = BASE_DIR / 'staticfiles'

로컬 경로의 정적 파일을 사용한다면, 위와 같이 변경해 사용할 수 있습니다.

STATICFILES_DIRS는 앱의 static 폴더 외에 추가로 정적 파일을 찾을 경로 목록을 설정합니다.

STATIC_ROOT는 배포 시 python manage.py collectstatic 명령어로 모든 정적 파일을 모아둘 경로를 설정합니다.

  • Tip : STATIC_ROOT와 STATICFILES_DIRS에 같은 경로를 지정하면 안 됩니다. 같은 경로를 사용하면 The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting. 오류가 발생합니다.



기타 설정

MAILERS는 Django 6.1의 기본 프로젝트에 포함된 이메일 발송 설정입니다. 예전 버전의 EMAIL_BACKEND 설정을 대체합니다. 기본값은 이메일을 실제로 보내지 않고 콘솔에 출력하는 console 백엔드입니다.

이외에도 DEFAULT_AUTO_FIELD(기본 키 필드 타입), LOGGING(로그), CACHES(캐시), 서드파티 패키지의 설정(REST_FRAMEWORK 등)을 추가할 수 있습니다.

일반적으로 해당 강좌에 설명된 설정을 활용합니다.

만약, 데이터베이스를 사용하지 않고 API 등의 기능만 활용할 때에는 DATABASES 속성을 빈 사전({})으로 설정할 수 있습니다.

단, 이 경우 admin, auth, sessions 등 데이터베이스를 사용하는 기본 앱은 사용할 수 없습니다.

  • Tip : 개발, 운영 환경별로 설정이 다르다면 settings 폴더를 만들어 base.py, dev.py, prod.py로 나누고, DJANGO_SETTINGS_MODULE 환경 변수로 사용할 설정을 선택할 수 있습니다.

댓글 남기기