−25%

Windows 연간 결제, 10월 31일까지. 요금제 보기

EQVPS

VPS에 PostgreSQL을 설치하고 안전하게 연결하는 방법

Ubuntu에 PostgreSQL 16을 설치하고, 데이터베이스와 사용자를 만들고, 5432 포트를 인터넷에 노출하지 않고 원격 연결하세요. SSH 터널이나 허용 목록을 씁니다.

PostgreSQL 설치는 명령 하나면 됩니다. 사람들이 실수하는 곳은 원격 접속입니다. 5432 포트를 전 세계에 열고 비밀번호를 설정한 다음, 로그가 왜 로그인 시도로 가득한지 의아해합니다. 이 가이드는 Ubuntu 24.04에 Postgres를 설치하고, 데이터베이스를 만들고, 외부에서 연결하는 안전한 방법 두 가지를 보여 줍니다.

1. 설치

apt update && apt install -y postgresql
systemctl status postgresql --no-pager

Ubuntu 24.04에서는 PostgreSQL 16입니다. 기본적으로 localhost에서만 수신합니다. 특별한 이유가 없다면 그대로 두세요.

2. 사용자와 데이터베이스 만들기

sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL

같은 서버의 앱은 postgresql://app:PASSWORD@localhost:5432/appdb로 연결합니다.

3. 노트북에서 연결하기: SSH 터널(권장)

열 것도, 서버에서 설정할 것도 없습니다. 터널이 로컬 포트를 SSH를 통해 전달합니다.

ssh -N -L 5433:localhost:5432 root@203.0.113.10

NAT 요금제에서는 패널에 있는 개인 SSH 포트를 추가합니다.

ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host

터널이 열려 있는 동안 데이터베이스 클라이언트를 localhost:5433으로 향하게 하세요. SSH가 모든 것을 암호화하고, 5432 포트는 인터넷에 닫힌 상태로 유지됩니다. DBeaver나 pgAdmin 같은 GUI 도구에는 같은 일을 하는 “SSH 터널” 탭이 있습니다.

4. 다른 서버의 직접 접속(허용 목록)

다른 곳에 있는 애플리케이션 서버가 직접 연결해야 한다면 그 IP만 허용하세요. 이때 데이터베이스 서버는 전용 IP 요금제여야 합니다. NAT 요금제는 SSH 외의 들어오는 연결을 받지 않기 때문입니다.

/etc/postgresql/16/main/postgresql.conf에서:

listen_addresses = '*'

/etc/postgresql/16/main/pg_hba.conf의 끝에:

hostssl  appdb  app  198.51.100.20/32  scram-sha-256

그 주소 하나에만 방화벽을 열고 재시작합니다.

ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql

hostssl은 암호화된 연결을 강제합니다. Ubuntu 패키지에는 자체 서명 인증서가 들어 있으므로 클라이언트는 sslmode=require로 연결해야 합니다.

5. 합리적인 첫 설정

RAM 2 GB 서버라면 postgresql.conf에서:

shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB

변경 후 재시작하세요. 대부분의 작은 앱에는 이 정도면 충분하고, 실제 쿼리를 보고 나서 조정하면 됩니다.

6. 백업

매일 밤 덤프를 뜨고 일주일 동안 보관합니다.

mkdir -p /var/backups/pg && chown postgres /var/backups/pg
cat > /etc/cron.d/pg-backup <<'EOF'
30 3 * * * postgres pg_dump -Fc appdb > /var/backups/pg/appdb-$(date +\%u).dump
EOF

-Fc는 pg_restore로 복원하는 압축된 덤프를 만듭니다. 덤프는 서버 밖으로도 복사하세요. Managed Backups가 서버 전체의 일일 복원 지점을 더해 줍니다.

관련

자주 묻는 질문

5432 포트를 인터넷에 열어야 하나요?

열지 않는 편이 좋습니다. 노출된 데이터베이스 포트는 끊임없이 스캔되고 무차별 대입 공격을 받습니다. SSH 터널로 연결하거나, 애플리케이션 서버가 직접 연결해야 한다면 pg_hba.conf와 방화벽 양쪽에서 그 IP만 허용하세요.

NAT 요금제에서 PostgreSQL을 쓸 수 있나요?

쓸 수 있습니다. 같은 서버의 앱은 로컬로 연결하고, 여러분은 노트북에서 개인 SSH 포트를 통한 SSH 터널로 데이터베이스에 접속합니다. NAT 요금제가 할 수 없는 것은 다른 서버에서 5432로 들어오는 직접 연결을 받는 일입니다.

PostgreSQL에는 RAM이 얼마나 필요한가요?

수백 메가바이트로 동작하며, 주는 만큼 모두 캐시로 씁니다. 흔한 출발점은 shared_buffers를 RAM의 약 25%로 두는 것입니다. 작은 앱의 데이터베이스라면 서버 RAM 2 GB로 넉넉합니다.

데이터베이스는 어떻게 백업하나요?

pg_dump를 사용자 지정 형식('pg_dump -Fc')으로 쓰고 cron에서 실행하세요. 서버 밖에도 사본을 보관하세요. Managed Backups는 서버 전체의 일일 복원 지점을 더해 줍니다.

어떤 버전의 PostgreSQL이 설치되나요?

Ubuntu 24.04에는 PostgreSQL 16이, Debian 12에는 15가 들어 있습니다. 더 새로운 메이저 버전이 필요하면 PostgreSQL 공식 apt 저장소(apt.postgresql.org)를 추가하세요.

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.