02. PostgreSQL 연동

MySQL 연동

패키지 설치

시스템 패키지

파이썬 MySQL 연동 라이브러리 패키지는 직접 빌드해야 하므로 아래의 시스템 패키지 설치가 필요합니다.

$ sudo apt-get install build-essential python3-dev libmysqlclient-dev

파이썬 패키지

독립된 가상환경에서 mysqlclient 파이썬 패키지를 설치합니다.

(venv) $ pip install mysqlclient

MySQL 접속 설정

설정 파일 수정

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testdb',
        'USER': 'ham',
        'PASSWORD': 'pass',
        'HOST': 'localhost',
        'PORT': '',
    }
}

예시의 설정 정보는 다음과 같습니다.

  • 데이터베이스 이름: testdb
  • 사용자 역할: egg
  • 비밀번호: pass

데이터베이스 마이그레이션 및 슈퍼유저 생성

(venv) $ python manage.py makemigrations --settings=conf.settings.production
(venv) $ python manage.py migrate --settings=conf.settings.production
(venv) $ python manage.py createsuperuser --settings=conf.settings.production

일반적으로 로컬 테스트 환경에서 SQLite를 사용하지만 실제 RDBMS를 연결하는 경우는 운영서버인 경우가 많아서 --settings 옵션으로 알맞은 설정 프로필을 선택해야할 수도 있습니다.

마이그레이션 결과 확인

데이터베이스 마이그레이션 명령으로 testdb 데이터베이스 안에 기본 테이블이 만들어지므로 이를 확인하면 데이터베이스 연동이 올바로 되었는지 알 수 있습니다.

콘솔 접속

$ mysql -uham -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

데이터베이스 목록

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| testdb             |
+--------------------+
2 rows in set (0.00 sec)

testdb 데이터베이스 연결

mysql> USE testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

testdb 데이터베이스 내 테이블 목록 확인

mysql> SHOW TABLES;
+-------------------------------+
| Tables_in_pythonstory         |
+-------------------------------+
| account_emailaddress          |
| account_emailconfirmation     |
| auth_group                    |
| auth_group_permissions        |
| auth_permission               |
| auth_user                     |
| auth_user_groups              |
| auth_user_user_permissions    |
| django_admin_log              |
| django_content_type           |
| django_migrations             |
| django_session                |
| django_site                   |
| socialaccount_socialaccount   |
| socialaccount_socialapp       |
| socialaccount_socialapp_sites |
| socialaccount_socialtoken     |
+-------------------------------+
17 rows in set (0.00 sec)

PostgreSQL 연동

패키지 설치

시스템 패키지

파이썬 PostgreSQL 연동 라이브러리 패키지는 직접 빌드해야 하므로 아래의 시스템 패키지 설치가 필요합니다.

sudo apt-get install build-essential python3-dev libpq-dev

파이썬 패키지

독립된 가상환경에서 psycopg2-binary 파이썬 패키지를 설치합니다.

(venv) $ pip install wheel psycopg2-binary

psycopg는 가장 널리 쓰이는 PostgreSQL 파이썬 어댑터입니다.. 파이썬 DB API 2.0 명세(specification)를 모두 구현하고 여러 스레드가 같은 접속을 공유할 수 있어 스레드 안전(thread-safe)합니다. INSERT, UPDATE를 동시에 대량 처리하고 커서를 대량 만들고 없앨 수 있는 멀티스레드 애플리케이션을 만드는데 적합합니다.

Psycopg2는 효율과 보안을 위하여 대부분 C 언어로 구현한 libpq의 래퍼(wrapper) 라이브러리입니다. 클라이언트 커서, 서버 커서, 비동기 통신, 통지, "COPY TO/COPY FROM" 지원 등 다양한 기능을 지원합니다. Psycopg2는 유니코드와 파이썬3에서 잘 동작합니다. 바이너리 패키지는 개발/테스트 단계에서 가져다 쓰기 편리하지만 운영서버에서는 직접 빌드하여 쓰는 것을 권장합니다.

PostgreSQL 접속 설정

설정 파일 수정

conf/settings.py 파일에서 데이터베이스 연결 설정을 SQLite에서 PostgreSQL로 바꾸기 위해 아래와 같이 수정한다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'testdb',
        'USER': 'egg',
        'PASSWORD': 'pass',
        'HOST': 'localhost',
        'PORT': '',
    }
}

예시의 설정 정보는 다음과 같습니다.

  • 데이터베이스 이름: testdb
  • 사용자 역할: egg
  • 비밀번호: pass

데이터베이스 마이그레이션 및 슈퍼유저 생성

MySQL과 마찬가지로 PostgreSQL에서도 동일하게 마이그레이션과 슈퍼유저 생성 작업을 할 수 있습니다.

(venv) $ python manage.py makemigrations --settings=conf.settings.production
(venv) $ python manage.py migrate --settings=conf.settings.production
(venv) $ python manage.py createsuperuser --settings=conf.settings.production

마이그레이션 결과 확인

데이터베이스 마이그레이션 명령으로 testdb 데이터베이스 안에 기본 테이블이 만들어지므로 이를 확인하면 데이터베이스 연동이 올바로 되었는지 알 수 있습니다.

이 때 psql 명령어를 사용하기 위해서는 sudo 명령어를 쓸 수 있는 사용자 ham으로 로그인해서 명령해야 합니다.

콘솔 접속

sudo -u postgres psql
psql (9.5.5)
Type "help" for help.

데이터베이스 목록

\list 명령어로 데이터베이스 목록을 확인하고 testdb 존재를 확인합니다.

postgres=# \list
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 testdb    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | joe=CTc/postgres
(4 rows)

testdb 데이터베이스 연결

\c 명령어로 testdb에 연결합니다.

postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".

testdb 데이터베이스 내 테이블 목록 확인

Django 애플리케이션이 기본적으로 마이그레이션 설치하는 테이블 목록을 \dt 명령어로 확인할 수 있습니다.

testdb=# \dt
                  List of relations
 Schema |            Name            | Type  | Owner
--------+----------------------------+-------+-------
 public | auth_group                 | table | joe
 public | auth_group_permissions     | table | joe
 public | auth_permission            | table | joe
 public | auth_user                  | table | joe
 public | auth_user_groups           | table | joe
 public | auth_user_user_permissions | table | joe
 public | django_admin_log           | table | joe
 public | django_content_type        | table | joe
 public | django_migrations          | table | joe
 public | django_session             | table | joe
(10 rows)

최종 수정일시: 2019-02-14 23:02

blog comments powered by Disqus