[Django] Django 시작하기 - Mysql & 초기세팅

김주현·2021년 12월 3일
0

[Django]

목록 보기
3/8
post-thumbnail

미니콘다 가상환경 구축을 완료하고 프로젝트를 만들었다면 데이터베이스와 연동을 해보자. Django에서는 기본 데이터베이스로 sqlite3가 제공되는데 Mysql로 데이터베이스를 변경할 것이다. Ubuntu 20.04.1 버전 기준이다.

(생성된 가상환경의 이름은 starbucks, 프로젝트 이름도 starbucks이다.)

Mysql 설치하기

  1. sudo apt update
  2. sudo apt install mysql-server
  3. sudo mysql_secure_installation (optional)

아래사이트 참고하여 순서대로 mysql설치를 진행한다.
참고사이트1
참고사이트2

mysqlclient 설치하기

mysql설치를 완료하였으면 프로젝트 가상환경에서 mysqlclient를 깔아준다.
(myclient는 이후에 MySQL server에 접속하기 위한 package이다)

sudo apt-get install libmysqlclient-dev
python3 -m pip install mysqlclient # 또는 pip install mysqlclient

Database 생성

먼저 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;

starbucks/settings.py 설정하기

모든 사용자의 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 관리


장고 공식문에서는 SECRET_KEY를 노출하면 보안에 취약하기 때문에 노출하지 말라는 문구가 적혀있다.

그래서 github에 push를 할때는 자동으로 push되지 않도록 해야하는데,
그러기 위해선 .gitignore 파일에서 추가하고 싶지 않은 파일이나 디렉토리를 관리함으로써 모든파일이 push되지 않도록 해야한다.

  • 환경 변수로 관리
  • 비밀 파일로 관리

두가지 방법이 있는데, 개인적으로는 환경 변수로 관리하는 것이 더 편리하였다.
왜냐하면 비밀파일로 관리하게 되면 .gitignore파일안에 push하기 전에 비밀파일을 추가해줘야 하는 번거로움이 있다.
따라서 다음과 같이 환경변수로 관리해보자.

  • 사용하는 쉘의 설정파일에 등록한다
# vim ~/.zshrc
export DJANGO_SECRET_KEY='비밀 키 입력'
  • 터미널 재실행 또는 source를 통해 쉘 설정파일을 반영해준다.
source ~/.zshrc
# 값 출력해보기
echo $DJANGO_SECRET_KEY
  • echo의 결과로 비밀키가 출력이 된다면 환경변수로 저장이 잘 된 것이다.
    이렇게 저장한 환경변수를 장고의 settings.py의 SECRET_KEY의 값으로 지정해주면 된다. os 모듈을 임포트하고 environ 함수를 통해 접근할 수 있다.
# vi 장고의 settings.py
import os

SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]

starbucks/urls.py 수정

urls.py 파일도 까먹지 말고 수정해야 한다. 원래 있던 내용을 아래과 같이 수정하자.

from django.urls import path

urlpatterns = [
]

첫 번째 migrate으로 연동 체크

migrate해서 Mysql Server와 연동이 잘 되었는지 확인해보자.

(여기에서 migrate 명령을 실행하는 이유는 Django와 함께 기본적으로 설치된 앱들이 필요로 하는 테이블을 생성해야 하기 때문이다. 기본 앱들은 setting.py에 INSTALLED_APPS에서 확인 가능하다.)

python manage.py migrate

Mysql에서 테이블이 만들어졌는지 확인해보자.

mysql -u root -p
mysql> use starbucks;
mysql> show tables;

0개의 댓글