(Django) MySQL 연동하기
AWS EC2에 구축된 MYSQL로 장고와 연동시키는 과정이다
1. mysqlclient를 장고에 설치한다
파이썬에서 mysql서버와 통신을 할 수 있게 해주는 파이썬용 “데이터베이서 커넥터(mysqlclient)”를 설치한다.
$ pip install mysqlclient
이때 주의해야 할 점은 가상환경에서 바로 설치하면 에러가 발생할 수 있다. 이럴때는 아래와 같이 apt-get로 아래 명령어로 다시 설치후 하면 된다
$ sudo apt-get install libmysqlclient-dev
$ pip install mysqlclient
2. settings.pt 설정변경
장고의 settings에서 db에 관련된 항목을 mysql과의 연동을 위해 변경해주면 된다. 이때 나는 AWS EC2에 생성한 mysql과 연동을 하였다. (aws ec2로 db연동하는 방법은 여기를 참고해보자). 2번은 db의 이름, 3번은 mysql의 계정, 4번은 mysql의 비밀번호로 자신이 설정한 비밀번호를 여기다 작성하면 된다.
아래와 같은 내용은 비밀번호같이 보안에 관련한 정보가 있기 때문에 새롭게 settings를 만들어 import하거나 .env를 사용해주자. 나는 해당 내용들을 .env파일에 작성하여 그곳에서 작성해놓은 변수들을 가져다 쓰는 방식으로 해주었다
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql', [1]
'NAME': '{DB 이름}', [2]
'USER': 'root', [3]
'PASSWORD': '{PASSWORD}', [4]
'HOST': 'localhost', [5]
'PORT': '3306', [6]
}
이후에 makemigrations와 migrate를 해주면 mysql과의 연동은 끝났다 -! 이후에 mysql workbench에 들어가서 내가 작성한 테이블이 잘 들어가 있는지 확인해보자
.env와 my_settings.py 사용해서 password 등 중요한 정보 보안하기
1. my_settings.py 를 config 안에 생성한다.
이곳에서 DATABASES를 dict형태로 정의한후 .gitginore에 해당 파일을 넣어준다
(초반에 settings 자체를 넣었다가 팀원과 함께 프로젝트 할때 문제가 발생하여 애를 살짝 먹었었다 ! settings도 공유할 상황이 생기니 꼭 암호화가 필요한 것들만 따로 빼주자)
# my_settings.py
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': '{DB 이름}',
'USER': 'root',
'PASSWORD': '{PASSWORD}',
'HOST': 'localhost',
'PORT': '3306',
}
# settings.py
import my_settings
DATABASES = my_settings.DATABASES
2. .env파일을 생성하여 env로 값이 저장되어 있는 변수명을 가져와 사용한다.
이때 env의 명령어를 사용하기 위해 pip install django-environ을 설치한다
# .env
ENGINE='django.db.backends.mysql',
NAME= '{DB 이름}',
USER= 'root',
PASSWORD= '{PASSWORD}',
import environ
import my_settings
env = environ.Env()
environ.Env.read_env()
DATABASES = {
'default' : {
'ENGINE': env('ENGINE'),
'NAME': env('NAME'),
'USER': env('USER'),
'PASSWORD': env('PASSWORD'),
'HOST': 'localhost',
'PORT': '3306',
}
3. 나는 AWS EC2에 Mysql을 생성하여 해당 db와 연결하여 썼는데 이때 더욱 간단하게 연결할 수 있다
# .env
DATABASE_URL=mysql://root:{연결한 서버의 이름}@{db의 퍼블릭 주소}:3306/{연결할 db의 이름}
# settings.py
DATABASES = {
'default' : env.db()
}