Lite한 수준에서의 사이트를 제작한다면 기본적으로 제공되는 sqlite를 이용해도 무관하다.

 

하지만 다른 DB를 사용해야할만큼 규모가 있거나 더 익숙한 DB를 사용하고 싶다면 설정을 변경해주어야한다.

 

 

이 글에서는 mysql과 연동해보겠다.

 

 

 

 

1. mysql 설치

apt install mysql-server mysql-client

mysqld 정상 작동 확인

 

 

 

2. mysql 로그인

mysql -u root -p

password는 설정되어있지 않으므로 그냥 엔터 누르면 로그인된다.

mysql> CREATE DATABASE django_test_db;

mysql> CREATE USER test_user@localhost IDENTIFIED BY 'test_password';
mysql> GRANT ALL PRIVILEGES ON *.* to test_user@localhost IDENTIFIED BY 'test_password';
mysql> FLUSH PRIVILEGES;
mysql> quit

 

 

3. 연동을 위한 추가 필요 툴 설치

apt install libmysqlclient-dev

pip3 install mysqlclient

 

 

 

4. pymysql을 이용할 수도 있다. (아래 설정과 함께)

pip3 install pymysql

vim saja_site/settings.py

=====================

import pymysql

 

pymysql.install_as_MySQLdb()

=====================

이외에도 인터페이스가 더 있지만 공식 문서에서는 mysqlclient 사용을 권장한다.

 

 

 

5. mysql과 django 연동

vim saja_site/settings.py

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_test_db',    # DB명
        'USER': 'test_user',    # 데이터베이스 계정
        'PASSWORD': 'test_password',    # 계정 비밀번호
        'HOST': 'localhost',    # 데이테베이스 주소(IP)
        'PORT': '3306',    # 데이터베이스 포트(보통은 3306)
    }
}

만약 git을 이용해 개발중이라면 보안을 위해 아래와 같이 진행

별도의 mysql.cnf 파일을 생성해주고,

# mysql.cnf

[client]
database = DB명
host = 데이테베이스 주소(IP)
user = 데이터베이스 계정
password = 계정 비밀번호

아래와 같이 settings.py 파일을 수정해준다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': os.path.join(SECRET_DIR, "mysql.cnf"),
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'" # strict mode 설정 추가
        }
    }
}

 

 

 

6. migrate 진행

python3 manage.py migrate

migrate 명령어는 saja_site/settings.py의 데이터베이스 설정과 app에 함께 제공되는 데이터베이스 migrations에 따라서 필요한 데이터베이스 테이블을 생성하여 세팅해준다.

mysql -u root -p 로 들어가 확인을 해보면 비어있던 django_test_db 라는 database 안에 각종 table들이 자동생성되었다.

 

 

 

이것으로 mysql DB와 django의 연동을 정상적으로 완료하였다.

 

다음 글에서는 model 만드는 파트에 대한 내용을 넣겠다.

 

 

+ Recent posts