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로 반영한다.
마지막으로, 마이그레이션을 수행한 뒤 접속하면 정상적으로 동작한다.

docker-compose exec web python manage.py createsuperuser로 관리자 계정을 생성한다.