미니콘다 가상환경 구축을 완료하고 프로젝트를 만들었다면 데이터베이스와 연동을 해보자. Django에서는 기본 데이터베이스로 sqlite3
가 제공되는데 Mysql
로 데이터베이스를 변경할 것이다. Ubuntu 20.04.1 버전 기준이다.
(생성된 가상환경의 이름은 starbucks, 프로젝트 이름도 starbucks이다.)
아래사이트 참고하여 순서대로 mysql설치를 진행한다.
참고사이트1
참고사이트2
mysql설치를 완료하였으면 프로젝트 가상환경에서 mysqlclient
를 깔아준다.
(myclient는 이후에 MySQL server에 접속하기 위한 package이다)
sudo apt-get install libmysqlclient-dev
python3 -m pip install mysqlclient # 또는 pip install mysqlclient
먼저 mysql 서버가 켜져있는지 확인한다.
service mysql status
mysql 서버를 켜고 끄는 명령어는 다음과 같다.
service mysql start
service mysql stop
mysql 서버에 들어가서 데이터베이스를 생성한다.
(이름 뒤에 붙은 인자는 모든 문자 형태를 MySQL에 저장할 수 있게 해주는 명령어이다.)
mysql -u root -p
mysql> create database starbucks character set utf8mb4 collate utf8mb4_general_ci;
모든 사용자의 IP를 허용한다.
ALLOWED_HOSTS = ['*']
사용하지 않는 요소(admin, csrf, auth)에 대해 주석처리를 한다.
INSTALLED_APPS = [
# 'django.contrib.admin',
# 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
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',
]
Database와 연동한다.
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DATABASE 명',
'USER': 'root',
'PASSWORD': 'DB접속용 비밀번호',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
맨아래에 나와있는 구문을 다음과 같이 수정한다.
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = False
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# REMOVE_APPEND_SLASH_WARNING
APPEND_SLASH = False
settings.py에서 시간대를 한국시간대로 적용해준 다음 APPEND_SLASH = False를 해주면 슬래시를 붙여주는 위치를 자유롭게 설계 가능하다.
USE_TZ가 False면 모든 경우 저장할때도 적용된다고 하니 false로 설정한다.
장고 공식문에서는 SECRET_KEY를 노출하면 보안에 취약하기 때문에 노출하지 말라는 문구가 적혀있다.
그래서 github에 push를 할때는 자동으로 push되지 않도록 해야하는데,
그러기 위해선 .gitignore
파일에서 추가하고 싶지 않은 파일이나 디렉토리를 관리함으로써 모든파일이 push되지 않도록 해야한다.
두가지 방법이 있는데, 개인적으로는 환경 변수로 관리하는 것이 더 편리하였다.
왜냐하면 비밀파일로 관리하게 되면 .gitignore파일안에 push하기 전에 비밀파일을 추가해줘야 하는 번거로움이 있다.
따라서 다음과 같이 환경변수로 관리해보자.
# vim ~/.zshrc
export DJANGO_SECRET_KEY='비밀 키 입력'
source ~/.zshrc
# 값 출력해보기
echo $DJANGO_SECRET_KEY
# vi 장고의 settings.py
import os
SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]
urls.py 파일도 까먹지 말고 수정해야 한다. 원래 있던 내용을 아래과 같이 수정하자.
from django.urls import path
urlpatterns = [
]
migrate해서 Mysql Server와 연동이 잘 되었는지 확인해보자.
(여기에서 migrate 명령을 실행하는 이유는 Django와 함께 기본적으로 설치된 앱들이 필요로 하는 테이블을 생성해야 하기 때문이다. 기본 앱들은 setting.py에 INSTALLED_APPS에서 확인 가능하다.)
python manage.py migrate
Mysql에서 테이블이 만들어졌는지 확인해보자.
mysql -u root -p
mysql> use starbucks;
mysql> show tables;