앞서 django-admin startproject 명령어를 치고 난 후 생성되는 파일들을 간단히 정리해 보았다. 이제 조금 더 세심히 들여다보자 일단은 settings.py 부터다
BASE_DIR = Path(__file__).resolve().parent.parent
BASE_DIR:
- 프로젝트의 루트 디렉토리 경로
- 프로젝트 내부의 파일 및 디렉토리 경로를 정의할 때 사용
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 프로젝트에 요청을 허용할 호스트/도메인 이름 목록
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: 정적 파일 관리
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',
]
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. 응답 객체가 반환될 때 역순으로 미들웨어를 거쳐 최종 응답이 클라이언트에 전달됨.
ROOT_URLCONF = 'toyDjangoProject.urls'
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',
],
},
},
]
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을 조합하여 동적으로 페이지를 생성할 수 있음
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", # 정적 파일 디렉토리 설정
]
WSGI_APPLICATION = 'toyDjangoProject.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
ENGINE: 사용할 데이터베이스 백엔드 (기본값: SQLite).
NAME: 데이터베이스 파일 경로.
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: 기본 언어 설정 (예: 'ko-kr'로 변경 시 한국어 사용).
TIME_ZONE: 시간대 설정 (예: 'Asia/Seoul'로 변경 시 한국 표준시 적용).
USE_I18N: 국제화(번역) 기능 활성화 여부.
USE_TZ: 시간대 지원 활성화 여부.
STATIC_URL = 'static/'
정적 파일(CSS, JavaScript, 이미지 등)의 URL 경로
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
모델에서 기본적으로 사용할 기본 키 필드 타입을 설정합니다.
BigAutoField: 64비트 정수 필드로 자동 증가합니다.
총정리:
settings.py는 Django 프로젝트의 설정 중심 파일로, 프로젝트 전반의 동작을 제어