프로젝트 초기 셋업

guava·2021년 12월 26일
0
post-custom-banner

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.

poetry를 통한 장고 패키지 설치

$ poetry remove django  # 기존 장고 제거
$ poetry add django@{{ version or 'latest' }}  # 원하는 장고 버전 설치
$ poetry add django-debug-toolbar --dev  # django-debug-toolbar를 개발용 패키지로 지정하며 설치

poertry를 사용하지 않으면 패키지 버전 관리를 해줘야 한다.(requirements.txt)
아래 settings.py 관리하는 방법처럼 common.txt, dev.txt, prod.txt로 나누어서 관리가 필요하다.

즉 requirements.txt 하나로 관리하는 것이 아니라, requirements/common.txt, requirements/dev.txt, requirements/prod.txt를 생성해서 관리하자.

dev.txt와 prod.txt의 첫 줄은 -r common.txt로 써서 common.txt를 상속받고 이후에 필요한 패키지 리스트를 추가해주면 된다.

settings.py 관리

배포 / 개발 버전별 관리를 위한 디렉토리 구성

그림. 프로젝트 디렉토리 참고. settings.py가 없고 settings 디렉토리가 생성되어 있다.

디렉토리 구성하기

  1. settings 디렉토리를 만든다.
  2. common.py에 공통된 설정을 정의한다.
  3. dev.py, prod.py에서 common.py를 임포트하고 의도에 맞게 오버라이드한다.
    PS. dev.py는 개발서버, prod.py는 배포서버를 위한 설정이다.

common.py

# /askcompany/askcompany/settings/common.py
# common.py는 기존의 settings.py를 그대로 복사한다. 그리고 몇가지 설정을 수정해준다.

# ...

# BASE_DIR에 parent프로퍼티를 한번 더 붙인다. 
# 디렉토리가 한뎁스 깊어졌기 때문에 참조하는 베이스 디렉토리도 달라져야 한다. 이걸 바꾸지 않으면 모든게 꼬인다.
BASE_DIR = Path(__file__).resolve().parent.parent.parent

# ...

prod.py

# /askcompany/askcompany/settings/prod.py
# common.py의 모든 변수를 가져온다. 필요한 설정만 오버라이드 한다. (ex. DEBUG = False)
from .common import *

dev.py

# /askcompany/askcompany/settings/dev.py
# common.py의 모든 변수를 가져온다. 필요한 설정만 오버라이드 한다.
from .common import *

Static / Media 설정 추가

설정 추가하기

# /askcompany/askcompany/settings/common.py

# ...

# 정적 파일 요청이 오는 URL
STATIC_URL = 'static/'

# python manage.py collectstatic 명령이 참조하는 설정
STATIC_ROOT = BASE_DIR / 'static'

# 파일에 대한 요청이 오는 URL
MEDIA_URL = 'media/'

# 실제 파일을 저장할 ROOT 경로이다. (AWS S3 등으로 설정이 가능)
MEDIA_ROOT = BASE_DIR / 'media'

# ...

개발서버일 때 MEDIA_URL처리 로직 추가 (urls.py)

# /askcompany/askcompany/urls.py
urlpatterns = [
    # ...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

장고 실행 시 진입점에서 참조하는 settings 변경 (manage.py, asgi.py, wsgi.py)

  • manage.py, asgi.py, wsgi.py는 settings module을 환경 변수로 부터 입력받는다.
  • manege.py는 개발 서버를 실행하거나 장고 명령어를 수행하며, asgi.py와 wsgi.py는 nginx 등의 실서버 배포 시의 진입점이 되는 파일이다.
  • 정확히는 참조하는 settings를 변경하는건 아니고 입력 받은 settings관련 환경 변수가 없다면 기본적으로 정의해주는 함수 os.environ.setdefault를 수정해줘야 한다.
  • manage.py, asgi.py, wsgi.py 내의 os.environ.setdefault의 파라미터를 수정해준다. (파일 위치는 본문 상단의 그림 참조)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'askcompany.settings') # 변경 전
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'askcompany.settings.dev') # 변경 후

template dirs 추가

common.py

DIRS에 장고 템플릿 로더가 참조하기 위한 경로를 추가한다. 보통 프로젝트 레벨의 경로를 이곳에서 관리한다.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [  # 장고 템플릿 로더가 참조하는 경로들
            BASE_DIR / 'askcompany' / 'templates'  
        ],
        'APP_DIRS': True,  # 장고 템플릿 로더가 앱 내의 템플릿 경로도 참조할지 정의한다.
        # ...
     }
 ]

위에서 지정한 templates경로 내에 layout.html 생성하자. (git에 의한 관리를 위한 추가)
/askcompany/askcompany/templates/layout.html

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>Instagram with Ask Company</title>
</head>
<body>
  {% block content %}

  {% endblock %}
</body>
</html>

STATICFILES_DIRS 추가

정적 파일 추가 (git에 의한 관리를 위한 추가)

# /askcompany/askcompany/settings/common.py
# ...

# File System Loader에서 참조할 정적 파일의 위치를 추가한다.
STATICFILES_DIRS = [
    BASE_DIR / 'askcompany' / 'static'
]

디버그용 라이브러리 설치

장고 디버그 툴바

장고 쿼리 카운트

post-custom-banner

0개의 댓글