[DB] Django와 postgresql 연동하기

이상해씨·2023년 6월 21일
0

장고 (Django)

목록 보기
12/38
post-custom-banner


(출처 - https://ko.wikipedia.org/wiki/PostgreSQL)

Django Database

  • django에서는 기본적으로 SQLite가 기본 데이터베이스로 설정이 되어 있다.
  • SQLite는 빠르고 구현이 쉽다. 또한 안드로이드 플랫폼에서 많이 사용된다.
  • 하지만, 대규모 데이터처리, 데이터베이스에 동시 접속자가 많을 경우, 데이터 타입이 여러개일 경우, 상대적으로 성능이 저하된다.

Django는 다른 데이터베이스와 연동을 지원함으로, 데이터 분석 및 처리를 위해서는 다른 데이터 베이스를 사용하는 것이 좋다.

PostgreSQL

  • PostgreSQL은 sqlite의 단점인 데이터 타입의 제약, 다중 액세스에 상대적으로 장점을 보인다.
  • 다만, 속도, 복잡성 면에서는 SQLite에 비해 상대적으로 약점을 보인다.

본 본문에서는 상대적으로 데이터처리에 효과적인 PostgreSQL과 Django를 연동한다.

Django 와 연동하기

가정

  1. PostgreSQL이 설치되어 있다.
  2. postgreSQL에 DB가 생성되어 있다. (테이블이 생성되어 있으면 안됨)
  3. Django 프로젝트가 생성되어 있다.

연동 절차

setting.py 수정

1. settings에서 Database 항목 수정

  • 직접 정보를 입력하는 방법.env 파일을 이용하여 입력하는 방법이 있다.
  • .env를 .gitignore 처리하여 중요한 정보를 외부로 유출하는 것을 방지할 수 있다.

  • 수정전

1) 직접 정보를 입력하여 코드를 settings.py를 수정한 경우
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'project',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}
2) .env를 사용하여 settings.py를 수정한 경우
2-1) .environ 설치
pip install django-environ

  • environ 생성된 모습
2-2) 프로젝트에 .env 생성하기

2-3) .env 파일 내용 수정
  • Django SECRET_KEY와 DB정보 등 정보를 입력한다.
  • 참고로 아래 사진의 port 값은 defualt 값으로 설정하였다.
DB_NAME= 
DB_USER= 
DB_PASSWORD= 
DB_HOST= 
DB_PORT=

2-4) settings의 Database 설정
# envrion impot
import environ
env= environ.Env()
environ.Env.read_env(BASE_DIR / '.env')

# DB 정보 불러오기 밀 설정
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': env('DB_NAME'),
        'USER': env('DB_USER'),
        'PASSWORD': env('DB_PASSWORD'),
        'HOST': env('DB_HOST'),
        'PORT': env('DB_PORT'),
    }
}

2. setting.py에서 secrets key 설정하기

2-1) secret key.json 생성
  • 위 위치에 secrets.json 파일 생성

  • setting.py에서 시크릿키 복사해서 아래 파일에 붙여넣기
    project/app/secrets.json

{
	"SECRET_KEY" : "<시크릿키>"
}
2-2) secret key 설정
  • secrets.json을 setting.py에 설정
from pathlib import Path
from django.core.exceptions import 

# secret key 설정
import os, json
ImproperlyConfigured

# json 파일 위치 설정
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
secret_file = os.path.join(BASE_DIR, 'secrets.json')

#json 파일 열기
with open(secret_file) as f:
    secrets = json.loads(f.read())


def get_secret(setting):
   #비밀 변수를 가져오거나 명시적 예외를 반환한다.
    try:
        return secrets[setting]
    except KeyError:
        error_msg = "Set the {} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)


SECRET_KEY = get_secret("SECRET_KEY")

3. psycopg2 설치하기

  • 터미널에서 아래 명령어 실행
  • psycopg2는 python에서 사용되는 PostgreSQL DB의 어댑터이다.
pip install psycopg2

  • settings.py에 Application 정의
  • 'rest_framework','psycopg2' 추가
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'psycopg2',
]

4. migrate 명령어 실행

  • 터미널에서 아래 명령어 실행
python manage.py migrate
  • 아래 화면이 뜨면 명령어 실행 성공!

5. pgadmin4에서 확인

pgadmin4에서 해당 DB의 table을 보면 django에서 만든 테이블이 생겨난 것을 볼 수 있다.



참고

sqlite vs postgreSQL :

psycopg2 :

pysc

secret key

profile
공부에는 끝이 없다
post-custom-banner

0개의 댓글