Spring Boot에 JPA를 통한 RDBMS 연동 코드 들어가기 전 RDBMS 환경을 구축하겠다.
국내에서는 많이 사용하지 않으나 해외에서는 많이 사용하는 PostgreSQL을 연동하기로 결정했다. MyBatis 같은 Query문을 직접 작성해야 하는 경우는 더 익숙한 RDBMS를 사용할 수도 있었으나 Hibernate를 이용하여 JPA 인터페이스를 사용하여 DB와 연동을 할 목적이기에 다소 생소해도 PostgreSQL을 선택해 봤다.
PostgreSQL 사이트에서 직접 다운로드하여 설치해도 무방하나 Docker를 사용하기로 했다. Docker를 사용해서 얻는 장점으로
- Package설치과정에서 의존성에 대한 고민이 불필요함
- Docker Compose 파일을 잘 만들어 두면, 내 개발환경 그대로를 다른 환경에 그대로 설정이 가능하다는 점
- 특히 상위 버전 업그레이드 시 기존 버전을 삭제하고 다시 설치하기에 편리
이런 점들로 인해 Docker로 설치하기로 했다. Docker 설치 방법은 따로 언급하지 않겠다. Mac에서는 Docker.desktop을 사용하여 이미지를 다운로드하고 구동이 가능하나 다른 OS에서도 공통적으로 사용할 수 있는 terminal에서 명령을 통해 설치하는 방법을 정리해 두겠다. (실행 시 사용하는 옵션은 Docker와 관련된 내용으로 제외한다.)
첫 번째로 Docker Compose가 아닌 일반 명령어를 통해 실행하는 법을 정리한다.
- postgreSQL 이미지를 아래와 같은 명령어로 다운
docker pull postgres:latest
- DB의 데이터를 저장할 디렉터리 Host에 생성
- 상위버전 업그레이드와 같이 기존 Docker의 Container(이미지를 실행하는 Instance)를 삭제하면 저장된 Data도 손실되기에 Host PC에 Data는 저장하고 Container만 변경하면 DB Data 손실 없이 DB 업그레이드가 가능
mkdir _docVol/pgdata
- 컨테이너 실행
sudo docker run --name postgres \
-e POSTGRES_USER=sky \
-e POSTGRES_PASSWORD=123456 \
-e POSTGRES_DB=stock \
-v /home/ubuntu/_docVol/pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
-d postgres
두 번째로 장점으로 언급한 Docker Compose로 실행하는 방법을 정리한다.
- docker-compose.yml파일을 아래와 같이 생성한다.(다른 이름으로 해도 상관없다.)
version: "3.8"
services:
postgres:
image: postgres:latest
restart: always
environment:
POSTGRES_USER: sky
POSTGRES_PASSWORD: 123456
POSTGRES_DB: stock
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
driver: local
driver_opts:
type: none
o: bind
device: /home/sk4u_yoon/_docVol/pgdata
- docker-compose명령을 실행한다.
- 파일명이 docker-compose.
sudo docker-compose up -d
- 파일명이 docker-compose.yml이 아닌 경우(ex: postgres.yml)
sudo docker-compose -f postgres.sql up -d
이렇게 하면 Docker로 PostgreSQL을 실행시킬 수 있다.