본 문서는 Postgres 데이터베이스를 실행하기 위해 필요한 환경변수들을 설정하는 방법과 구현된 스크립트들을 설명합니다.
PostgreSQL(이하 Postgres)는 1996년 출시된 오픈소스(무료) 관계형 데이터베이스 관리 시스템(RDBMS: Relational Database Management System)입니다. 유명한 데이터베이스인 Oracle DB, MySQL 등을 뒤이어 자리잡은 관계형 데이터베이스로써, 현재에는 많은 개발자들이 선호하고 있는 관계형 데이터베이스입니다.
Postgres 데이터베이스에 더 자세한 설명은 공식문서에서 확인할 수 있습니다.
프로젝트에서 Postgres는 우리의 실행 스크립트(run.sh)를 통해 Docker container 위에 실행됩니다. 특히, docker-compose.yaml 파일에 선언된 내용과 docker-compose
명령어를 이용하여 실행되기 때문에 해당 명령어를 사용할 수 있는지 확인하시기 바랍니다. 아래 명령어를 통해 버전을 확인할 수 있어야 합니다:
$ docker-compose --version
Docker Compose version v2.27.0-desktop.2
만약 특별한 설정 없이 Postgres 컨테이너를 실행하고 싶다면, 단순히 실행 스크립트(run.sh)를 실행하면 됩니다. 우리의 실행 스크립트는 예시 환경변수 파일(.env.example)을 복사하여 환경변수 파일(.env)을 생성합니다. 본 문단을 건너뛰고 실행 문단으로 넘어가시기 바랍니다.
환경변수들을 직접 설정하려면, .env.example 파일을 복사하여 .env 파일을 생성하고 목적에 맞게 설정하도록 합니다. 아래는 환경변수에 대한 설명입니다.
Key | 설명 |
---|---|
CONTAINER_NAME |
실행하는 Postgres 컨테이너의 이름 |
POSTGRES_PORT |
컨테이너 외부 포트번호 (default: 5432) |
POSTGRES_DB |
데이터베이스 이름 (default: postgres) |
POSTGRES_USER |
데이터베이스 유저네임 (default: postgres) |
POSTGRES_PASSWORD |
데이터베이스 접근 비밀번호 |
POSTGRES_VOLUME_DIR |
데이터베이스 데이터 저장 디렉토리 이름 (볼륨 경로 연결) |
Postgres 컨테이너는 docker-compose.yaml 파일을 기반으로 실행됩니다. 해당 파일은 docker-hub에서 제공하는 Postgres 이미지의 버전을 명시하고, 환경변수 값들을 연결하여 Postgres의 설정으로 이용합니다. 환경변수 파일(.env)에 기재된 값과 비교하여 확인하시기 바랍니다.
다음은 몇가지 특수한 값들에 대한 설명입니다.
YAML 파일에서 environment
부분에서 설정된 PGDATA
는 실행된 컨테이너 내부에서 데이터가 저장되는 디렉토리 경로입니다. 이 경로에 Postgres 데이터베이스와 관련된 데이터가 저장됩니다. 컨테이너 실행 시 디렉토리가 생성되는 것을 확인할 수 있습니다.
반면, volume
부분을 통해 생성되고 연결(Mount)될 두 개의 볼륨 경로를 볼 수 있습니다. 볼륨들은 각각 설정(Configuration) 업데이트와 데이터 저장으로 이용됩니다. 전자는 postgresql.conf 설정 파일을 복사하고 연결한 볼륨이며, 후자는 앞서 설정한 PGDATA
경로와 연결한 볼륨입니다.
postgresql.conf 설정 파일은 Postgres 자체 성능에 대한 설정을 가지고 있으며, Postgres 컨테이너가 실행되면 이 연결된 볼륨의 설정 파일을 기반으로 Postgres가 실행됩니다. 만약 데이터베이스에 대한 구체적인 성능 설정을 수행하고 싶다면 해당 postgresql.conf 파일을 변경하시기 바랍니다.
특히, 컨테이너 내부에 실행된 Postgres의 설정만을 변경하고 싶다면 컨테이너를 종료할 필요 없이 다음과 같이 진행합니다:
- postgresql.conf 설정 파일을 수정합니다.
- 아래 명령어를 통해 Docker 컨테이너를 재실행(restart)합니다:
$ docker restart $CONTAINER_NAME
설정만을 변경하려면 단순히 컨테이너를 재시작하면 되기 때문에, 실행중인 컨테이너를 멈추거나 삭제할 수 있는 run.sh 실행 스크립트를 사용하지 마시기 바랍니다.
실행 명령어는 아래와 같습니다:
$ ./run.sh
Postgres 컨테이너가 실행될 것입니다.
만약 스크립트 실행 권한(Permission)과 관련된 에러가 발생하면, 아래 명령어를 입력합니다:
$ chmod +x run.sh
# 또는
$ sudo chmod +x run.sh
Postgres 데이터베이스를 이용할 때, 도움이 될 수 있는 몇가지 스크립트가 구현되어 있습니다. 단, 추가 스크립트들은 컨테이너에 연결하기 위하여 모두 라이브러리 스크립트(lib.sh)를 이용하기 때문에, 라이브러리 스크립트와 동일한 디렉토리에서 실행해야 함을 주의하시기 바랍니다.
데이터베이스와 상호작용하는 psql 원격 명령어를 실행합니다.
$ ./script/psql.sh "SHOW max_connections;"
max_connections
-----------------
500
(1 row)
데이터베이스와 상호작용하는 psql 도구로 직접 접속합니다.
$ ./script/psql-access.sh
psql (13.7 (Debian 13.7-1.pgdg110+1))
Type "help" for help.
postgres=#