백엔드 데이터 인프라 42편. PostgreSQL 운영 설치 — 바이너리·Docker·관리 서비스(RDS·Cloud SQL) 옵션 비교 풀어쓴 학습 노트.
이 글은 백엔드 데이터 인프라 시리즈 70편 중 42편이에요. Part 3 운영의 시작. 2편 로컬 설치 가 "개발 PC" 였다면, 이번 42편은 운영 환경 PG 설치 옵션 비교.
운영 PG 4가지 선택
| 옵션 | 의미 | 책임 |
|---|---|---|
| 직접 바이너리 | 본인 서버 + 패키지 설치 | DBA 모두 본인 |
| Docker | 컨테이너 + 본인 운영 | 운영 본인 |
| 관리 서비스 | AWS RDS·Cloud SQL 등 | DB 자체는 클라우드 |
| 서버리스 | Neon·Supabase 등 | 거의 모두 클라우드 |
소규모 = 관리 서비스 (RDS), 중규모 = 관리 서비스 또는 Docker, 대규모 = 직접 바이너리 + 전담 DBA. 한국 회사 대부분 = 관리 서비스.
직접 바이너리 — apt·yum
# Ubuntu·Debian
sudo apt install postgresql-18 postgresql-contrib
# RHEL·CentOS
sudo dnf install postgresql-server postgresql-contrib
# 초기화·시동
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
장점: 완전한 제어. 단점: OS 설치·튜닝·복구·HA 모두 본인.
Docker — 운영용 설정
# docker-compose.yml
services:
postgres:
image: postgres:18
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
POSTGRES_DB: appdb
volumes:
- pgdata:/var/lib/postgresql/data
- ./postgresql.conf:/etc/postgresql/postgresql.conf
- ./pg_hba.conf:/etc/postgresql/pg_hba.conf
command:
- postgres
- -c
- config_file=/etc/postgresql/postgresql.conf
secrets:
- db_password
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 10s
ports:
- "5432:5432"
secrets:
db_password:
file: ./secrets/db_password.txt
volumes:
pgdata:
운영 Docker = secrets·healthcheck·volume·외부 설정 4가지.
AWS RDS — 가장 흔함
[Spring App] → [Application Load Balancer] → [RDS PostgreSQL Primary]
├→ Read Replica 1
└→ Read Replica 2
장점: - 자동 백업·복구 - Multi-AZ 자동 페일오버 - Read Replica 쉽게 추가 - 패치·업그레이드 자동 - 모니터링 통합 (CloudWatch·RDS Performance Insights)
단점: - 슈퍼유저 권한 X (PG 확장 일부 제한) - 비용 (작은 인스턴스도 월 $50+)
설정 핵심:
- db.t4g.medium 작게 시작 → 트래픽 따라 스케일 업
- Multi-AZ = 운영 무조건
- 자동 백업 7~30일
AWS Aurora PostgreSQL — 더 강력
Aurora = AWS 의 "PG 호환 분산 스토리지".
| RDS PG | Aurora PG | |
|---|---|---|
| 스토리지 | EBS | 분산·자동 복제 6 copy |
| 백업 | 디스크 스냅샷 | 지속적 (PITR) |
| 복제 | 비동기 | 거의 동기 |
| 페일오버 | 30~60초 | 10~30초 |
| 비용 | 기본 | 1.5~2배 |
| 호환성 | PG 100% | PG 95%+ |
큰 트래픽·금융·중요 시스템 = Aurora. 일반 = RDS.
Google Cloud SQL·Azure DB
비슷한 관리 서비스. 클라우드 전체 스택에 맞춰 선택. Spring 백엔드 = AWS RDS 가 한국에서 가장 흔함.
서버리스 — Neon·Supabase
[Spring App] → [Neon HTTP API] → [Neon Storage]
특징: - 사용량 만큼 과금 (vs 항상 켜진 RDS) - 자동 sleep·wake - Branching (Git 처럼 DB 브랜치) - 학습·작은 사이드 프로젝트에 좋음
대규모 운영엔 아직 RDS·Aurora 우세.
옵션 선택 룰
| 시나리오 | 추천 |
|---|---|
| 사이드 프로젝트 | Neon·Supabase |
| 스타트업 MVP | AWS RDS (작은 인스턴스) |
| 일반 회사 | AWS RDS Multi-AZ |
| 큰 트래픽·금융 | AWS Aurora |
| 온프레미스 (의무) | Docker 또는 직접 바이너리 |
| 학습 | Docker 로컬 |
99% 한국 회사 = AWS RDS 또는 Aurora.
환경 분리 — dev·staging·prod
[로컬 개발] → Docker (개발자 PC)
[CI 테스트] → Testcontainers (자바 백엔드 입문 54편)
[Dev] → 작은 RDS 인스턴스
[Staging] → 운영과 동일 구성 (작은 사이즈)
[Prod] → RDS Multi-AZ + Read Replica
각 환경의 PG 버전·확장·설정 일치가 운영 안전의 토대.
버전 선택
- 새 프로젝트 = PG 18 (또는 LTS 16)
- 운영 중 = 기존 버전 유지, 1~2년 후 major 업그레이드
PG 메이저 버전 = 1년에 한 번. 최신 버전 즉시 채택은 위험 — 1~2년 안정화 후 채택이 운영 표준.
함정 5가지
(1) 작은 인스턴스 + 큰 트래픽
운영 시작 시 너무 작은 인스턴스 → 갑작스러운 트래픽에 폭주. 모니터링 + 스케일링 정책.
(2) Multi-AZ 안 켬
운영 = Multi-AZ 무조건. 단일 인스턴스 = 장애 시 다운타임.
(3) 자동 백업 잘못 설정
RDS 자동 백업 = 7~30일 보존. 너무 짧으면 — 한 달 전 데이터 복구 불가.
(4) Aurora·RDS 혼동
비슷해 보이지만 — 가격·성능·확장성 모두 다름. 큰 결정.
(5) 직접 바이너리 + 작은 팀
DBA 없는 5인 팀이 직접 PG 운영 = 위험. 관리 서비스가 훨씬 안전.
RDS PostgreSQL Multi-AZ + Read Replica 2~3개 + PG 16/18. 트래픽 증가 시 Aurora 검토. 직접 바이너리는 큰 회사 + DBA 전담 팀일 때만.
한 줄 정리 — 운영 PG 4옵션 = 직접·Docker·RDS·서버리스. 한국 99% = AWS RDS Multi-AZ. 큰 트래픽 = Aurora. PG 18 신규, 운영은 LTS. dev·staging·prod 환경 일치. Multi-AZ + 자동 백업 + Read Replica 표준.
시험 직전 한 번 더 — 운영 설치 입문자가 매번 헷갈리는 것
- 운영 옵션 4 = 직접·Docker·관리 서비스·서버리스
- 한국 99% = AWS RDS
- 큰 트래픽 = AWS Aurora
- Aurora = 분산 스토리지·빠른 페일오버·1.5~2배 비용
- 관리 서비스 = 슈퍼유저 X (확장 일부 제한)
- Multi-AZ = 운영 무조건
- Read Replica = 읽기 부하 분산
- 자동 백업 7~30일
- PITR = Point-In-Time Recovery
- 작은 인스턴스 시작 + 스케일링
- dev·staging·prod 환경 일치
- Testcontainers (CI) = JPA 입문 54편
- 버전 = LTS 안정화 후 채택
- Docker 운영 = secrets·healthcheck·volume
- pg_isready = 헬스 체크
- Neon·Supabase = 서버리스 (사이드 프로젝트)
- Cloud SQL·Azure DB = 비슷
- 직접 바이너리 = 전담 DBA 필요
- 학습 = Docker 로컬
- PG 18 = 2025 신버전
- RDS 비용 = 작은 t4g.medium 월 $50+
- 모니터링 = CloudWatch + Performance Insights
시리즈 다른 편
- Part 2 SQL Language 깊이: 28~41편 완주
- Part 3 운영: 42편 (현재 글)
시리즈 다음 글
다음 글(43편)에서는 postgresql.conf 핵심 설정 — 메모리·로그·복제·확장.
공식 문서: PostgreSQL 18 — Installation에서 더 자세한 사양을 확인할 수 있어요.