웹 프로그래밍/Django

[Django] PostgreSQL 설치와 장고에 연동하기

by seokii 2022. 11. 24.
728x90
반응형

1. PostgreSQL 설치

PostgreSQL 설치는 Windows 10 기준으로 작성하도록 하겠습니다.

장고와 연동하는 부분은 상관없이 진행하시면 됩니다.

 

다운로드 주소

: https://www.postgresql.org/download/

 

PostgreSQL: Downloads

 

www.postgresql.org

 

- 위의 다운로드 링크에 들어가서, Windows 버튼을 클릭합니다.

 

- Download the Installer를 클릭합니다.

 

- 원하는 버전을 다운 받아 설치를 진행합니다.

- Installer에서 Next 버튼을 누르며 설치를 진행하시면 됩니다.

설치 과정에서 superuser의 비밀번호 값은 반드시 잘 기억하거나 따로 저장하시는 것을 추천드립니다!

Port 값은 기본 값인 5432로 진행했습니다.

Locale은 "Korean, Korea"로 지정했습니다.

설치 경로는 기본 경로를 사용했습니다.

 

- 윈도우 키를 누르고 psql을 검색했을 때 확인이 된다면 잘 설치된 것입니다.

 

- psql에 접속해서 엔터를 누르며 진행하고, 설치 때 지정한 비밀번호를 입력해 PostgreSQL에 접속합니다.

- SELECT version(); 명령문을 통해 PostgreSQL의 설치와 버전을 잘 확인할 수 있습니다.

 

 

2. 장고와 연동하기

psql로 데이터베이스를 생성하고 아래와 같이 기본적인 세팅을 진행합니다.

(바로 위의 사진과 같은 상태인 postgres=# 에 명령어를 입력하시면 됩니다.)

CREATE DATABASE data_planet_db;
CREATE USER root WITH PASSWORD 'password';
ALTER ROLE root SET client_encoding TO 'utf8';
ALTER ROLE root SET default_transaction_isolation TO 'read committed';
ALTER ROLE root SET TIME ZONE 'Asia/Seoul';
GRANT ALL PRIVILEGES ON DATABASE data_planet_db TO root;

 

1. CREATE DATABASE {데이터 베이스 이름}

데이터 베이스를 생성하는 명령문입니다.

저는 진행 중인 프로젝트 이름으로 데이터 베이스명을 사용했습니다.

CREATE DATABASE data_planet_db; 명령어를 입력하고,

"CREATE DATABASE"라는 출력되었다면 완료입니다.

 

2. CREATE USER {유저 아이디} WITH PASSWORD {'패스워드 값'};

본인이 사용하고 싶은 유저 아이디 값과 패스워드를 설정하는 명령문입니다.

저는 root라는 유저 아이디 값과 적당한 패스워드를 설정했습니다.

CREATE USER root WITH PASSWORD '지정 값'; 명령어를 입력하고,

"CREATE ROLE"이 출력되었다면 완료입니다.

 

3. 인코딩, isolation, timezone, user 권한 주기

ALTER ROLE root SET client_encoding TO 'utf8';
ALTER ROLE root SET default_transaction_isolation TO 'read committed';
ALTER ROLE root SET TIME ZONE 'Asia/Seoul';

위의 각 명령문을 입력하고,

"ALTER ROLE"이 출력된다면 완료입니다.


GRANT ALL PRIVILEGES ON DATABASE data_planet_db TO root;

저는 앞서 data_planet_db라는 데이터 베이스와 root라는 유저를 생성했기 때문에,

위의 명령문을 입력했습니다.

"GRANT"가 출력된다면 완료입니다.

 

psql 쉘은 "\q"를 입력해 종료할 수 있습니다.

 

4. settings.py 코드 수정

프로젝트의 settings.py에서 기본적으로 설정된 sqlite3에 대한 부분을 변경하는 내용입니다.

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

위와 같은 코드를 아래와 같이 변경합니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '생성한 데이터 베이스 이름',
        'USER': '생성한 유저 이름',
        'PASSWORD' : '생성한 패스워드 값',
        'HOST' : 'localhost',
        'PORT' :'',
    }
}

 

5. (생략 가능) .env로 중요 정보 다루기

데이터베이스의 user, password 또는 django secret key등을 .env파일로 생성해 보안에 좀 더 신경쓴 코드를 작성할 수 있습니다.

GitHub에 장고 프로젝트를 올릴 때, .env파일을 만들어 .gitignore에 추가해 놓으면 작업하면서 사용하는 중요 정보들이 외부로 유출하는 상황을 막을 수 있습니다.

pip install django-environ

위의 pip 명령어를 통해 environ을 설치할 수 있습니다.

 

위와 같이 장고에 프로젝트 폴더 내부에 .env파일을 생성합니다.

.env 파일의 내용입니다.

 

"""
Django settings for Data_Planet project.

Generated by 'django-admin startproject' using Django 4.1.3.

For more information on this file, see
https://docs.djangoproject.com/en/4.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""

import environ
env = environ.Env()
environ.Env.read_env()

# 장고 시크릿 키가 설정되어 있는 부분
SECRET_KEY = env("SECRET_KEY")

# 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"),
    }
}

.env파일을 적용시킨 settings.py의 내용입니다.

단순히 연동만 해보고자 한다면 5번의 과정은 생략해도 좋습니다.

 

 

6. PostgreSQL에 기본 테이블 생성하기

장고 프로젝트를 시작하면 기본적으로 생성되는 앱이 존재합니다.

해당 내용은 settings.py에서도 코드로 확인할 수 있습니다.

# settings.py

# Application definition

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

위와 같이 초기 설치된 앱들에서 사용하는 DB 테이블을 앞의 과정에서 생성한 데이터 베이스에 생성해보도록 하겠습니다.

 

우선 다음 명령어로 psycopg2 라이브러리를 설치합니다.

pip install psycopg2

 

설치 후 migrate 명령을 수행합니다.

저는 파이참 터미널에서 진행했습니다.

python manage.py migrate

문제가 발생하지 않는다면,

Applying ~~~~~~~ ... OK의 문구가 쭉 나오시는 것을 확인할 수 있습니다.

 

6.1. public에 접근 권한 error 발생시

migrate를 했는데, 다음과 같은 에러가 발생할 수 있습니다.

(psycopg2.errors.InsufficientPrivilege: permission denied for schema public)

public 스키마에 대해 권한이 없어 테이블을 생성하지 못했다는 에러인데,

아래와 같이 psql에서 생성한 유저에게 권한을 주는 명령문을 통해 해결했습니다.

ALTER USER {생성한 유저명} SUPERUSER;

 

 

7. 생성한 테이블 직접 확인하기

테이블 생성이 제대로 된 것인지, 직접 확인하기 위한 방법입니다.

pgAdmin을 통해 gui로 확인하는 방법과 psql을 통한 커맨드 라인으로 확인하는 방법이 있습니다.

 

1) pgAdmin 4

- PostgreSQL을 설치하면서 같이 설치된 pgAdmin 4를 실행해, superuser 비밀번호를 입력합니다.

- Servers > PostgreSQL > Databases > 생성한 데이터베이스 > Schemas > public > Tables의 경로에서 테이블이 생성된 것을 확인할 수 있습니다. 

 

2) psql 커맨드 라인

psql을 실행하고 Database에 생성한 데이터베이스명을 입력하고,

유저와 비밀번호를 입력해 해당 데이터베이스로 접근합니다.

그리고, \dt 혹은 \dt+ 명령어를 통해 생성된 테이블을 확인할 수 있습니다.

 

 

728x90
반응형

댓글