미니콘다 가상환경 구축을 완료하고 프로젝트를 만들었다면 데이터베이스와 연동을 해보자. 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;
Ubuntu 20.04에서 Django와 MySQL을 설정하는 것은 많은 웹 개발자들에게 중요한 단계입니다. 처음부터 시작한다면, Ubuntu에서 MySQL 설치 가이드가 훌륭한 참고자료가 될 것입니다. 이 가이드는 Ubuntu 24.04를 기준으로 작성되었지만, 그 단계는 20.04에서도 완벽하게 작동합니다.
mysql_secure_installation
을 사용한 MySQL 보안 설정, 사용자 역할 설정, 데이터베이스 생성 등 Django와 MySQL을 통합하기 전에 필요한 모든 과정을 상세히 설명하고 있습니다.MySQL 설치 후, Django와
mysqlclient
를 사용하여 연결하는 과정은 간단합니다. 이 가이드는settings.py
파일을 적절히 설정하는 방법,INSTALLED_APPS
구성, 그리고 초기 설정을python manage.py migrate
로 마이그레이션하는 과정을 강조합니다. 이러한 단계는 Django가 데이터베이스와 원활히 통신할 수 있도록 보장하는 데 필수적입니다.또한,
SECRET_KEY
와 같은 민감한 정보를 환경 변수로 관리하는 것은 프로덕션 환경에서 반드시 필요한 작업입니다. 환경 변수를 내보내고 이를settings.py
에서 접근하는 방법은 보안을 강화하면서도 레포지토리를 깨끗하게 유지할 수 있는 최선의 방법입니다.배포 중 권한 문제를 방지하기 위해 SELinux를 비활성화해야 할 경우, CentOS의 SELinux 비활성화 가이드를 참조하세요. 이 가이드는 CentOS를 기준으로 작성되었지만, 기본 개념은 다른 플랫폼에서도 유사하게 적용됩니다.
Django의 유연성과 강력한 MySQL 백엔드를 결합하면 확장 가능하고 안전한 애플리케이션을 구축할 수 있습니다. 이러한 포괄적인 가이드에 접근할 수 있다면 설치부터 배포까지 모든 과정이 원활하게 진행될 것입니다.