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"가 제대로 활성화 된 것을 알 수 있다.
가상환경을 생성한 후에는 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들을 가상환경 안에 설치해주어야 한다. 먼저 우리가 사용할 Framework인 Django를 설치하자.
pip install django pip install mysqlclien # 이후에 MySQL server에 접속하기 위한 package
우리는 Database 관리를 위해 MySQL을 사용한다. Django와 MySQL에 연결하기위해서, MySQL server에 접속하기 위한 패키지인 mysql client를 설치해야 한다.
프로젝트를 위해 필요한 Package들을 설치한 후에 드디어 Django Project를 생성한다. 다음과 같은 코드를 입력하여 westarbucks 프로젝트를 생성하자.
django-admin startproject westarbucks
startproject
는 westarbucks
디렉토리를 새로 생성하고, 안의 내용물은 다음과 같다.
westarbucks/
manage.py
westarbucks
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
manage.py
가 위치한 곳이 Django 프로젝트의 디렉토리이고, 이곳에서 모든 작업이 시작된다.
모든 프로젝트는 필요한 세부 정보를 세팅해줘야 한다. 각 프로젝트는 프로젝트 만을 위한 정보들이 있는데 그것을 우리만을 위해, 우리가 쓸 수 있도록 몇 가지 설정을 해줘야 한다.
어떤 호스트나 클라이언트가 요청을 해도 누구든지 받아주겠다고 설정을 해야 한다.
ALLOWED_HOSTS = ['*']
admin
과 csrf
는 사용하지 않기 때문에 INSTALLED_APPS와 MIDDLESWARE에서 각각 주석처리를 해준다.
위에서 admin
을 안쓰기 위해 주석처리를 했는데 어디선가 admin
을 향하는 무언가가 있다. urls.py
는 요청이 들어온 url에 대한 관리를 해주는 파일인데, admin
을 사용하지 않는다고 했으므로 admin
코드들을 주석처리 해준다.
장고 설정에 존재하는 내용 중 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.py
를 settings.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
다음으로 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를 이용한 프로젝트 초기 개발 환경을 구상해봤다!