settings에서 중요해보이는거 몇 가지만 정리

INSTALLED_APPS

Django 프로젝트에서 활성화할 애플리케이션 목록

INSTALLED_APPS = [
    "django.contrib.admin", # 관리자 인터페이스
    "django.contrib.auth", # 인증 시스템
    "django.contrib.contenttypes", # 콘텐츠 타입 프레임워크
    "django.contrib.sessions", # 세션 관리
    "django.contrib.messages", # 메시지 프레임워크
    "django.contrib.staticfiles", # 정적 파일 관리
 
    # 3rd party apps
    "django_apscheduler", # 스케줄링
    "rest_framework", # REST_API
    "corsheaders", # CORS 처리
 
    # apps
    'accounts', # 사용자 계정 관리
    'projectname.apps.ProjectnameConfig', # projectname 메인앱
]

MIDDELWARE

미들웨어는 요청/응답 처리 과정에서 실행되는 컴포넌트 순서가 중요

실행 순서

  • 요청: 위에서 아래로 실행
  • 응답: 아래에서 위로 실행
MIDDLEWARE = [
    "corsheaders.middleware.CorsMiddleware", # CORS 처리
    "django.middleware.security.SecurityMiddleware", # 보안 헤더 설정
    "django.contrib.sessions.middleware.SessionMiddleware", # 세션 관리
    "django.middleware.locale.LocaleMiddleware", # 다국어 처리
    "django.middleware.common.CommonMiddleware", # 공통 기능(URL 정규화 등)
    "django.middleware.csrf.CsrfViewMiddleware", # CSRF 보호
    "django.contrib.auth.middleware.AuthenticationMiddleware", # 인증 정보 제공
    "accounts.middleware.JWTAuthenticationMiddleware", # JWT 인증 처리(커스텀)
    "django.contrib.messages.middleware.MessageMiddleware", # 메시지 프레임워크
    "django.middleware.clickjacking.XFrameOptionsMiddleware", # 클릭재킹 방지
]

TEMPLATES

템플릿 엔진과 템플릿 관련 설정

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",
                "accounts.context_processors.user_menu_permissions",
            ],
        },
    },
]

주요 설정:

  • BACKEND: 템플릿 엔진 지정 (Django 템플릿 사용)
  • DIRS: 프로젝트 레벨 템플릿 디렉토리 (templates/)
  • APP_DIRS: True이면 각 앱의 templates/도 검색
  • OPTIONS.context_processors: 템플릿에 자동으로 제공되는 컨텍스트 변수
    • debug: 디버그 정보
    • request: 현재 요청 객체
    • auth: 인증 관련 변수 (예: user)
    • messages: 메시지 프레임워크 변수
    • user_menu_permissions: 커스텀 메뉴 권한 변수

WSGI_APPLICATION

wsgi 서버가 django application을 로드하는 진입점 지정

WSGI_APPLICATION = "config.wsgi.application"

JWT_AUTH

JWT 쿠키 보안 설정

# JWT Cookie configuration
JWT_AUTH_COOKIE = 'access_token'
JWT_AUTH_REFRESH_COOKIE = 'refresh_token'
JWT_AUTH_SECURE = not DEBUG  # HTTPS only in production
JWT_AUTH_HTTPONLY = True  # XSS protection
JWT_AUTH_SAMESITE = 'Lax'  # CSRF protection
  • JWT_AUTH_HTTPONLY: True
    • 브라우저가 cookie를 HTTP 요청에만 포함, JavaScript(documents.cookie)로 접근 불가
    • XSS 공격으로 Cookie 탈취되는것 방지
  • JWT_AUTH_SAMESITE:
    • ‘Strict’: 같은 사이트에서만 전송 (가장 엄격)
    • ‘Lax’: 같은 사이트 + 일부 안전한 크로스 사이트 요청(GET 등) 허용
    • ‘None’: 모든 크로스 사이트 요청 허용 (HTTPS 필수)