PostgreSQL
Django 세팅 변경
- PostgreSQL을 사용하기 위해
settings.py
에서 db 세팅을 변경해주자.
- 원해 세팅되어 있던
sqlite3
은 주석처리 하였다.
"django.db.backends.sqlite3"
은 없어도 상관없다. 이 부분은 default 값이며 만약에 대비해 세팅되어 있는 것이다.
DATABASES = {
'default': {
'ENGINE': os.environ.get('SQL_ENGINE',"django.db.backends.sqlite3"),
'NAME': os.environ.get('SQL_DATABASE', 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'),
}
}
- 또한
.env
파일에 아래와 같은 코드를 추가해 주었다.
turtle_drf_backend
는 나의 프로젝트 이름이다.
SECRET_KEY = '나의 프로젝트 시크릿 키'
SQL_ENGINE='django.db.backends.postgresql'
SQL_DATABASE='turtle_drf_backend_db'
SQL_USER='turtle_drf_backend_nikevapormax'
SQL_PASSWORD='turtle_drf_backend_password'
SQL_HOST='db'
SQL_PORT='5432'
docker-compose.yaml 파일 수정
- 어제 띄웠던 docker-compose에 대한 파일에 내용을 추가하도록 하겠다.
version: "3.8"
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000
working_dir: /usr/src/app/
volumes:
- ./:/usr/src/app/
env_file:
- ./.env
depends_on:
- db
db:
image: postgres:14.4-alpine
volumes:
- postgres_db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=turtle_drf_backend_db
- POSTGRES_USER=turtle_drf_backend_nikevapormax
- POSTGRES_PASSWORD=turtle_drf_backend_password
ports:
- "5432:5432"
volumes:
postgres_db:
docker-compose 진행
docker-compose build
를 진행한다.
- 이렇게 만들고 나서
docker-compose up
을 하면 에러가 난다.
- 에러의 이유였던
psycopg2
를 설치해보자.
pip install psycopg2
- 하지만 에러가 발생했다.
- 이유는
맥
이기 때문이다. 원래는 postgreSQL을 설치하고 빌드를 진행해야 에러가 나지 않는다. 하지만 우리는 docker를 사용할 것이기 때문에 아래와 같은 방식으로 우회할 수 있다.
asgiref==3.5.2
Django==4.0.6
django-cors-headers==3.13.0
django-dotenv==1.4.2
djangorestframework==3.13.1
djangorestframework-simplejwt==5.2.0
Faker==13.15.0
Pillow==9.2.0
psycopg2==2.9.3
PyJWT==2.4.0
python-dateutil==2.8.2
pytz==2022.1
six==1.16.0
sqlparse==0.4.2
- 하지만 나는 되지 않았다. 그래서 homebrew를 통해 postgreSQL을 깔아보았다. 하지만 위와 똑같이 아래의 에러 메세지가 나오게 되었다.
- 그래서
Dockerfile
에 아래 부분을 추가해주었다.
RUN apk add build-base python3-dev py-pip jpeg-dev zlib-dev
에 libpq-dev
를 추가했다.
FROM python:3.9.10-alpine
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
RUN apk update
RUN apk add build-base python3-dev py-pip jpeg-dev zlib-dev libpq-dev
COPY requirements.txt /usr/src/app/
WORKDIR /usr/src/app
RUN pip install -r requirements.txt
COPY . /usr/src/app/
- 그리고 다시 빌드를 진행하고, up을 했더니 해결되었다.
admin 페이지 확인
- admin 페이지에 들어가보면 잘 들어가지는 것을 볼 수 있다.
- 간혹 migration이 되지 않은 경우 아래와 같은 에러가 날 수 있다.
- 해당 에러를 고치기 위해 migration을 진행해보자.
- docker desktop으로 가 아래의 터미널을 켜준다.
- 아래와 같이 바로 migrate를 진행해주면 된다.
- 그리고 다시 admin 페이지로 가 로그인을 시도하면 데이터가 없기 때문에 되지 않는 것을 볼 수 있다.
- 그러므로 다시 (docker desktop에서 킨) 터미널 창으로 돌아가 슈퍼유저를 생성하도록 하겠다.
- 다시 admin 페이지로 돌아가 로그인을 하고 게시글을 작성해보도록 하자.
- 글 작성이 되어 게시글 수정 페이지로 들어온 화면이다.
- 지금 내가 작성한 글은 아래 그림에 있는
postgres
db에 저장되게 된다.
- 또한 우리는 docker-compose.yaml에서 named-volume을 사용한다고 작성했다. 따라서 named-volume에도 해당 데이터가 존재하게 된다.
- 데이터가 실제로 잘 남아있는지 확인하기 위해 서버 실행을 중지하자.
- 그리고 방금 전 생성한 container도 삭제해보자.
- container를 날려도 named-volume은 남아있게 되고, admin 페이지에서 작성한 글이 그대로 남아있는 것을 볼 수 있다.
- 중간에 구분이 잘 되도록 하기 위해 article 모델에
__str__
을 추가해 제목을 볼 수 있도록 했다. 변경된 내용이 자동으로 잘 반영되는 것 또한 볼 수 있었다.
pgAdmin
- pgAdmin 다운로드
- 나의 운영체제인 애플을 선택해 다운도르를 진행하였다.
- 나는 최신버전이 좋다.
- 빨간 박스를 클릭한다.
- 드래그 앤 드롭으로 설치해준다.
- 설치가 끝나면 pgAdmin을 켜고,
Add New Server
를 눌러준다.
- 이름을 넣어주고 connection으로 넘어간다.
- 아래 값들을 나의 정보에 맞게 세팅하고 save 해준다.
- 반드시 container를 켜줘야 한다.
- 그러면 아래의 화면이 나오게 된다.
- 아래의 순서로 데이터베이스를 확인하러 갈 수 있다.
- 데이터베이스에 아까 admin 페이지에서 작성한 게시글을 확인할 수 있다.