PostgreSQL 15 설치 후 초기 설정 및 데이터 디렉터리 구조

데이터베이스 클러스터 초기화

PostgreSQL 15를 설치한 후에는 먼저 데이터베이스 클러스터를 초기화해야 합니다.

sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

기화 완료 후, 서비스 등록 및 실행 명령어는 다음과 같습니다.

sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
sudo systemctl status postgresql-15

환경 변수 설정

시스템 전역에서 psql 등의 명령어를 사용하려면 /etc/profile에 경로를 추가합니다.

sudo vim /etc/profile
export PG_HOME=/usr/pgsql-15
export PATH=$PATH:$PG_HOME/bin

적용을 위해 소스 명령을 실행합니다.

source /etc/profile

데이터베이스 및 계정 생성

postgres 운영 계정으로 전환 후 psql 인터랙티브 쉘에 진입합니다.

su - postgres
psql

새로운 데이터베이스와 사용자를 생성하고, 관리자 계정의 비밀번호를 설정합니다.

CREATE DATABASE sample_db;
CREATE ROLE app_user WITH LOGIN PASSWORD 'secure_password';
ALTER USER postgres WITH PASSWORD 'new_password';

외부 접속 허용 설정

기본적으로 PostgreSQL은 로컬 연결만 허용합니다. 원격 접속을 위해 두 개의 핵심 파일을 수정해야 합니다.

1. postgresql.conf 파일에서 수신 대상 주소를 변경합니다.

sudo vim /var/lib/pgsql/15/data/postgresql.conf
listen_addresses = '*'

2. pg_hba.conf 파일에서 인증 규칙을 추가합니다.

sudo vim /var/lib/pgsql/15/data/pg_hba.conf
host    all    all    0.0.0.0/0    scram-sha-256

PostgreSQL 14부터 기본 인증 방식은 scram-sha-256으로 변경되었습니다. 이전 버전에서는 md5를 사용했으나, 새로 설치하는 경우 scram-sha-256 사용을 권장합니다.

설정 반영을 위해 서비스를 재시작합니다.

sudo systemctl restart postgresql-15

원격 접속 테스트

설정 변경 후, postgres 계정의 비밀번호가 설정되어 있지 않으면 인증에 실패할 수 있습니다. 반드시 먼저 비밀번호를 설정한 후 접속을 시도하세요.

# 비밀번호 설정 전 접속 시도 - 실패 예시
psql -h 127.0.0.1 -p 5432 -U postgres

# 비밀번호 설정
su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'new_password';"

# 원격 접속 테스트
psql -h <호스트_IP> -p 5432 -U postgres

핵심 디렉터리 및 파일 구조

PostgreSQL 15의 주요 경로는 다음과 같습니다.

용도경로
실행 바이너리/usr/pgsql-15/bin
데이터 디렉터리/var/lib/pgsql/15/data

데이터 디렉터리 내 주요 파일

파일/디렉터리설명
postgresql.conf인스턴스의 핵심 설정 파일. 대부분의 파라미터를 이곳에서 관리합니다.
postgresql.auto.confALTER SYSTEM 명령으로 변경된 파라미터가 저장되며, postgresql.conf보다 높은 우선순위를 가집니다.
pg_hba.conf클라이언트 인증 설정 파일. 접근 가능한 IP 대역과 인증 방식을 정의합니다.
pg_ident.confident 인증 방식 사용 시 운영체제 사용자와 데이터베이스 역할을 매핑합니다.
PG_VERSION현재 데이터베이스 클스터의 메이저 버전 정보를 기록합니다.
postmaster.opts마지막으로 서버가 기동될 때 사용된 명령어 옵션을 기록합니다.
postmaster.pid현재 실행 중인 서버 프로세스의 PID를 저장하며, 서버 종료 시 자동 삭제됩니다.

데이터 디렉터리 내 주요 하위 디렉터리

디렉터리설명
base/사용자 데이터베이스 및 postgres, template0, template1의 실제 데이터 파일을 저장합니다.
global/클러스터 전역에서 참조하는 카탈로그 테이블(pg_database, pg_tablespace 등)을 보관합니다.
pg_wal/Write-Ahead Logging(WAL) 파일이 저장되는 곳으로, 장애 복구 및 복제에 필수적입니다.
pg_xact/트랜잭션의 커밋 상태 정보를 관리합니다. (과거 pg_clog에서 이름 변경됨)
pg_multixact/다중 트랜잭션의 동시성 제어를 위한 상태 데이터를 저장합니다.
pg_subtrans/서브트랜잭션의 상태 정보를 기록합니다.
pg_twophase/2단계 커밋(2PC)에서 준비(prepare) 상태인 트랜잭션의 정보를 보관합니다.
pg_stat/ / pg_stat_tmp/통계 수집 서브시스템에서 사용하는 영구/임시 파일을 각각 저장합니다.
pg_replslot/논리적/물리적 복제에 사용되는 복제 슬롯(replication slot)의 상태 데이터를 관리합니다.
pg_logical/논리적 디코딩(logical decoding) 관련 상태 정보를 저장합니다.
pg_notify/LISTEN/NOTIFY 메커니즘의 상태 데이터를 기록합니다.
pg_snapshots/내보내기한 트랜잭션 스냅샷 정보를 저장합니다.
pg_dynshmem/동적 공유 메모리(dynamic shared memory) 관련 파일을 저장합니다.
pg_commit_ts/트랜잭션 커밋 시점의 타임스탬프 데이터를 보관합니다.
pg_tblspc/사용자 정의 테이블스페이스에 대한 심볼릭 링크를 저장합니다.

태그: PostgreSQL psql pg_hba.conf postgresql.conf WAL

6월 24일 18:01에 게시됨