Rocky Linux / PostgreSQL 설치하는 방법

Rocky Linux에서는 기본 저장소의 postgresql-server 패키지로 PostgreSQL을 설치할 수 있습니다. 설치 후 데이터베이스 클러스터를 초기화하고 서비스를 활성화해야 하며, 원격 접속은 listen_addresses, pg_hba.conf, 방화벽과 TLS를 함께 구성해야 합니다.

Rocky Linux 버전과 활성 저장소에 따라 제공되는 PostgreSQL 주 버전과 서비스 이름이 달라질 수 있습니다. 설치 전에 사용 가능한 패키지와 애플리케이션이 요구하는 버전을 확인하세요.

설치 가능한 PostgreSQL 버전 확인하기

cat /etc/rocky-release
dnf info postgresql-server
dnf module list postgresql

dnf module은 Rocky Linux와 DNF 버전에 따라 제공되지 않을 수 있습니다. 특정 PostgreSQL 주 버전이 필요하다면 Rocky 기본 저장소의 수명 주기와 PostgreSQL 프로젝트가 제공하는 PGDG 저장소 중 어떤 경로를 사용할지 먼저 결정하고, 서로 다른 저장소의 서버 패키지를 혼합하지 마세요.

PostgreSQL 설치하고 초기화하기

서버와 클라이언트 설치

sudo dnf install postgresql-server postgresql

설치된 버전과 패키지를 확인합니다.

psql --version
rpm -q postgresql-server postgresql

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

Rocky 기본 패키지에서는 일반적으로 다음 도구를 사용합니다.

sudo postgresql-setup --initdb

초기화는 비어 있는 데이터 디렉터리에 처음 한 번만 수행합니다. 기존 데이터가 있는 서버에서 다시 초기화하면 별도 클러스터가 만들어지거나 데이터 손상 위험이 있으므로 데이터 디렉터리와 백업을 먼저 확인하세요.

sudo postgresql-setup --help

서비스 시작과 자동 실행

sudo systemctl enable --now postgresql
systemctl status postgresql

PGDG 저장소의 버전별 패키지는 postgresql-16처럼 서비스 이름과 초기화 명령이 다를 수 있습니다. 설치한 패키지의 공식 안내와 systemctl list-unit-files 'postgresql*' 결과를 확인하세요.

로컬 접속과 기본 보안 설정

postgres 운영체제 계정으로 접속하기

sudo -iu postgres psql

초기 로컬 인증은 운영체제 계정과 데이터베이스 역할을 연결하는 peer 방식일 수 있습니다. PostgreSQL의 postgres 역할 비밀번호와 Linux의 postgres 계정 비밀번호는 서로 다릅니다.

비밀번호를 안전하게 설정하기

psql 안에서 \password를 사용하면 비밀번호를 SQL 문과 셸 기록에 그대로 남기지 않을 수 있습니다.

\password postgres

관리 역할을 애플리케이션에서 사용하지 말고 용도별 역할과 데이터베이스를 만드세요.

CREATE ROLE appuser LOGIN;
\password appuser
CREATE DATABASE appdb OWNER appuser;

설정 파일의 실제 위치 확인하기

SHOW config_file;
SHOW hba_file;
SHOW data_directory;

패키지와 버전에 따라 경로가 달라질 수 있으므로 인터넷 문서의 경로를 그대로 추정하지 말고 서버가 보고하는 값을 사용하세요.

원격 접속을 안전하게 허용하기

수신 주소 제한하기

postgresql.conf의 listen_addresses를 서버의 특정 사설 IP로 제한하는 것이 좋습니다.

listen_addresses = '192.0.2.20'

192.0.2.20은 문서용 예시입니다. 실제 서버 주소로 바꾸세요. *는 모든 인터페이스를 뜻하므로 편리하지만 불필요한 네트워크에도 노출될 수 있습니다. PostgreSQL의 기본값은 로컬 루프백 접속이며 자세한 의미는 PostgreSQL 연결 설정 공식 문서에서 확인할 수 있습니다.

pg_hba.conf에서 클라이언트와 인증 제한하기

예를 들어 특정 애플리케이션 서버 한 대만 appdb의 appuser로 접속하게 하려면 다음과 같은 레코드를 검토할 수 있습니다.

hostssl  appdb  appuser  192.0.2.10/32  scram-sha-256

pg_hba.conf는 위에서 아래로 검사하며 첫 번째로 일치한 규칙만 사용합니다. 넓은 범위의 허용 규칙을 앞에 두면 뒤의 제한 규칙이 적용되지 않습니다. 자세한 필드와 순서는 PostgreSQL pg_hba.conf 공식 문서를 참고하세요.

방화벽에서도 원본 주소 제한하기

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.10/32" port port="5432" protocol="tcp" accept'

새 클라이언트 연결을 시험한 뒤 규칙을 영구화합니다.

sudo firewall-cmd --runtime-to-permanent

데이터베이스 포트를 인터넷 전체에 직접 노출하지 말고 사설망, VPN, 보안 그룹과 방화벽을 함께 사용하세요.

설정 적용과 검증

인증 규칙 다시 읽기

pg_hba.conf 같은 reload 가능한 설정은 다음과 같이 다시 읽을 수 있습니다.

sudo -iu postgres psql -c 'SELECT pg_reload_conf();'

규칙 문법은 시스템 뷰에서 확인할 수 있습니다.

sudo -iu postgres psql -c 'SELECT line_number, type, database, user_name, address, auth_method, error FROM pg_hba_file_rules;'

재시작이 필요한 설정 적용하기

listen_addresses처럼 서버 시작 시 적용되는 설정은 재시작이 필요합니다.

sudo systemctl restart postgresql
sudo systemctl status postgresql

수신 포트와 연결 시험하기

ss -lntp | grep 5432
psql 'host=192.0.2.20 dbname=appdb user=appuser sslmode=verify-full'

verify-full을 사용하려면 클라이언트가 신뢰할 CA와 서버 이름에 맞는 인증서를 갖춰야 합니다. 암호 인증만 설정하고 TLS를 생략하면 네트워크 위협에 충분하지 않을 수 있습니다.

운영 전에 준비할 항목

  • 정기적인 논리·물리 백업과 실제 복구 시험
  • 지원되는 마이너 업데이트 적용 계획
  • 애플리케이션별 최소 권한 역할과 비밀번호 회전
  • TLS 인증서 검증과 사설망 또는 VPN 사용
  • 디스크 사용량, 연결 수, 지연, 체크포인트와 오류 로그 모니터링
  • 주 버전 업그레이드 전 호환성 검토와 별도 절차 준비

PostgreSQL 주 버전 업그레이드는 단순 패키지 업데이트와 다릅니다. pg_upgrade, 논리 복제 또는 덤프·복원 같은 공식 업그레이드 경로를 버전에 맞게 계획하세요.

자주 묻는 질문

postgresql-setup 명령을 찾을 수 없습니다

설치한 저장소와 패키지 이름을 확인하세요. Rocky 기본 패키지와 PGDG 버전별 패키지는 초기화 도구와 서비스 이름이 다를 수 있습니다.

외부 접속이 계속 거부됩니다

listen_addresses, pg_hba.conf의 첫 일치 규칙, 서비스 수신 포트, firewalld와 클라우드 보안 그룹을 순서대로 확인하세요.

pg_hba.conf에 0.0.0.0/0을 허용해도 되나요?

인터넷 전체와 일치하므로 일반적으로 피해야 합니다. 실제 애플리케이션 서버의 고정 주소나 사설 서브넷으로 제한하고 TLS와 최소 권한을 사용하세요.

설정 파일 변경 후 reload와 restart 중 무엇을 사용하나요?

항목마다 다릅니다. pg_hba.conf는 reload할 수 있지만 listen_addresses는 재시작이 필요합니다. pg_settings.pending_restart와 공식 문서의 컨텍스트를 확인하세요.

정리

Rocky Linux에서 PostgreSQL은 패키지 설치, 클러스터 초기화, 서비스 활성화 순서로 준비합니다. 원격 접속은 특정 수신 주소, 좁은 pg_hba.conf 규칙, 방화벽 원본 제한과 TLS를 함께 적용하세요.

설정 경로와 서비스 이름은 설치 출처와 버전마다 달라질 수 있으므로 PostgreSQL이 직접 보고하는 경로와 설치한 패키지 문서를 기준으로 작업하는 것이 안전합니다.

같은 카테고리의 다른 글
Rocky Linux / MariaDB 설치하는 방법

Rocky Linux / MariaDB 설치하는 방법

Rocky Linux에 MariaDB를 설치하고 초기 보안을 설정하는 방법을 설명합니다. 최소 권한 계정, 원격 수신 주소, 방화벽 원본 제한과 TLS 점검 사항도 정리합니다.

Rocky Linux / 설치된 패키지 확인하는 방법

Rocky Linux / 설치된 패키지 확인하는 방법

Rocky Linux에서 설치된 패키지를 DNF와 RPM으로 확인하는 방법을 설명합니다. 전체 목록, 특정 파일의 소유 패키지, 설치 시각과 변경 검증 방법도 정리합니다.

Rocky Linux / GUI 환경 만드는 방법

Rocky Linux / GUI 환경 만드는 방법

Rocky Linux에 GNOME GUI를 설치하고 그래픽 부팅을 설정하는 방법을 설명합니다. Rocky Linux 8·9의 XRDP와 Rocky Linux 10의 GNOME 원격 데스크톱 차이도 정리합니다.

Rocky Linux / Memo

Rocky Linux / Memo

Rocky Linux와 관련된 잡다한 정보를 정리합니다.

Rocky Linux / SELinux 끄는 방법

Rocky Linux / SELinux 끄는 방법

Rocky Linux의 SELinux 상태와 모드를 확인하고 차단 원인을 해결하는 방법을 설명합니다. Permissive 전환, 정책 조정과 완전 비활성화 시 주의점도 정리합니다.

Rocky Linux / 호스트네임 변경하는 방법

Rocky Linux / 호스트네임 변경하는 방법

Rocky Linux에서 hostnamectl로 호스트네임을 변경하고 결과를 확인하는 방법을 설명합니다. 이름 해석과 서비스 재시작이 필요한 경우도 함께 살펴봅니다.

Rocky Linux / IP 설정하는 방법

Rocky Linux / IP 설정하는 방법

Rocky Linux에서 nmcli로 고정 IP와 DHCP, DNS, IPv6 연결 프로필을 설정하는 방법을 설명합니다. 원격 변경 전 주의점과 확인 명령도 함께 정리합니다.

Rocky Linux / root 계정으로 ssh 접속 가능하게 설정하는 방법

Rocky Linux / root 계정으로 ssh 접속 가능하게 설정하는 방법

Rocky Linux에서 root SSH 접속이 필요할 때 공개 키로만 허용하는 안전한 절차를 설명합니다. 설정 검사, 접속 제한과 원상 복구 방법도 정리합니다.

Rocky Linux / 방화벽 관리하는 방법

Rocky Linux / 방화벽 관리하는 방법

Rocky Linux firewalld에서 영역, 서비스와 포트를 확인·관리하는 방법을 설명합니다. 런타임 시험 후 영구 저장하고 원본 주소를 제한하는 안전한 절차를 정리합니다.

Rocky Linux / 언어 변경하는 방법

Rocky Linux / 언어 변경하는 방법

Rocky Linux에서 localectl과 언어 팩으로 시스템 로케일을 확인·변경하는 방법을 설명합니다. 세션별 변경, LANG·LC_* 우선순위와 한글 깨짐 점검도 정리합니다.