Rocky Linux 에 PostgreSQL 설치 및 외부연결 설정

  개인적으로 대규모 Project를 주로 하다보니 Oracle, MS-SQL 이외에 흔히 사용되는 DB는 MariaDB(MySQL) 정도였다.   최근 PostgreSQL의 사용이 증가하고 있고 주변에서 PostgreSQL에 대한 니즈가 생기는 것을 듣게 되어 최근 RDBMS의 Ranking을 확인해 보니 PostgreSQL가 무려 4위를 차지하고 있었다.   

[ https://db-engines.com/en/ranking ]

  PostgreSQL는 개인적으로 Greenplum(현재 45위... 이제는 아는 사람도 없을 DB)을 접하게 되었을 때 접한 DB 였는데 그때가 벌써 2010년쯤이니 10년도 더 된 이야기다.   어쨌든 다시 PostgreSQL을 사용해봐야 할지도 몰라서 개발용으로 Rocky Linux에 PostgreSQL을 설치해보려고 한다.  PostgreSQL 철학 자체가 다양한 기기에서 잘 작동하는 것이 기본이기 때문에 왠만한 OS에서는 모두 작동을 한다.

[ https://www.postgresql.org/download/ ]

   macOS도 지원하기 때문에 로컬에 설치해도 되는데 개인적으로 CleanSystem을 지향하다보니 OS를 자주 엎어 버리기 때문에 DB같은 것은 로컬에 설지하지 않는다.   어쨌든 편의에 따라서 이미지를 따로 관리 할 수 있는 Synology NAS의 VMM에 새로 Rocky Linux를 설치하고 PostgreSQL만 깔끔하게 설치할 것이다.   그런데 VMM이라고 해서 다를 것이 없으니 그냥 Rocky Linux 8에 PostgreSQL를 설치하는 것이라고 보면 될 것 같다.

   Rocky Linux 8 을 기준으로 PostgreSQL 10 이 기본적으로 설치가 되어 있다.   현재 (2024년 기준) 16 버전까지 나온 상황에서 10을 쓰는 건 Ver. 11 이후 새로이 추가된 기능들도 다수 있고 하니 범용적이라고 할 수 있는 Ver. 14를 설치하려고 한다.   이미 설치되어 있는 PostgreSQL는 비활성화 시키고 새로이 설치하는 아래의 과정으로 진행해보자.  추가로 사용자그룹 및 사용자를 postgres 별도로 추가하지 않아도 된다.   아마도 built-in PostgreSQL을 위해서 Default 로 생성되는 듯 싶다.

   1. Add Repository
   2. PostgreSQL 10 Module 정지
   3. PostgreSQL 14 설치 / 초기화
   4. 자동실행 등록
   5. DB 사용자 등록
   6. 사용자 DB 생성

[ 전체 Package Update ]

sudo su -
dnf upgrade --refresh -y

   상세한 설치 스크립트는 PostgreSQL 사이트에서 OS 및 Platform, Version, Architecture 를 선택하면 상세하게 설명이 보여진다.

# Install the repository RPM:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Disable the built-in PostgreSQL module:
sudo dnf -qy module disable postgresql

# Install PostgreSQL:
sudo dnf install -y postgresql14-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

[ PostgreSQL dnf Repository를 연결 ]
[ Rocky Linux에 추가 되어 있는 Built-in PostgreSQL Module 비활성화 ]

 

[ PostgreSQL 14 설치 ]
[ DB 초기화 / Systemd 등록 / PostgreSQL 시작 ]

   DB 설치 및 초기화, 서비스 등록까지는 root 계정을 사용했으나 이제 postgres 계정을 사용해서 나머지 작업을 진행하도록 하자.

# postgres Login
su - postgres

# postgreSQL Connect
psql

 

   일단 정상적으로 PostgreSQL이 설치 되었고 접속까지 되는 것을 확인했다.   이제 Database를 사용하기 위한 일반 사용자를 생성할 차례이다.   아래의 Scrip로 일반 사용자를 생성한다.   아래의 예제 Scrip에서는 iamwhatiam 이라는 ID로 생성을 했다.

# Select User List
SELECT * FROM pg_catalog.pg_roles;

# Create Role
create role iamwhatiam with login nosuperuser password 'UserPassword';

[ DB 사용자 생성 및 확인 ]

 

   사용자 Database 생성을 해보자.   Create Database 명령어를 통해서 생성가능하다.   예제에서는 db_iamwhatiam 이라는 이름으로 생성했다.   물론 소유자는 앞서 생성한 계정인 iamwhatiam 이다.   Encoding은 일반적인 UTF-8로 했다.   Database 생성 후 정상적으로 생성되었는지 확인을 위해서 \l 명령어도 되지만 쿼리로도 가능하니 함께 확인 해본다.

create database db_iamwhatiam with owner = iamwhatiam encoding = 'UTF8';

[ 사용자 Database 생성 ]

\l

SELECT datname FROM pg_database;

[ 생성된 데이터베이스 확인 ]

 

   여기까지가 Rocky Linux에 PostgreSQL을 설치하는 과정이다.   이제 외부에서 정상적으로 접속이 되는지 확인을 위해서 DBeaver를 통해서 접속을 해보도록 하겠다.

[ DBeaver에서 PostgreSQL 선택 ]
[ 접속 정보를 입력한다 ]
[ Connection Driver 가 없는 경우 자동으로 설치된다 ]
[ 연결 실패 ]

   만약 연결 실패가 된다면 아마도 Linux에서 외부 접속에 대한 설정과 방화벽에 대한 설정이 정상적으로 처리 되지 않았기 때문에 발생할 것으로 예측할 수 있다.   그러면 일단 Linux 에서 정상적으로 외부 접속을 위한 설정이 되었는지 확인해 보자.

sudo su -

# Open Port
firewall-cmd --zone=public --add-port=5432/tcp --permanent

# Restart Firewall
firewall-cmd --reload

# Check Firewall List
firewall-cmd --list-all

[ Linux에서 방화벽에 대한 설정을 확인한다. ]

 

   다음으로 PostgreSQL 자체에서 외부 접속에 대한 설정을 해주자.

# directory 이동
cd /var/lib/pgsql/14/data

# postgressql configuration 변경
vi ./postgresql.conf

[ listen_addresses 의 값이 localhost 이면서 주석처리가 되어있다. ]

주석처리 된 listen_addresses 의 값을 모두(*)로 바꿔주고 주석을 해제한다.   그냥 마음 편하게 한줄 더 작성하자.

[ 모든 외부 접속이 가능하게 설정 ]

   외부에서 특정 Database에 대해서 접근이 가능하도록 pg_hba.conf 파일을 수정해주자.   해당 파일을 vi 나 nano 로 열어서 가장 밑줄에 db_iamwhatiam 에 대해서 iamwhatiam 계정이 어떤 IP 에서든 접속 가능하게 설정해주자.

cd /var/lib/pgsql/14/data
vi pg_hba.conf

host    db_iamwhatiam   iamwhatiam      0.0.0.0/0                 md5

[ db_iamwhatiam 에 대한 접속 설정 ]

   PostgreSQL 서비스를 재기동 하자.

sudo systemctl restart postgresql-14

[ 설정 변경 후 PostgreSQL 을 재기동 한다. ]

 

[ 정상적으로 접속 되는 것을 테스트 할 수 있다 ]
[ 정상적으로 db_iamwhatiam 에 대한 정보를 트리뷰에서 볼 수 있다 ]