PostgreSQL 사용하기
Posted on 2021-08-25 by GKSRUDTN99
Django로 웹사이트 만들기
장고
프로젝트 규모가 커지거나 웹 사이트 방문자가 많아지면 sqlite3는 충분한 성능을 기대하기 어렵다.
따라서 오픈 소스로 활용할 수 있는 PostgreSQL을 사용해보자.
PostgreSQL 사용 설정하기
docker-compose.yml에서 PostgreSQL을 사용할 수 있도록 설정한다.
db라는 서비스를 새로 만들어 실행시킨다.
# docker-compose.yml
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=do_it_django_db_user
- POSTGRES_PASSWORD=do_it_django_db_password
- POSTGRES_DB=do_it_django_dev
volumes:
postgres_data:
depends_on: db
web 컨테이너는 db 컨테이너가 실행된 이후에 시작해야 한다는 의미로 설정한다.
image: postgres:12.0-alpine
도커에서 공식으로 제공하는 postgres 이미지를 사용한다.
volumes:
volumes를 설정해서 컨테이너 실행이 중단되더라도 데이터베이스의 내용이 사라지지 않도록 한다.
environment
PostgreSQL을 사용하기 위해 사용자명, 암호, 데이터베이스명을 지정한다. 개발용 데이터베이스임을 표기하기 위해 do_it_django_dev를 이름으로 사용한다.
settings.py와 .env.dev 파일 수정하기
데이터베이스를 sqlite3로 사용할지, PostgreSQL로 사용할지는 settings.py에서 정의한다.
PostgreSQL을 사용하도록 다음과 같이 설정을 변경한다.
# settings.py
DATABASES = {
'default': {
'ENGINE': os.environ.get("SQL_ENGINE", "django.db.backends.sqlite3"),
'NAME': os.environ.get('SQL_DATABASE', os.path.join(BASE_DIR, 'db.sqlite3'))
'USER': os.environ.get('SQL_USER', 'user')
'PASSWORD': os.environ.get('SQL_PASSWORD', 'password'),
'HOST': os.environ.get('SQL_HOST', 'localhost'),
'PORT': os.environ.get('SQL_PORT', '5432'),
}
}
settings.py에서 활용할 수 있도록 .env.dev 파일을 업데이트한다.
# .env.dev
DEBUG=1
SECRET_KEY=*********
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=do_it_django_dev
SQL_USER=do_it_django_db_user
SQL_PASSWORD=do_it_django_db_password
SQL_HOST=db
SQL_PORT=5432
docker-compose build로 다시 빌드하고, up으로 실행하면, 서버 에러가 발생한다.
PostgreSQL을 사용할 수 있게 해주는 psycopg2 모듈이 없어 발생하는 오류 이다.
pip install psycopg2
를 설치하고,pip freeze > requirements.txt
로 반영한다.
마지막으로, 마이그레이션을 수행한 뒤 접속하면 정상적으로 동작한다.