본문 바로가기
코딩

PostgreSQL 셋업

by skyoon 2025. 1. 13.

Spring Boot에 JPA를 통한 RDBMS 연동 코드 들어가기 전 RDBMS 환경을 구축하겠다.

국내에서는 많이 사용하지 않으나 해외에서는 많이 사용하는 PostgreSQL을 연동하기로 결정했다. MyBatis 같은 Query문을 직접 작성해야 하는 경우는 더 익숙한 RDBMS를 사용할 수도 있었으나 Hibernate를 이용하여 JPA 인터페이스를 사용하여 DB와 연동을 할 목적이기에 다소 생소해도 PostgreSQL을 선택해 봤다.

PostgreSQL 사이트에서 직접 다운로드하여 설치해도 무방하나 Docker를 사용하기로 했다. Docker를 사용해서 얻는 장점으로

  1. Package설치과정에서 의존성에 대한 고민이 불필요함
  2. Docker Compose 파일을 잘 만들어 두면, 내 개발환경 그대로를 다른 환경에 그대로 설정이 가능하다는 점
  3. 특히 상위 버전 업그레이드 시 기존 버전을 삭제하고 다시 설치하기에 편리

이런 점들로 인해 Docker로 설치하기로 했다. Docker 설치 방법은 따로 언급하지 않겠다. Mac에서는 Docker.desktop을 사용하여 이미지를 다운로드하고 구동이 가능하나 다른 OS에서도 공통적으로 사용할 수 있는 terminal에서 명령을 통해 설치하는 방법을 정리해 두겠다. (실행 시 사용하는 옵션은 Docker와 관련된 내용으로 제외한다.)

첫 번째로 Docker Compose가 아닌 일반 명령어를 통해 실행하는 법을 정리한다.

  1. postgreSQL 이미지를 아래와 같은 명령어로 다운
docker pull postgres:latest
  1. DB의 데이터를 저장할 디렉터리 Host에 생성
    1. 상위버전 업그레이드와 같이 기존 Docker의 Container(이미지를 실행하는 Instance)를 삭제하면 저장된 Data도 손실되기에 Host PC에 Data는 저장하고 Container만 변경하면 DB Data 손실 없이 DB 업그레이드가 가능
    mkdir _docVol/pgdata
  2. 컨테이너 실행
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로 실행하는 방법을 정리한다.

  1. 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
  1. docker-compose명령을 실행한다.
    1. 파일명이 docker-compose.
        sudo docker-compose up -d
    1. 파일명이 docker-compose.yml이 아닌 경우(ex: postgres.yml)
    sudo docker-compose -f postgres.sql up -d
     

이렇게 하면 Docker로 PostgreSQL을 실행시킬 수 있다.