Django - 웹페이지 만들기(6) / MySQL 서버 연결

이승현·2023년 11월 19일

Django

목록 보기
7/8
post-thumbnail

이전에 ubuntu를 기반으로 설정한 서버가 있다.
지금까지는 sqlite를 활용했지만 같은 네트워크망에 있는 phpmyadmin을 활용해보고자 한다.
Django의 설정에서 다음과 같은 설정을 추가해야 하는데 하나씩 차근히 따라가면 된다.

1.(ubuntu) mysql 계정 생성 및 권한 부여

해당 설정을 하더라도 계정이 없거나 mysql 서버에 접근을 허용하지 않으면 DB를 사용할 수 없다.
특히 나처럼 같은 내부망이더라도 다른 기기에 서버가 구성되어 있더라도 django에서 다음과 같이 나타날 수 있다.
'IP주소' is not allowed to connect to this MySQL server

때문에 먼저 사용자 계정을 생성해야 한다.
먼저 ubuntu 터미널에서 mysql을 입력하고 mysql을 접근한다.
SQL의 경우 세미콜론을 항상 주의하자.

CREATE USER '아이디'@'IP주소' identified by '패스워드';
해당 명령어를 통해 아이디와 특정 IP에서 패스워드를 기반으로 접근할 수 있게된다.
IP 주소에 '%'를 넣게 되면 모든 IP 주소에 대해 허용이라고 보면 된다.
ex) CREATE USER 'leesh'@'%' identified by 'passwordissimple';

GRANT ALL PRIVILEGES ON *.* to '아이디'@'IP주소';
해당 명령어는 대상 계정에 대해 권한을 부여하는 sql 명령어에 해당한다.
*.*의 경우 어느 데이터베이스에 대해 권한을 부여할지 의미하는데 *을 입력하면 모든 데이터베이스와 테이블에 대해 권한을 설정한다.
ex) GRANT ALL PRIVILEGES ON *.* to 'leesh'@'%';

FLUSH PRIVILEGES;
권한 수정을 적용하게 된다.


2.(ubuntu) mysql 포트 설정 및 개방

mysql이 먼저 작동하는지 확인해야 한다.

sudo systemctl status mysql
해당 명령어는 지금 sql이 잘 작동하고 있는지를 확인할 수 있다.

vim /etc/mysql/mysql.conf.d/mysqld.cnf
다음 해당 명령어로 파일을 열어 수정해야 한다.

port 부분은 주석처리를 제거해주고 필요에 따라 포트 번호를 바꿔주면 된다.
bind-addressmysql-bind-address는 기본적으로 localhost로 되어있다. 즉 다른 ip에서의 접속이 허용되지 않는데 이를 주석처리 해준다.

포트를 열었기때문에 이에 대해 포트를 개방해주어야 한다.
sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
sudo iptables -I OUTPUT 1 -p tcp --dport 3306 -j ACCEPT
해당 명령어를 통해 ip를 열어줄 수 있다.

sudo systemctl restart mysql을 통해 mysql을 재시작주면 된다.

해당 포트가 잘 열렸는지는 netstat -tnlp | grep 3306을 입력해주면 된다.

그럼 잘 열렸음을 확인할 수 있다.


3.(phpmyadmin) 데이터베이스 생성

이제 'ip주소'/phpmyadmin로 접속하고 생성한 계정으로 접근할 수 있다.

기본적인 mysql 관련 데이터베이스들을 확인할 수 있다.

사용할 데이터베이스를 생성해야 한다.
여기서 중요한 점은 데이터베이스와 데이터테이블의 차이다.

하나의 데이터는 하나의 행에 해당하고 열이라는 속성을 가진다.
이러한 데이터들의 모임이 데이터테이블을 구성한다.
데이터테이블들을 관리하기 위한 모음이 데이터베이스에 해당한다.


4.(django) mysql 연동

먼저 터미널에서 pip install Mysqlclient를 통해 mysql client를 설치해준다.

📑 djangoProject/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '데이터베이스 이름',
        'USER': '사용자이름',
        'PASSWORD': '암호',
        'HOST': 'IP주소',
        'PORT': '포트번호',
    }
}

다음 이전에 데이터베이스에 대한 접근 부분을 수정해주어야 한다.
생성한 데이터베이스의 이름부터 생성한 mysql 계정 정보, 서버 PC의 ip, 포트번호까지 입력해주고 저장해주면 된다.

작성된 데이터베이스와의 연동이 잘 되는지 확인하기 위해서는 다음 코드로 확인해볼 수 있다.
오류가 있다면 어떤 오류 때문인지 잘 알려준다.
python manage.py inspectdb

여기까지 한 다음 당연히 데이터베이스에 지금까지 작성한 models.py를 적용해주어야 한다.
python manage.py makemigrations
python manage.py migrate


데이터베이스에 테이블들이 잘 적용되었음을 확인할 수 있다.

0개의 댓글