Ncloud(네이버 클라우드) VPC환경에서 Rocky Linux 서버에 설치형 PostgreSQL DB를 설치하고, 접속하는 방법입니다.

개요

PostgreSQL은 설치 후에 DB에 접속할 때 MySQL등 다른 DB와 달리 [OS와 PostgreSQL 양쪽에 동일한 계정을 생성]하거나 [인증관련 환경설정 파일을 수정]해야 접속할 수 있는데 이 두가지 방법을 [Rocky Linux]에서 적용하는 과정을 정리해보겠습니다.

테스트 환경

  • Rocky Linux 8.8
  • PostgreSQL 13.12

설치

기본 배포 버전으로 테스트할 수도 있지만, 여기서는 PostgreSQL 13 최신 버전을 설치해보겠습니다.

리포지토리 버전 확인

우선 Rocky Linux에서 지원하는 기본 버전들을 확인해보면 아래와 같이 PostgreSQL [9.6], [10], [12], [13], [15] 인 것을 확인할 수 있습니다.

~# dnf module list postgresql
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

기본 버전 비활성화

PostgreSQL 13 최신 버전을 사용하기 위해 기본 버전들은 모두 비활성화합니다. 비활성화 처리 후 리스트를 다시 조회해보면 [disabled]를 뜻하는 [X]로 변경된 것을 확인할 수 있습니다.

~# dnf -qy module disable postgresql
~# dnf module list postgresql
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

리포지토리 설치

[PostgreSQL 13] 설치 정보가 담겨 있는 리포지토리 RPM을 설치합니다.

~# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

PostgreSQL 설치

[PostgreSQL 13]을 설치합니다.

~# dnf install -y postgresql13-server
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

기본 DB 생성

[initdb] 명령으로 기본 DB를 생성하고 올바르게 생성되었는지 로그를 확인해보겠습니다.

~# cd /usr/pgsql-13/bin/
~# postgresql-13-setup initdb
~# cat /var/lib/pgsql/13/initdb.log
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

PostgreSQL 시작

~# systemctl enable postgresql-13
~# systemctl start postgresql-13
~# systemctl status postgresql-13
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

DB 접속

기본 마스터 계정인 [postgres]로 [PostgreSQL]에 접속합니다.

~# su postgres
bash$ psql
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

유저 생성

테스트용 계정 [testuser]를 생성하고 [\du] 명령으로 생성된 유저를 확인합니다.

postgres=# create user testuser password 'test123$' superuser;
postgres=# \du 
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

DB 생성 및 소유자 지정

테스트용 DB를 생성하고 소유자를 지정한 후에 [\l] 명령으로 생성된 DB를 확인합니다.

postgres=# create database testdb owner testuser;
postgres=# \l
postgres=# \q
bash$
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

접속 시도 - 인증 오류

위에서 생성한 계정으로 접속을 시도해보면, 아래와 같이 인증 오류가 발생합니다.
다음 단계에서는 이 인증 오류를 해결하는 방법 2가지를 확인해보겠습니다.

~# psql -U testuser -d testdb
psql: error: FATAl: Peer authentication failed for user "testuser"
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

인증 오류 해결

인증 문제를 해결하고 [PostgreSQL]에 접속하는 방법은 크게 2가지가 있는데 한가지씩 확인해보겠습니다.

방법1 - 동일한 계정 생성

우선, 처음에 DB 생성 후에 추가했던 [PostgreSQL] 유저 계정과 동일한 계정을 OS 사용자에도 추가하는 방법입니다.

아래와 같이 DB 유저와 동일한 [testuser] 계정을 생성하겠습니다.

~# adduser testuser
~# passwd testuser
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법
  • DB 접속
    새로 생성한 [testuser] 계정으로 전환한 후에 접속을 해보면 문제 없이 접속되는 것을 확인할 수 있습니다.
~# su testuser
~$ psql -U testuser -d testdb
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

방법2 - 인증 설정 파일 수정

다음으로 인증 관련 설정 파일인 [pg_hba.conf] 파일을 수정해서 접속하는 방법을 확인해보겠습니다.

[pg_hba.conf] 파일을 열어보면 아래와 같이 DB 접근 설정 항목들이 있는데 [local]과 IPv4용 [host]의 METHOD 항목을 보시면 각각 [peer]과 [scram-sha-256]으로 설정되어 있는 것을 확인할 수 있습니다.

여기서 [peer]는 운영 체제에서 클라이언트의 운영 체제 사용자 이름과 요청한 데이터베이스 사용자 이름이 일치하는지 확인하는 옵션입니다.

이 항목을 [scram-sha-256] 또는 [md5]로 수정합니다.

~# vim /var/lib/pgsql/13/data/pg_hba.conf
  • 수정 전
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법
  • 수정 후
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법
  • DB 재시작 후 접속
    설정 파일을 수정했으면 [PostgreSQL]을 재시작하고 다시 접속해봅니다.
    이번에는 문제 없이 DB 유저 생성 시 입력했던 패스워드를 입력하고 접속 가능한 것을 확인할 수 있습니다.
~# systemctl restart postgresql-13
~# psql -U testuser -d testdb
Ncloud(네이버 클라우드) VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

기본 배포 버전 설치

[PostgreSQL 13] 최신 버전이 아닌 기본 배포 버전을 설치하려면 아래와 같은 방법으로 설치를 하면 됩니다.
나머지 인증 방법은 위에서 설명한 내용과 동일합니다.

~# dnf install -y postgresql-server
~# cd /usr/bin/
~# postgresql-setup --initdb
~# systemctl enable postgresql
~# systemctl start postgresql
~# systemctl status postgresql

OS별 배포 버전

2023년 9월 13일 기준 Red Hat family OS별로 설치되는 배포 버전은 다음과 같습니다.

  • RHEL / Rocky Linux 9 : 15, 13
  • RHEL / Rocky Linux / OL 8 : 15, 13, 12, 10 and 9.6 via modules
  • RHEL / CentOS / SL / OL 7 : 9.2
  • RHEL / CentOS / SL / OL 6 : 8.4
  • Fedora 37 : 14
  • Fedora 36 : 14

pg_hba.conf 파일 Method 옵션

[pg_hba.conf] 설정 파일의 Method 옵션 리스트는 아래와 같습니다.

  • trust: 무조건 접속을 허용합니다. 이 방법을 사용하면 PostgreSQL 데이터베이스 서버에 연결할 수 있는 모든 사람이 암호나 다른 인증 없이 원하는 PostgreSQL 사용자로 로그인할 수 있습니다.

  • reject: 무조건 연결을 거부합니다. 이것은 그룹에서 특정 호스트 를 “ 필터링 “reject 하는 데 유용합니다. 예를 들어 한 라인은 특정 호스트의 연결을 차단할 수 있고 나중 라인은 특정 네트워크의 나머지 호스트가 연결할 수 있도록 합니다.

  • scram-sha-256: SCRAM-SHA-256 인증을 수행해 사용자의 암호를 확인합니다.

  • md5: SCRAM-SHA-256 또는 MD5 인증을 수행해 사용자의 암호를 확인합니다.

  • password: 클라이언트가 인증을 위해 암호화되지 않은 암호를 제공하도록 요구합니다. 암호는 네트워크를 통해 일반 텍스트로 전송되기 때문에 신뢰할 수 없는 네트워크에서는 사용해서는 안 됩니다.

  • gss: GSSAPI를 사용해 사용자를 인증합니다. 이것은 TCP/IP 연결에만 사용할 수 있습니다. GSSAPI 암호화와 함께 사용할 수 있습니다.

  • sspi: SSPI를 사용해 사용자를 인증합니다. 이것은 Windows에서만 사용할 수 있습니다.

  • ident: 클라이언트의 ident 서버에 연결하여 클라이언트의 운영 체제 사용자 이름을 얻고 요청한 데이터베이스 사용자 이름과 일치하는지 확인합니다. ID 인증은 TCP/IP 연결에서만 사용할 수 있습니다. 로컬 연결에 대해 지정된 경우 피어 인증이 대신 사용됩니다.

  • peer: 운영 체제에서 클라이언트의 운영 체제 사용자 이름을 가져와서 요청한 데이터베이스 사용자 이름과 일치하는지 확인합니다. 이것은 로컬 연결에만 사용할 수 있습니다.

  • lda: LDAP 서버를 사용해 인증 합니다.

  • radius: RADIUS 서버를 사용해 인증합니다.

  • cert: SSL 클라이언트 인증서를 사용해 인증합니다.

  • pam: 운영 체제에서 제공하는 PAM(Pluggable Authentication Modules) 서비스를 사용해 인증합니다.

  • bsd: 운영 체제에서 제공하는 BSD 인증 서비스를 사용해 인증합니다.

참고 URL

  1. PostgreSQL OS별 다운로드 안내
  2. PostgreSQL pg_hba.conf 파일 옵션 안내

문서 업데이트 내역

날짜 내용
2023-09-13 문서 최초 생성