Django의 settings.py 뜯어보기

choi·2024년 12월 19일

python-Django

목록 보기
3/5

앞서 django-admin startproject 명령어를 치고 난 후 생성되는 파일들을 간단히 정리해 보았다. 이제 조금 더 세심히 들여다보자 일단은 settings.py 부터다

1. 경로 설정

BASE_DIR = Path(__file__).resolve().parent.parent
BASE_DIR: 
- 프로젝트의 루트 디렉토리 경로
- 프로젝트 내부의 파일 및 디렉토리 경로를 정의할 때 사용
          

2. 보안 설정

SECRET_KEY = 'django-insecure-=*#-2da#!@mvxn-bq&27!+4xjf)r!9o!aw!gx_a(i37q-&wgqh'
DEBUG = True
ALLOWED_HOSTS = []
SECRET_KEY :
- Django 프로젝트에서 암호화 및 보안 작업(예: 세션, CSRF 토큰 등)에 사용되는 중요한 키
- 배포 환경에서는 이 값을 안전한 방법으로 보관

DEBUG:
- 디버그 모드를 활성화하는 설정

ALLOWED_HOSTS:
- Django 프로젝트에 요청을 허용할 호스트/도메인 이름 목록

3. 애플리케이션 정의

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
INSTALLED_APPS:
- Django 프로젝트에서 활성화된 앱 목록

기본제공 앱:
- django.contrib.admin: 관리자 인터페이스
- django.contrib.auth: 인증 및 권한 관리
- django.contrib.contenttypes: 모델 다형성 지원
- django.contrib.sessions: 세션 관리
- django.contrib.messages: 메시지 프레임워크
- django.contrib.staticfiles: 정적 파일 관리

4. 미들웨어 정의

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',
]
  • 미들웨어는 요청(request)과 응답(response) 사이에 동작하는 코드
SecurityMiddleware: 보안 관련 헤더 추가 및 HTTPS 강제 설정.
SessionMiddleware: 세션 데이터를 요청에 추가.
CommonMiddleware: 공통적인 기능(예: URL 정규화) 제공.
CsrfViewMiddleware: CSRF(사이트 간 요청 위조) 보호.
AuthenticationMiddleware: 사용자의 인증 상태를 요청에 추가.
MessageMiddleware: 메시지 프레임워크 지원.
XFrameOptionsMiddleware: 클릭재킹 보호 헤더 추가.
  • 미들웨어는 정의된 순서대로 요청(Request)을 처리하고, 응답(Response)을 반환할 때는 역순으로 처리

  • 예제의 흐름

1. 클라이언트가 요청을 보냄.
2. SecurityMiddleware가 요청을 처리하고 보안 헤더를 추가하거나 HTTPS로 리다이렉트.
3. SessionMiddleware가 요청에 세션 데이터를 추가.
4. CommonMiddleware가 URL 수정(예: 슬래시 추가).
5. CsrfViewMiddleware가 CSRF 검증.
6. AuthenticationMiddleware가 요청 객체에 사용자 정보를 추가.
7. 뷰(View)가 요청을 처리.
8. 응답 객체가 반환될 때 역순으로 미들웨어를 거쳐 최종 응답이 클라이언트에 전달됨.

5. URL 설정

ROOT_URLCONF = 'toyDjangoProject.urls'
  • Django 프로젝트의 URL 라우팅 설정 파일 경로

6. 템플릿 설정

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]
  • Django의 템플릿 엔진 관련 설정
BACKEND: Django가 사용하는 템플릿 엔진(기본값: DjangoTemplates).
DIRS: 프로젝트에서 추가적인 템플릿 디렉토리 경로.
APP_DIRS: 각 앱의 templates 디렉토리를 자동으로 검색.
context_processors: 템플릿에 사용할 컨텍스트 데이터를 자동으로 추가하는 함수 리스트.
	EX): request, user, messages 등을 자동으로 템플릿에 전달
  • 템플릿 엔진이란?
템플릿 엔진은 HTML, XML, JSON 같은 문서를 **정적(Static)**에서 **동적(Dynamic)**으로 변환해주는 도구

주로 웹 프레임워크에서 데이터를 동적으로 표현하기 위해 사용

Django는 기본적으로 **Django Template Language (DTL)**이라는 템플릿 엔진을 제공
DTL을 사용하면 Python 코드와 HTML을 조합하여 동적으로 페이지를 생성할 수 있음
  • 템플릿 엔진을 사용하지 않고 HTML+JS로만 사용한다면?
1. TEMPLATES 설정에서 Django 템플릿 엔진 관련 설정을 제거하거나 최소화
2. HTML 파일을 Django의 정적 파일로 취급하여 직접 클라이언트에 제공
3. settings.py에서 정적 파일 설정
myproject/
    ├── static/
    │   ├── html/
    │   │   ├── index.html
    │   │   ├── about.html
    │   ├── js/
    │   │   ├── app.js
    │   └── css/
    │       ├── style.css
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / "static",  # 정적 파일 디렉토리 설정
]

7. WSGI 애플리케이션

WSGI_APPLICATION = 'toyDjangoProject.wsgi.application'
  • Django 프로젝트를 WSGI(Web Server Gateway Interface)를 통해 실행하기 위한 진입점

8. 데이터베이스 설정

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
ENGINE: 사용할 데이터베이스 백엔드 (기본값: SQLite).
NAME: 데이터베이스 파일 경로.

9. 비밀번호 검증

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'},
]
  • Django에서 제공하는 비밀번호 검증 규칙 목록
UserAttributeSimilarityValidator: 사용자 속성과 유사한 비밀번호 방지.
MinimumLengthValidator: 비밀번호 최소 길이 설정(기본: 8자).
CommonPasswordValidator: 흔히 사용하는 비밀번호 방지.
NumericPasswordValidator: 숫자로만 된 비밀번호 방지.

10. 국제화 및 시간대

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
LANGUAGE_CODE: 기본 언어 설정 (예: 'ko-kr'로 변경 시 한국어 사용).
TIME_ZONE: 시간대 설정 (예: 'Asia/Seoul'로 변경 시 한국 표준시 적용).
USE_I18N: 국제화(번역) 기능 활성화 여부.
USE_TZ: 시간대 지원 활성화 여부.

11. 정적 파일 설정

STATIC_URL = 'static/'
정적 파일(CSS, JavaScript, 이미지 등)의 URL 경로

12. 기본 키 필드 타입

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
모델에서 기본적으로 사용할 기본 키 필드 타입을 설정합니다.
BigAutoField: 64비트 정수 필드로 자동 증가합니다.

총정리:
settings.py는 Django 프로젝트의 설정 중심 파일로, 프로젝트 전반의 동작을 제어

profile
늦게나마 정신을 차리려고 하는 개발 뭐시기하는 사람

0개의 댓글