[장고] PostgreSQL 연동하기
장고(Django)는 강력하고 유연한 웹 프레임워크로, 다양한 데이터베이스 시스템과의 연동이 가능하다. 여러 데이터베이스 소프트웨어 중에서 PostgreSQL은 성능, 확장성, 기능 등 다양한 면에서 우수한 선택지 중 하나로 꼽힙니다.
이번 블로그 글에서는 PostgreSQL을 사용하여 장고 프로젝트를 구성하는 방법에 대해 알아보자.
PostgreSQL을 사용하는 이유
PostgreSQL은 대규모 데이터베이스 작업에 적합한 확장성이 뛰어난 오픈 소스 데이터베이스입니다. 특히, Django 애플리케이션이 규모가 크거나 높은 트래픽을 처리해야 할 때 PostgreSQL은 효율적으로 작동할 수 있습니다. 이 글에서는 PostgreSQL을 통해 장고 프로젝트를 더욱 견고하게 만드는 방법을 살펴보겠습니다.
실제 장고 프로젝트에서 sqlite3 대신 MySQL이나 PostgreSQL을 사용하는 이유
PostgreSQL 설치 및 초기 설정
Homebrew 업데이트 및 Python 업그레이드
먼저 Homebrew를 업데이트하고 Python을 최신 버전으로 업그레이드해야 합니다.
$ brew update
그 다음 파이썬을 최신 버전으로 업그레이드합니다.
$ brew upgrade python3
만약 Mac에서 오류가 발생하면 다음 명령어를 실행합니다.
$ xcode-select --install
파이썬 라이브러리 관리자도 최신 버전으로 업그레이드합니다.
$ pip3 install --upgrade pip
libpq를 설치합니다.
$ brew install libpq
libpq는 클라이언트와 서버인 PostgreSQL을 연결하는 라이브러리입니다.
PostgreSQL를 설치합니다.
$ brew install postgresql
설치가 완료되었는지 확인하려면 다음 명령어를 사용합니다.
$ brew list
==> Formulae
autoconf ... libpq postgresql
...
==> Casks
adoptopenjdk8
PostgreSQL와 파이썬을 연결하는 psycopg2를 설치합니다.
$ pip3 install psycopg2
만약 에러가 발생하면 binary 버전으로 psycopg2를 설치합니다.
$ pip3 install psycopg2-binary
설치되었는지 확인합니다.
$ postgres -V
postgres (PostgreSQL) 13.2
PostgreSQL 서버를 실행합니다.
$ pg_ctl -D /usr/local/var/postgres start
컴퓨터를 켤 때마다 자동으로 PostgreSQL 서버를 시작하려면 다음 명령어를 사용합니다.
$ pg_ctl -D /usr/local/var/postgres start && brew services start postgresql
데이터베이스와 관리자 계정 생성하기
PostgreSQL 서버가 실행된 상태에서 데이터베이스와 사용자를 생성합니다.
데이터베이스 생성
PostgreSQL를 실행합니다.
$ psql postgres
서버가 닫혀있으면 실행되지 않습니다.
pg_ctl -D /usr/local/var/postgres start
export PGDATA='/usr/local/var/postgres'
pg_ctl status
pg_ctl 명령은 PostgreSQL 데이터베이스 서버 (postgres) 제반 작업을 수행
새 데이터베이스를 생성합니다.
CREATE DATABASE database_name;
예:
postgres=# CREATE DATABASE myblog;
새 데이터베이스가 만들어졌는지 확인합니다.
postgres=# \list
/(슬래쉬가)가 아닌 \(역슬래쉬, 엔터 위에 있다)입니다.
생성한 데이터베이스로 이동합니다.
\c database_name;
예:
postgres=# \c myblog;
새 데이터베이스로 이동하면 postgres가 데이터베이스의 이름으로 변경됩니다.
myblog=#
데이터베이스를 만들었으니 다음부터는 바로 이 데이터베이스를 불러올 수 있습니다.
$ psql myblog;
사용자 만들기
해당 데이터베이스를 관리할 사용자를 생성합니다.
CREATE USER user_name WITH PASSWORD 'password';
예)
myblog=# CREATE USER mike WITH PASSWORD '1234';
사용자가 생성되면 !CREATE ROLE이 출력된다.
인코딩 방식, 타임존 등 기타 사항을 설정한다.
alter role 유저_이름 set client_encoding to 'utf-8';
alter role 유저_이름 set timezone to 'Asia/Seoul';
grant all privileges on database 데이터베이스_이름 to 유저_이름;
예시)
alter role mike set client_encoding to 'utf-8';
alter role mike set timezone to 'Asia/Seoul';
grant all privileges on database myblog to mike;
PostgreSQL를 종료합니다.
\q
장고 프로젝트와 PostgreSQL 연동하기
settings.py 파일 설정
장고 프로젝트의 settings.py 파일을 열고 DATABASES 설정을 PostgreSQL로 변경합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '데이터베이스_이름', # (ex: 'myblog')
'USER': '유저_이름', # (ex: 'mike')
'PASSWORD': '패스워드', # (ex: '1234')
'HOST': 'localhost', # 로컬호스트
'PORT': '5432', # 로컬호스트의 PostgreSQL 디폴트 포트: 5432
}
}
실제 서버로 배포시 HOST와 POST는 해당 서버에 맞춰야합니다. 이 둘의 값을 알려줍니다.
데이터베이스 마이그레이션
데이터베이스를 적용합니다.
$ python3 manage.py makemigrations
$ python3 manage.py migrate
이제 장고 프로젝트가 PostgreSQL 데이터베이스와 성공적으로 연동되었습니다. PostgreSQL의 강력한 성능과 기능을 활용하여 안정적이고 확장 가능한 웹 애플리케이션을 개발할 수 있습니다. 더 많은 장고 관련 팁과 튜토리얼은 장고 공식 문서를 참고하세요.
이 글을 통해 PostgreSQL과 장고를 연동하는 과정을 쉽게 이해하고 따라할 수 있기를 바랍니다. PostgreSQL의 강력한 기능을 통해 더 나은 장고 애플리케이션을 개발해보세요!