Django 기본 개념 정리 - django settings.py_(3-1)

EBAB!·2023년 7월 3일
0

Django 시작하기

목록 보기
7/10
post-thumbnail

프로젝트에 config 폴더와 django의 기본 구성 구성이 생성됩니다.

settings.py

django 프로젝트를 시작하면 이제 프로젝트 내에서 여러 django앱을 만들게 되고, 어떤 앱이든 상관없이 공통적으로 적용되어야 하는 설정들과 기본 설정들을 하는 곳입니다.

기본 설정에 대해 위에서부터 하나씩 살펴보겠습니다.

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

Path(file)은 현재 파일의 구상 경로를 인스턴스화 하고 resolve() 메서드를 통해 절대경로를 반환합니다. 그리고 그 경로의 parent(상위경로)를 두 번 올라타게 되므로 프로젝트 전체를 포함하는 최상위 폴더를 가리킵니다.



SECRET_KEY = "xxxxxxxxxxxxx...xxxx"

특정한 장고 설치를 위한 키입니다. 암호화 서명을 제공하는데 사용되기도 하고, 유니크한 값으로 설정된다. 나중에 외부에 노출될 위험이 없도록 옮겨줘야 합니다.

SECRET_KEY의 사용 용도

  • django.contrib.sessions.backends.cache 이외의 session backend를 사용하고 있거나, 기본 get_session_auth_hash()를 사용하는 모든 sessions
  • CookieStorage FallbackStorage를 사용하는 모든 messages
  • 모든 PasswordResetView
  • 다른 키가 제공되지 않는 암호화 서명 사용 시 사용


DEBUG = True

개발하는 동안 여러 에러 사항과 디버그하는데 필요한 정보를 페이지에서 제공하게 됩니다. 이 때 DEBUG를 True로 해두어야 디버그 정보가 제공되고 배포시 False로 바꿔줘야 합니다.

나중에는 개발, 배포용 설정을 따로 분리하면서 설정하게 됩니다.



ALLOWED_HOSTS = []

앞서 django는 nginx를 통해 전달을 받는다고 했습니다. 이 때 nginx가 전해준다해서 전부 받아서 처리하는 것이 아니라 여기있는 ALLOWED_HOST에 저장된 호스트가 요청한 것에 대해서만 처리하게 됩니다.

아무나 우리 django를 사용하면 안되니까요!

호스트 : 네트워크에 연결된 컴퓨터



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

django에 기본적으로 설치된 app입니다.

  • django.contrib.admin: 장고의 가장 큰 장점 중에 하나인 어드민 인터페이스
  • django.contrib.auth: 장고 인증 시스템
  • django.contrib.contenttypes: 프로젝트에 설치된 모든 모델을 추적할 수 있음 높은 수준의 모델 작업에 인터페이스를 제공
  • django.contrib.sessions: 익명 세션에 데이터를 저장하기 위한 프레임워크
  • django.contrib.messages: 웹페이지에 1회성 알림 메세지를 띄울 때 사용하는 프레임워크
  • django.contrib.staticfiles: 배포환경에서 쉽게 제공될 수 있게 각각의 앱의 정적 파일들을 한 곳에 모아주는 프레임워크

우리가 python manage.py startapp을 통해 custom app을 만든다면 이곳에 추가해주어야 합니다.
후에 DRF와 같은 또다른 app을 추가하기도 합니다. 그래서 다음과 같은 형태로 바꿔준다면 관리가 쉽습니다.

SYSTEM_APPS = [...]
CUSTOM_APPS = [...] # django에서 명령어를 통해 추가하는 앱
THIRD_PARTY_APPS = [...] # 외부에서 추가하는 앱

INSTALLED_APPS  = SYSTEM_APPS + CUSTOM_APPS + THIRD_PARTY_APPS


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

gunicorn과 같은 WSGI(파이썬 미들웨어)에게 전달하는 부분입니다. 아래에 wsgi를 실행시키는 설정이 있는데 이 때 받는 곳에서 전달합니다.

SecurityMiddleware

보안 미들웨어는 request/response 싸이클에 향상된 보안 기능을 제공한다. 각각의 기능들은 독립적으로 enable, disable 가능하다.

SECURE_BROWSER_XSS_FILTER (Default: False)
True로 지정하면 모든 응답 헤더에
X-XSS-Protection: 1;mode=block가 추가된다. 최신 브라우저는 더 이상 이 헤더를 따르지 않는다. 이 헤더가 실질적으로 이점이 거의 없지만 오래된 브라우저를 지원하는 경우에 설정해주는 것이 좋다.

SECURE_CONTENT_TYPE_NOSNIFF (Default: True)
True로 지정하면 모든 응답 헤더에
X-Content-Type-Options: nosniff가 추가된다. HTML, Javascript로 만들어진 파일을 업로드 할 수 있을 때 악의적인 사용자가 위험한 파일들을 업로드할 수 있다. 이 헤더는 MIME 타입의 스니핑을 방지한다.

HTTP Strict Transport Security(HSTS)
오직 https에서 액세스해야 하는 경우에 이 헤더를 설정하여 최신 브라우저가 안전하지 않은 연결(주어진 기간동안)을 통해 도메인 이름에 대한 연결을 거부하도록 할 수 있다.

SECURE_HSTS_INCLUDE_SUBDOMAINS
서브도메인에도 이 헤더를 추가시킬 수 있다.

SECURE_HSTS_PRELOAD
True로 지정하면 preload list에 등록되어 브라우저가 이 도메인에 안전하지 않은 연결을 하지 않게 된다.

SECURE_HSTS_SECONDS
웹브라우저가 HSTS 헤더를 볼 때 마다 주어진 기간동안 비보안 통신을 거부한다.

SECURE_REDIRECT_EXEMPT
url이 이 리스트의 정규식과 일치하면 https로 리디렉션되지 않는다.

SECURE_REFERRER_POLICY
Referrer Policy 헤더에 추가되어 응답된다.

SECURE_SSL_HOST
모든 SSL 리디렉션들이 원래의 요청 호스트로 리디렉션되는 것이 아니라 여기에 설정된 호스트로 리디렉션된다.
SECURE_SSL_REDIRECT(Default: False)
True면 http가 아닌 요청들은 https로 리디렉션된다.

SessionMiddleware

세션을 지원해준다.
CommonMiddleware

DISALLOWED_USER_AGENT

이 사용자 에이전트에 대한 액세스를 금지시킨다.

APPEND_SLASH
True면, 초기 url 끝에 백슬래시(/)가 붙지 않는다.

PREPEND_WWW
True면, www가 없는 url은 www이 붙어서 리디렉션된다.

CsrfViewMiddleware

Csrf에 대해서 보호해주는 미들웨어이다.

AuthenticationMiddleware

모든 요청되는 HttpRequest 객체에 현재 로그인되어있는지 나타내는 user객체가 담겨있다.

MessageMiddleware

꼭 세션 미들웨어 뒤에 추가해주어야한다. 이유는 세션기반 미들웨어이기 떄문이다.

XFrameOptionsMiddleware

X-Frame-Options 헤더와 함께 클릭재킹에 보호해주는 미들웨어이다.

profile
공부!

0개의 댓글