Django 설정 파일 전체 구성 안내

Django의 설정 파일은 프로젝트 전반에 걸쳐 사용되는 모든 구성 정보를 포함합니다. 일반적으로 프로젝트 루트 폴더 내부에 위치하며, 예를 들어 mysite라는 이름의 프로젝트를 생성했다면 해당 설정 파일은 mysite/settings.py 경로에 있습니다.

다음은 주요 설정 항목들입니다.

1. 정적 파일 경로 지정

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'blog', 'statics'),
]

이 설정은 정적 리소스(예: CSS, JavaScript, 이미지)를 저장할 폴더를 지정합니다. STATIC_URL은 클라이언트에서 접근하는 경로이며, 실제 파일은 STATICFILES_DIRS에 정의된 경로에 존재합니다.

2. MySQL 데이터베이스 연결

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'admin',
        'PASSWORD': 'securepass',
        'HOST': '',
        'PORT': '3306',
    }
}

기본적으로 SQLite를 사용하지만, MySQL을 사용하려면 pymysql을 설치하고 초기화해야 합니다:

import pymysql
pymysql.install_as_MySQLdb()

이 코드는 프로젝트 루트의 __init__.py 파일에 추가됩니다.

3. 콘솔에 로그 출력 활성화

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

이 설정은 데이터베이스 쿼리 및 오류 메시지를 실시간으로 콘솔에 출력하게 합니다.

4. 언어 설정 (한국어 지원)

LANGUAGE_CODE = 'ko-kr'

관리자 페이지와 일부 템플릿의 언어를 한국어로 변경합니다.

5. 템플릿 경로 설정

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

템플릿 파일은 templates 폴더에 배치되며, 이 경로가 앱 내부의 템플릿과 함께 검색됩니다.

6. 애플리케이션 등록

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',
    'userapp.apps.UserAppConfig',
]

새로 만든 앱은 반드시 여기에 등록되어야 웹 요청을 처리할 수 있습니다.

7. SQL 쿼리 로깅

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

이 설정은 실행 중인 모든 데이터베이스 쿼리를 콘솔에 출력합니다.

8. 사용자 모델 커스터마이징 (AbstractUser 상속)

# models.py
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    # 추가 필드 정의 가능
    phone_number = models.CharField(max_length=15, blank=True)
# settings.py
AUTH_USER_MODEL = 'userapp.CustomUser'

커스텀 사용자 모델을 사용하려면 settings.py에서 해당 경로를 지정해야 합니다.

9. 사용자 정의 미들웨어 설정

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.custom_middleware.FirstMiddleware',
    'middleware.custom_middleware.SecondMiddleware',
]

사용자 정의 미들웨어는 시스템 기본 미들웨어 이후에 위치해야 하며, 순서가 중요합니다.

10. 세션 저장 방식 설정

(1) 데이터베이스 기반 저장 (기본)

SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_AGE = 1209600  # 2주
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_SAVE_EVERY_REQUEST = False

(2) 캐시 기반 저장 (Redis/Memcached)

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'  # cache 설정에서 정의된 별칭

(3) 파일 기반 저장

SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH = None  # 임시 디렉토리 사용

11. 파일 업로드 경로 설정

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

업로드된 파일은 MEDIA_ROOT 폴더에 저장되며, 웹에서 접근하기 위해 urls.py에 다음과 같이 추가합니다:

from django.conf import settings
from django.urls import path
from django.views.static import serve

urlpatterns = [
    path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
]

태그: Django settings.py static files database configuration session storage

6월 13일 23:44에 게시됨