장고 postgresql 연결

JungYun K·2023년 11월 6일

Django

목록 보기
1/2

이번 글은 장고랑 postgresql을 연결하는 방법입니다.

postgresql에 DB를 생성하는 방법은 제가 생각했을 때는 명령어로 적어서 만드는 방법과 pgAdmin4를 사용하는 방법이 있는데 이는 다음에 작성하겠습니다.

장고를 처음 실행해서 settings.py에 보면 DB가 이렇게 작성되어 있습니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

sqlite3를 쓰고 있는 것을 알 수 있습니다. 이를 수정하면 됩니다.
장고에서 Postgresql을 사용할 때는 psycopg2 라이브러리가 필요합니다.
그래서 먼저 pip install psycopg2를 사용해서 설치해줍니다.
저는 psycopg2를 설치하면 이상하게 오류가 발생해서 보통
pip install psycopg2-binary 를 사용합니다.

이제 다시 돌아와서 settings.py에서 수정할 때 제가 쓴 건 두가지 방법이 있는데 처음은 decouple을 사용한 방식입니다.
이 방법은 먼저 pip install python-decouple로 설치를 해줘야합니다.

from decouple import config

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': config('POSTGRES_NAME'),
        'USER': config('POSTGRES_USER'),
        'PASSWORD': config('POSTGRES_PASSWORD'),
        'HOST': config('POSTGRES_HOST'),
        'PORT': config('POSTGRES_PORT'),
    }
}

이렇게 작성하고 ini파일을 작성해줍니다.

[settings]
POSTGRES_NAME=DB명
POSTGRES_USER=유저명
POSTGRES_PASSWORD=비밀번호
POSTGRES_HOST=주소
POSTGRES_PORT=포트번호

저는 ini파일로 작성했지만, 다른 블로그를 보면 env 파일로 작성하는 경우도 있으니 참고하시면 될 것 같습니다.

이렇게 ini파일을 따로 작성해주는 이유는 이전 글인 apikey를 secrets.json으로 관리하는 것과 같이 github에 올리지 않기 위함입니다.

그래서 gitignore에도 파일명.ini 파일을 추가해서 무시하게끔 처리해주면 됩니다.

이제 다른 방법인 get_secret을 쓰는 방법입니다.
이 방법은 이전 글 secrets.json에 DB정보를 적는 방법입니다.

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": get_secret("DB_NAME"),
        "USER": get_secret("DB_USER"),
        "PASSWORD": get_secret("DB_PASSWORD"),
        "HOST": get_secret("DB_HOST"),
        "PORT": get_secret("DB_PORT"),
    }
}
{
	"DB_NAME": "DB명",
    "DB_USER": "유저명",
    "DB_PASSWORD":"비밀번호",
    "DB_HOST":"주소",
    "DB_PORT": "포트번호",
}

이렇게 사용해서 가져올 수 있습니다. 아래는 예시로 갖고오는 법을 작성하겠습니다.

{
	"DB_NAME": "testdb",
    "DB_USER": "test_user",
    "DB_PASSWORD":"1234",
    "DB_HOST":"42.42.42.42",
    "DB_PORT": "5432",
}

ini 파일에는 이 예시와는 다르게 큰따옴표("")를 사용하지 않습니다.

마지막으로 ini파일의 위치는 저 같은 경우는 이렇게 놨습니다.

project
venv
.gitignore
README.md
settings.ini

저는 두 가지 방법에서 뭐가 더 좋은지는(좋고 나쁨이 있는지도 모르겠음) 모르겠으나, 혹시 아시는 분은 댓글로 알려주세요!

profile
매일 발전하고 싶은 개발자가 꿈인 사람

0개의 댓글