본문 바로가기
DBMS/PostgreSQL

PostgreSQL 17 바이너리(tar) 설치 완벽 가이드 | Percona 포터블

by IT 성능 전문 블로그 2026. 5. 15.
반응형

 

안녕하세요. 루디쿡 아이티입니다~!! 👨‍💻

이번 포스팅에서는 리눅스 서버 엔지니어와 DBA라면

반드시 마주치게 되는 극한의 환경! 바로

'인터넷이 차단된 폐쇄망 환경'에서

Percona Server for PostgreSQL 17

바이너리(Tarball) 방식으로 완벽하게

설치하는 실전 노하우를 공개합니다!!


💡 왜 'Percona' 이고, 왜 '바이너리(TarBall)' 인가요?

보통 리눅스에서 패키지를 설치할 때 dnf나 yum을 많이 쓰시죠?

하지만 보안이 철저한 실제 엔터프라이즈 환경에서는

인터넷이 연결되어 있지 않은 경우가 대부분입니다.

 

또한, 운영체제의 시스템 경로를 어지럽히지 않고

우리가 원하는 특정 디렉터리(예: /opt/company/postgres)에

DB 엔진을 독립적으로 예쁘게 구성하기 위해서는

바이너리(binary.tar.gz) 설치 방식이 필수입니다.

 

하지만 PostgreSQL에서는 데이터베이스 소스 및

rpm 설치방식만 제공합니다.

 

PostgreSQL의 영원한 동반자인 EDB(Enterprise Data Base)는

PostgreSQL (이하 : PG) v10까지만 Bin(포터블) 설치 형식을 지원합니다.

이는 EDB의 버전 관리 정책에 따라 정해지게 됩니다.
(EDB 공식 다운로드 페이지 : 공식적으로 발표한 공지글)

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

 

하지만 포터블 방식인 바이너리 설치는 아주 강력한

의미를 갖게 됩니다. 그리고 여기에 강력한 모니터링과 보안 기능이 기본 탑재된

Percona 버전을 선택한다면 그야말로 금상첨화죠! 💻

 

 

 

그럼, 빈틈없는 실전 구축 프로세스를 바로 시작해 보겠습니다!


Step 0. 루디쿡아이티 (환경 설정)

진짜 현장감이 느껴지는 완벽한 실무 포스팅이 되려면

구성도(Topology)와 환경 정보가 들어가는 게 필수죠!

 

 

🏗️ 실습 환경 및 네트워크 구성 (Topology)

본격적인 작업에 앞서, 오늘 실습을 진행할 아키텍처 환경을 소개합니다.

보안을 위해 망이 분리된 전형적인 엔터프라이즈 환경입니다.

구분 역할 OS 환경 IP 비고
로컬 PC 작업자 PC 및 DB 접속 클라이언트 Windows 11 172.19.240.1 DBeaver, SSH 클라이언트 설치
A 서버 (Source) 인터넷 연결 가능 (패키지 수집용) Rocky Linux 9 172.19.240.11 외부망 통신 가능
B 서버 (Target) 실제 DB가 설치될 폐쇄망 서버 Rocky Linux 9 172.19.240.10 외부 인터넷 완벽 차단

 

  • 작업 흐름: A서버에서 필요한 설치 파일(tar RPM 및 PostgreSQL 패키지)을 다운로드 함
  • 폐쇄망에 있는 B서버로 전송(scp 등 활용)하여 설치를 진행합니다.

Step 1. 완벽한 집 지어주기 (계정 및 환경 준비)

DB를 구동할 전용 계정인 postgres 유저를 꼼꼼하게 생성하는 것이 첫걸음입니다.

rpm을 설치하게 되면 user / group은 자동으로 생성되지만

바이너리 설치는 user까지 생성해 줘야합니다.

 

단순히 이름만 만드는 것이 아니라,

작업에 필요한 집(홈 디렉터리)과 도구(쉘),

그리고 권한까지 완벽하게 세팅합니다.

# 1. 홈 디렉터리와 bash 쉘을 포함하여 유저 생성
sudo useradd -m -s /bin/bash postgres

# 2. 비밀번호 설정
sudo passwd postgres

# 3. 설치 과정에서 필요한 관리자 권한(sudo) 부여를 위해 wheel 그룹 추가
sudo usermod -aG wheel postgres

 

🚨 [루디쿡의 실전 팁] tar 명령어가 없다면?! PG 17 binary는 어디서 다운로드??
폐쇄망의 최소 설치(Minimal) OS 환경에서는 압축을 풀 tar 명령어조차 없는 비상 상황이 발생합니다!
당황하지 말고 외부(인터넷 가능 서버)에서 tar RPM 패키지를 받아온 뒤, 아래 명령어로 전송해 줍니다.

아래 명령어는 A 서버 (인터넷이 되는 서버에서 실행하세요!! )

#A서버에서 tar 패키지 다운로드 (저장위치 : /tmp)
sudo dnf download --resolve tar --destdir=/tmp

#B서버로 tar를 전송 (저장위치 : /tmp)
sudo scp /tmp/tar-*.rpm root@172.19.240.10:/tmp/

#percona pg 17 다운로드 (저장위치 /tmp)
wget -P /tmp https://downloads.percona.com/downloads/postgresql-distribution-17/17.9/binary/tarball/percona-postgresql-17.9-ssl3-linux-x86_64.tar.gz

#percona pg 17 전송 (저장위치 : /tmp)
scp /tmp/percona-postgresql-*.gz root@172.19.240.10:/tmp/

#A서버에서 tar 패키지 다운로드 (저장위치 : /tmp)


#B서버로 tar를 전송 (저장위치 : /tmp)


#percona pg 17 다운로드 (저장위치 /tmp)


#percona pg 17 전송 (저장위치 : /tmp)


# B서버저장위치 전송 확인

 


Step 2. 바이너리 배포 및 환경 변수 설정

준비된 postgres 계정으로 접속하여, 우리가 원하는 경로에 다운로드한 Percona 패키지의 압축을 풀어줍니다.

# -i(설치), -v(상세히), -h(진행상태 표시)
sudo rpm -ivh /tmp/tar-1.34-9.el9_7.x86_64.rpm
# pg가 설치될 디렉토리 생성 (권한은 최소한을 유지하며 설치함)
mkdir -p /opt/myCompany/postgres
chwon -R postgres:postgres /opt/myCompany/postgres
#(이렇게하여 /opt/myCompany까지는 root의 권한이며 postgres디렉토리만 postgres의 권한을 가져감)

# postgres 유저로 전환
su - postgres

# 지정된 설치 경로로 이동 후 압축 해제 (--strip-components=1 로 껍데기 폴더 날리기)
cd /opt/myCompany/postgres
sudo chown postgres:postgres /tmp/percona-postgresql-17.9*.gz
tar xfz /tmp/percona-postgresql-17.9-ssl3-linux-x86_64.tar.gz --strip-components=1

압축을 풀었다고 끝이 아닙니다!

 

리눅스 시스템이 새로 깐

DB 엔진과 라이브러리를 인식할 수 있도록

환경 변수 파일(env.sh)을 만들어 줍니다.

# vi /opt/myCompany/postgres/env.sh 파일 생성 후 아래 내용 입력
export PGHOME=/opt/myCompany/postgres/percona-postgresql17
export PGDATA=$PGHOME/data
export PGLOG=$PGHOME/logs
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH





작성 후 적용하기: source /opt/myCompany/postgres/env.sh

#환경 변수 로드 (1회성)
source /opt/myCompany/postgres/env.sh

#환경 변수 저장 (OS가 부팅되고 postgres 사용자 백그라운드 프로세스를 시작할 때 bash_profile의 source 이하 음절을 시작함)
echo "source /opt/myCompany/postgres/env.sh" >> /home/postgres/.bash_profile

#디렉토리 생성
mkdir -p $PGDATA $PGLOG

 


Step 3. 데이터베이스 초기화 (initdb) 및 기동

엔진 준비가 끝났으니, 이제 데이터가 담길 진짜 그릇(Cluster)을 만들어 줄 차례입니다.

# 데이터베이스 초기화 (UTF-8 인코딩 및 정렬 규칙 C 설정)
initdb -D $PGDATA --encoding=UTF8 --locale=C

# 백그라운드로 PostgreSQL 서버 기동!
pg_ctl -D $PGDATA -l $PGLOG/postgresql.log start

#PostgresSQL 실행 확인!
pg_ctl -D $PGDATA status

#psql 접속하기
psql

여기까지 진행 후 psql 명령어를 쳤을 때 터미널이 DB 프롬프트로 바뀌면

pg 버전이 나오면 엔진 설치는 대성공입니다! ✨

 


인터넷이 팡팡 터지는 환경에서 dnf install 한 줄로 끝나는 설치도 좋지만,

이렇게 바이너리를 직접 다뤄보면 데이터베이스의 구조와

리눅스 시스템의 권한 체계를 아주 깊이 있게 이해할 수 있습니다.

 

아는 것이 힘이다!!

오늘 배운 바이너리 설치 기법은

다른 오픈소스 솔루션들을 폐쇄망에 구축할 때도

똑같이 응용할 수 있는 강력한 무기가 될 것입니다.

꼭 실무에 적용해 보세요!!

 

이것으로 폐쇄망 환경에서의

Percona PostgreSQL 17 완벽 구축 가이드를 마칩니다.

앞으로도 현장의 피땀 눈물이 담긴 유용한 글로 찾아뵙도록 하겠습니다.

 

IT 성능 전문가, IT를 전하는 루디쿡아이티였습니다!!

 


다음은 PostgreSQL 17 원격 접속 툴(dbeaver)

접속 설정 및 적용에 대해서 포스팅하도록 하겠습니다.

감사합니다~!!

 

반응형