[장고] MySQL 연동

소요 시간: 3분

데이터베이스와의 원활한 연동은 새로운 프로젝트를 시작할 때 가장 중요한 작업 중 하나입니다. 프로젝트 진행 중 데이터베이스를 변경하는 것은 번거로울 수 있으므로, 처음부터 올바르게 설정하는 것이 중요합니다. 특히, Django에서 migrate 명령어를 한 번이라도 실행한 이후에는 데이터베이스 변경이 복잡하고 어려워집니다. 따라서 처음부터 MySQL과의 연동을 최우선으로 고려해야 합니다.

이번 글에서는 Django와 MySQL을 연동하는 방법을 단계별로 알아보겠습니다. MySQL과의 연동을 위해 필요한 라이브러리 설치부터 Django 설정 변경까지의 과정을 다룹니다.


MySQL 연동 준비하기

1. MySQL과 Django 연동을 위한 라이브러리 설치

먼저, MySQL과의 연동을 위해 필요한 라이브러리를 설치해야 합니다. 여기서는 mysqlclient 라이브러리를 사용합니다. mysqlclient는 Django에서 MySQL과의 통합을 가능하게 하는 중요한 역할을 합니다.

Homebrew를 이용한 MySQL 설치

$ brew install mysql
$ brew install openssl

커넥터 설치

$ pip3 install mysqlclient

mysqlclient는 Python에서 MySQL 데이터베이스와 상호작용하기 위한 드라이버입니다. 이 드라이버는 Django에서 MySQL과의 연동을 지원하기 위해 사용됩니다. 여러 MySQL DB API 드라이버 중에서 mysqlclient가 널리 사용되는 이유는 Django에서 공식적으로 지원되기 때문입니다.

2. MySQL 데이터베이스 생성 및 설정

MySQL 서버를 실행하고, MySQL 클라이언트를 사용하여 새로운 데이터베이스를 생성합니다. 또한, 데이터베이스를 다룰 수 있도록 관리자 계정과 비밀번호를 설정합니다.

MySQL 서버 실행

$ mysql.server start

MySQL 클라이언트를 통해 데이터베이스 접속

$ sudo mysql -u root

여기서 sudo는 루트 권한으로 MySQL에 접속하는 명령어입니다.

새 데이터베이스 생성

mysql> create database myblog;

위 명령어를 통해 myblog라는 이름의 데이터베이스를 생성합니다.


데이터베이스

MySQL에서 직접 데이터베이스를 생성하고 이어서 새로운 관리자 계정을 만든다. 그 다음 생성된 계정에 수정, 추가, 삭제 등과 관련된 권한을 부여한다.

새 데이터베이스 생성

1. 데이터베이스에 접속해서 테이터나 데이터를 생성하거나 삭제하는 등 관련된 작업을 수행하려면 먼저 mysql 서버를 실행해야 한다.

$ mysql.server start

2. 그 다음 MySQL에 접속한다. 명령행 클라이언트를 사용하거나, GUI 도구를 통해 접속할 수 있다. 커맨드로 MySQL에 접속하는 방법은 다음과 같다:

$ sudo mysql -u root

※ sudo: superuser do의 약자. 루트에 상응하는 권한 수준으로 명령어를 실행. 루트 계정으로 MySQL에 접속한다.

예) 시스템 종료, 재부팅, 시스템 파일 편집, 방화벽 오픈, 패키지 설치, 일부 서비스 실행 등

※ 여기서 -u은 MySQL 계정명을 지정하는 옵션이다. 형식은 다음과 같다.

$ mysql -u {MYSQL_계정명} -p {접속할_데이터베이스명}

3. 새 데이터 베이스를 생성한다. 명령어 형식은 다음과 같다.

mysql> create database [데이터베이스명];

예를 들어, myblog라는 이름을 가진 데이터베이스를 생성하고 싶다면 아래와 같이 명령어를 입력한다.

mysql> create database myblog;

4. 생성되었는지 데이터베이스 리스트를 조회해 확인한다.

mysql> show databases;

새 계정 생성 및 권한 부여

1. 데이터베이스를 관리할 계정을 새로 생성한다. 계정 생성 명령어는 다음과 같습니다.

mysql> create user 'username'@'localhost' identified by 'your_password';

예를 들어 계정 이름이 myblog_admin이고 비밀번호가 abcd이면 다음과 같이 명령어를 입력합니다.

mysql> create user 'myblog_admin'@'localhost' identified by 'abcd';

계정을 조회하면 제대로 생성되었는지 확인할 수 있습니다.

mysql> select user, host from mysql.user;
+-------------------+-----------+
| user              | host      |
+-------------------+-----------+
| myblog_admin      | localhost |
| mysql.infoschema  | localhost |
| mysql.session     | localhost |
| mysql.sys         | localhost |
| root              | localhost |
+-------------------+-----------+

5 rows in set (0.00 sec)

2. 권한 부여

위 명령어로 새로 생성한 계정에 myblog 데이터베이스에 대한 모든 권한을 부여합니다.

mysql> grant all privileges on TestDB.* to testuser@'localhost';

예시)

mysql> grant all privileges on myblog.* to ’superuser’@'localhost';

 참고로 grant 명령어로 권한을 주었다면 flush privileges;을 하지 않아도 됩니다.


장고 반영

이제 Django 프로젝트를 MySQL 데이터베이스와 연동하도록 설정합니다.

1. settings.py 파일 수정

Django 프로젝트의 settings.py 파일을 열고 데이터베이스 설정 부분을 다음과 같이 수정합니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myblog',  # 생성한 데이터베이스 이름
        'USER': 'myblog_admin',  # 생성한 사용자 이름
        'PASSWORD': 'abcd',  # 사용자 비밀번호
        'HOST': 'localhost',  # 로컬호스트
        'PORT': '3306',  # MySQL의 기본 포트 번호
    }
}

데이터베이스 반영

이제 Django의 migrate 명령어를 사용하여 MySQL 데이터베이스에 변경 사항을 반영합니다.

$ python3 [manage.py](http://manage.py/) makemigrations
$ python3 [manage.py](http://manage.py/) migrate

이 과정은 Django 프로젝트에 필요한 테이블들을 자동으로 생성합니다.


결론

이제 MySQL 데이터베이스와 Django 프로젝트의 연동이 완료되었습니다. MySQL과의 연동을 통해 더 강력한 데이터베이스 기능을 활용할 수 있으며, 안정적인 데이터 관리를 할 수 있습니다. 초기 설정을 올바르게 하면 프로젝트 진행 중 데이터베이스 변경으로 인한 불편함을 최소화할 수 있습니다. 이 가이드를 통해 여러분의 Django 프로젝트가 더욱 탄탄하게 시작되기를 바랍니다.

장고 리스트