TIL 20 | Django Project Setting

임종성·2021년 7월 16일
0

Django

목록 보기
2/17
post-thumbnail

Django Framework에서 Project를 진행하기 위해서는 가상환경을 사용하고 데이터베이스를 연동하며, 각종 필요한 설정 정보를 세팅해야 한다. Django 프로젝트를 생성하고 초기 개발환경을 구성해보자.

가상환경 세팅

파이썬 가상환경(Virtual Environment)을 사용하는 이유는 여러 프로젝트를 하는데 있어, 분리된 버전 및 패키지 설치 환경을 가질수 있기 때문이다.

하나의 컴퓨터로 여러 프로젝트를 진행할 수 있는데, 프로젝트마다 필요한 라이브러리와 프레임워크 버젼이 다를 수 있다. 하나의 컴퓨터를 사용하며 진행하다 보면 어떤 에러가 발생할지 예측할 수 없다.

따라서 각 프로젝트 별로 독립적인 파이썬 버전 및 라이브러리가 설치된 개별적인 환경, 가상환경을 사용한다. 이는 개발도중에도 편리하지만 나중에 배포관리를 하는데 있어서도 매우 편리하다.

파이썬의 대표적인 가상환경 프로그램은 Conda와 Virtualenv가 있는데, miniconda를 이용해 독립적인 패키지를 관리할 새로운 가상환경을 생성해보자.

conda env list		# 생성된 가상환경 목록을 볼 수 있다.
conda create -n "가상환경 이름" python=3.8
conda activate "가상환경 이름"

여기서 가상환경의 이름은 프로젝트 이름과 같은 "westarbucks"로 하였다.

Terminal 코드의 좌측을 보면 (base)가 (westarbucks)로 변경되어 가상환경 "westarbucks"가 제대로 활성화 된 것을 알 수 있다.

Database 생성

가상환경을 생성한 후에는 Project에서 사용할 Database를 생성해야 한다.

$ mysql -u root -p
mysql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;

한글이나 다른 언어를 사용할 수 있기 때문에 "character set"을 넣어준다.

show databases;         # 생성된 Database를 확인할 수 있다.
use westarbucks;	# Database를 사용하기 위한 명령어	
show tables;		# 불러온 Database가 가지고 있는 Data Table을 보여준다.

Package 설치

지금까지 가상환경을 설정하고 데이터베이스를 생성했다. 이제 프로젝트를 위해서 필수적인 Package들을 가상환경 안에 설치해주어야 한다. 먼저 우리가 사용할 Framework인 Django를 설치하자.

pip install django
pip install mysqlclien # 이후에 MySQL server에 접속하기 위한 package

우리는 Database 관리를 위해 MySQL을 사용한다. Django와 MySQL에 연결하기위해서, MySQL server에 접속하기 위한 패키지인 mysql client를 설치해야 한다.

Django Project 생성

프로젝트를 위해 필요한 Package들을 설치한 후에 드디어 Django Project를 생성한다. 다음과 같은 코드를 입력하여 westarbucks 프로젝트를 생성하자.

django-admin startproject westarbucks

startprojectwestarbucks 디렉토리를 새로 생성하고, 안의 내용물은 다음과 같다.

westarbucks/
    manage.py
    westarbucks
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

manage.py가 위치한 곳이 Django 프로젝트의 디렉토리이고, 이곳에서 모든 작업이 시작된다.

settings.py

모든 프로젝트는 필요한 세부 정보를 세팅해줘야 한다. 각 프로젝트는 프로젝트 만을 위한 정보들이 있는데 그것을 우리만을 위해, 우리가 쓸 수 있도록 몇 가지 설정을 해줘야 한다.

ALLOWED_HOSTS

어떤 호스트나 클라이언트가 요청을 해도 누구든지 받아주겠다고 설정을 해야 한다.

ALLOWED_HOSTS = ['*']

주석처리

admincsrf는 사용하지 않기 때문에 INSTALLED_APPS와 MIDDLESWARE에서 각각 주석처리를 해준다.

위에서 admin을 안쓰기 위해 주석처리를 했는데 어디선가 admin을 향하는 무언가가 있다. urls.py는 요청이 들어온 url에 대한 관리를 해주는 파일인데, admin을 사용하지 않는다고 했으므로 admin 코드들을 주석처리 해준다.

SECRET_KEY & DATABASE

장고 설정에 존재하는 내용 중 SECRET_KEY, DATABASE 등은 소스로서 공유해야 하는 내용이 아니고, 별도의 파일 혹은 환경변수로서 관리하는게 좋다.

따라서 settings.py에 바로 저장하는 방식을 지양하고, manage.py와 같은 디렉토리에 my_settings.py라는 참조용 파일을 새로 만들어 settings.py가 이 파일을 참조하는 방식으로 진행한다.

먼저 touch my_settings.py를 이용해 참조용 파일을 만들고 SECRET_KEY와 DATABASE 세팅을 설정해준다.

실제로 Django는 settings.py를 인식할 뿐, 우리가 생성한 참조용 파일인 my_settings.py를 인식하지는 못한다. 따라서 my_settings.pysettings.py와 연동하여 dajngo가 인식할 수 있도록 settings.py에 코드를 추가해준다.

# westarbucks/settings.py
from pathlib        import Path #기존에 settings.py 에 있는 코드
from my_settings.py import DATABASES, SECRET_KEY

...

DATABASES = DATABASES
SECRET_KEY = SECRET_KEY

corsheaders

다음으로 Cross Domain 이슈를 해결하기 위한 패키지인 corsheaders를 설치해준다.

pip install django-cors-headers

설치된 패키지를 사용하기 위해서 settings.py의 INSTALLED_APP과 MIDDLEWARE에 추가해줘야 한다.

INSTALLED_APPS = [
...
		'corsheaders'
]

MIDDLEWARE = [
	...
		'corsheaders.middleware.CorsMiddleware',
	...
]

마지막으로 허용할 값을 정의해 준다.

#REMOVE_APPEND_SLASH_WARNING
APPEND_SLASH = False

##CORS
CORS_ORIGIN_ALLOW_ALL=True
CORS_ALLOW_CREDENTIALS = True

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',	#만약 허용해야할 추가적인 헤더키가 있다면?(사용자정의 키) 여기에 추가하면 된다.
)

처리가 잘 되었는지 확인하기 위해 manage.py가 있는 디렉토리 내에서 python3 manage.py runserver를 실행해준다.

이렇게 Django를 이용한 프로젝트 초기 개발 환경을 구상해봤다!

profile
어디를 가든 마음을 다해 가자

0개의 댓글