[Django] 5. Django MySQL 연동

김성산·2020년 11월 18일
0
post-thumbnail

안녕하세요! 레오입니다🤗 오늘은 프로젝트의 DB를 MySQL로 연결하겠습니다. 사용이 가능한 DB는 PostgreSQL, SQLite 등 다양하게 존재하는데요, 지금까지 공부한 DB가 MySQL밖에 없어서 MySQL을 사용하기로 했습니다!😛 이외에도 MySQL의 장점으로는 접근성이 좋고, 정보가 많아서 쉽게 찾아볼 수 있습니다. 따라서 MySQL 설치와 실행, 기본적인 문법은 다른 전문 블로그들에게 아웃소싱을 맡기고,,, django에서 연동하는 부분을 중점적으로 다루겠습니다. 그럼 바로 시작하겠습니다🏃🏃

MySQL database 생성

터미널에서 MySQL에 접속한 뒤, 데이터베이스를 생성하겠습니다.

mysql> create database myproject character set utf8mb4 collate utf8mb4_general_ci;
mysql> show databases;

  • myproject: 이 부분은 DB 이름을 적는 곳인데 저는 myproject라는 이름으로 생성하였습니다.

  • utf8: 인코딩은 utf-8로 합니다.

  • show databases: 생성된 DB를 확인할 수 있습니다.

MySQL 서버로 할 일은 다 끝났습니다! 넘나 간단,,
이제 Django에서 MySQL연동을 마무리하겠습니다🥁🥁

.env로 Setting 파일 수정

Docker 등 배포 과정에서 여러 개발 환경을 사용하다보면 설정 값을 여러번 작성하는 불편함과 보안 상의 문제가 존재합니다. 그래서 Setting 파일을 수정하기 전에 환경 변수 파일을 생성할텐데요, 이 파일에는 기본적으로 SECRET_KEY와 외부 API KEY, 외부 API의 아이디와 비밀번호 등을 저장할 예정입니다. 또한 이러한 정보들은 깃허브 등 외부에 노출되어서는 안되기때문에 따로 파일을 만들어서 이러한 정보들을 파일안에 넣어줍니다. Django에는 역시나 이에 대한 라이브러리가 존재합니다. 지금부터 비밀스럽고 조용하게 알아보겠습니다!🤫🤫

(django_venv)$ pip3 install django-environ

django-environ 라이브러리는 환경 변수 경로를 지정하여 해당 프로젝트 내부에서 어디서든 사용할 수 있도록 만들어줍니다. 라이브러리 설치가 끝났다면 settings.py가 있는 폴더(본 프로젝트에서는 myproject/myproject 폴더)에 .env 파일을 생성하고 먼저 gitignore에 이 파일을 추가합니다. 지금은 .env 파일 안에 SECRET키와 MySQL 주소만 들어가지만 나중에는 이메일 아이디와 비밀번호, 카카오 REST API KEY 등이 저장될 예정입니다.
👉더욱 자세한 django-environ 문서 보러가기

SECRET_KEY=YOUR_SECRET_KEY
DATABASE_URL=mysql://root:YOUR_PASSWORD@localhost:3306/YOUR_DATABASE_NAME

.env파일 안에는 위와 같이 작성합니다. YOUR_SECRET_KEY와 YOUR_PASSWORD, YOUR_DATABASE_NAME 이 세 부분이 개인에 맞게 작성되어야 하는 부분입니다! 이제 settings.py 파일로 이동하겠습니다.🏄‍♂️🏄‍♂️

(django_venv)$ pip3 install mysqlclient

먼저 터미널에서 mysqlclient 라이브러리를 다운받습니다. 그리고 settings.py 파일을 연 뒤 수정합니다.

#myproject/settings.py

import environ

env = environ.Env(
    DEBUG=(bool,True)
)
environ.Env.read_env()

...

SECRET_KEY = env("SECRET_KEY")

...

DATABASES = {
    'default': env.db()
}

...

이 라이브러리는 INSTALLED_APPS에 추가할 필요가 없습니당! 지금까지 MySQL 연동을 위한 코드들은 모두 작성하였습니다. 하지만 지금 runserver를 돌리면 migration이 필요하다는 빨간 글귀가 보입니다. 👿엥! 지난번에 했는데!👿 지난번에 했던 마이그레이션은 장고의 기본 제공 DB인 sqlite3에 저장되어있고 지금은 새로 DB를 연결하였기때문에 다시 마이그레이션을 해줘야합니다.

💡 에러가 발생했던 부분

SECRET_KEY 에러

분명 적어놨는데 찾지 못한다고 나왔습니당.. 거의 한 시간 정도 화를 눌러가면서 이리저리 뒤져도 해답을 못 찾았습니다.. 그래서 다시 한번 제대로 적으니까 작동! 이유는 'SECRET_KEY = ' 이 부분에서 공백으로 인해 못 알아 먹었던 것,,, 꼭 'SECRET_KEY='으로 공백없이 작성해주시길,,!

migrate를 한 뒤 runserver를 돌리면 문제없이 작동하는 것을 볼 수 있습니다! 그럼 이제 회원가입한 객체가 MySQL에 제대로 들어가는지 확인해 보겠습니다.

http://localhost:8000/user/signup/ 에서 테스트용 객체를 하나 만들었습니다. 문제없이 생성되었습니다. 이제 mysql에서 확인하겠습니다.

길쭉한 uuid로 인해,,, 끝이 다소 잘렸지만 정상작동 되는 것을 확인할 수 있습니다👏👏
이제 기초 세팅은 정말 다 된 것 같습니다 ㅎㅎ 다음 포스트에서는 꽁꽁 숨겨뒀던 로그인 API 기능을 구현하겠습니다. 긴 글 읽어주셔서 감사합니다!

profile
비단같은 마음씨

0개의 댓글