17.1 AWS RDS PostgreSQL
AWS RDS (Relational Database Service) for PostgreSQL은 AWS가 제공하는 매니지드 PostgreSQL. OS·PostgreSQL 설치·패치·백업·HA·복제를 AWS가 책임지고, 사용자는 스키마·쿼리·앱에 집중. 운영 부담을 크게 줄이지만 자체 운영의 자유도와 비교한 트레이드오프가 있습니다.
인스턴스 클래스
| 클래스 | 사용처 |
|---|---|
db.t4g.* (Graviton) | 개발·소규모 |
db.m6i / m6id (intel) | 일반 OLTP |
db.m6g / m7g (Graviton) | cost-effective OLTP |
db.r6i / r7i / r7g | 메모리 집약 |
db.x2i / x2gd | 매우 큰 메모리 |
db.z1d | 고주파 CPU |
x86_64 대신 Graviton (ARM) 클래스가 가격 대비 성능이 좋아 표준 선택지.
스토리지
| 타입 | 사용처 |
|---|---|
| gp3 | 일반 — IOPS·throughput 별도 provisioning |
| io1 / io2 | 고성능 IOPS 보장 |
| io2 Block Express | 최신, 매우 높은 IOPS |
| Aurora (다음 절) | 자체 스토리지 |
스토리지 자동 확장 설정 가능 — 디스크 풀 회피합니다.
기본 구성 요소
| 항목 | 메모 |
|---|---|
| Multi-AZ deployment | 동기 standby + 자동 failover (분 단위 RTO) |
| Read replica | 비동기 standby 최대 15개, 같은/다른 region |
| 자동 백업 | daily snapshot + 5분 단위 PITR (최대 35일 보존) |
| 수동 snapshot | 영구 보존 |
| Parameter group | postgresql.conf 일부 변경 가능 |
| Option group | extension 활성 |
자동 백업
백업 기간 (Backup Window): 03:00~05:00 UTC
보존 기간: 7~35일기본 동작:
- 매일 한 번 snapshot (storage-level)
- 5분 단위 WAL → S3 archive
- PITR: 보존 기간 안 어디든 분 단위
수동 snapshot은 영구 — 삭제 안 하면 계속 비용입니다.
HA — Multi-AZ
flowchart LR
W["client (writer endpoint)"]
AZ1["primary in AZ-1"]
AZ2["standby in AZ-2<br/>(동기 복제)"]
W --> AZ1
AZ1 --> AZ2
classDef pri fill:#ede9fe,stroke:#6d28d9,color:#3b0764
classDef std fill:#d1fae5,stroke:#047857,color:#064e3b
class AZ1 pri
class AZ2 std
| 항목 | 메모 |
|---|---|
| 동기 복제 | commit 응답 = standby 도달 |
| 자동 failover | primary 사고 → 1~2분 안에 standby로 promote, DNS 자동 전환 |
| read는 standby 사용 | Multi-AZ 단독 standby는 read 안 받음. 별도 read replica 필요 |
| Multi-AZ DB Cluster | PG 14+, 2개 standby(읽기 가능) — RTO ↓ |
Read Replica
client → primary (writes)
client → read replica (reads)비동기 streaming 복제. 분석·read 부하 분리합니다. 같은 region·다른 region·다른 계정 모두 가능합니다.
Promote 가능 — disaster recovery 시 새 primary로.
IAM 인증
TOKEN=$(aws rds generate-db-auth-token \
--hostname myrds.region.rds.amazonaws.com \
--port 5432 \
--region us-east-1 \
--username dbuser)
psql "host=myrds.region.rds.amazonaws.com port=5432 user=dbuser password=$TOKEN sslmode=require"- 15분 유효 토큰
- IAM 권한·역할 기반 — 비밀번호 회전 자동
- 사용자가 RDS에
rds_iamrole grant 필요
GRANT rds_iam TO dbuser;확장 (extensions)
지원 확장 목록:
SHOW rds.allowed_extensions;
SELECT * FROM pg_available_extensions;pgvector·pg_partman·postgis·pg_cron·pg_stat_statements·pgaudit 등 100+ 지원합니다. RDS-specific extension(aws_s3 등)도.
지원 안 되는 것:
pg_repack(디스크 영역 권한 필요)- 일부 신규 확장 — RDS 출시 지연
Parameter group
콘솔·CLI에서 파라미터 변경 — pg_settings 컨텍스트별:
dynamic— 즉시 적용static— restart 필요 (RDS 콘솔에서 “pending-reboot”)
기본 DB instance parameter group은 변경 불가 — 자체 group 생성 후 attach.
모니터링
| 도구 | 메모 |
|---|---|
| CloudWatch metrics | CPU·메모리·디스크·연결 등 OS 레벨 |
| Enhanced Monitoring | 1초 단위 OS 메트릭 |
| Performance Insights | 쿼리·wait event 분석 (pg_stat_statements 통합) |
| 자체 모니터링 | postgres_exporter 설치 — outbound 정책 점검 |
Performance Insights가 RDS의 강력한 장점. wait event·세션·쿼리 추세를 한 화면에.
한계
| 한계 | 메모 |
|---|---|
| 슈퍼유저 없음 | rds_superuser 권한으로 일부만 |
| OS·shared_preload_libraries 직접 못 수정 | parameter group으로 |
pg_hba.conf 직접 못 수정 | security group + RDS DB security |
| 로그 파일 직접 못 봄 | CloudWatch Logs export 또는 다운로드 |
| 일부 확장 미지원 | pg_repack 등 |
| 메이저 업그레이드 | RDS 콘솔로 + 점검 시간 |
비용 구성
| 항목 | 비용 |
|---|---|
| 인스턴스 | 시간 단위, Multi-AZ는 ~2배 |
| 스토리지 | GB·month, IOPS 별도 |
| 백업 | 사용한 만큼 ≤ DB 크기 무료, 초과는 GB·month |
| 데이터 전송 | 다른 region·인터넷 비용 |
| read replica | 별도 인스턴스 |
| IAM 인증 | 무료 |
Reserved Instance (13년 계약)로 3060% 절감합니다.
RDS vs 자체 운영
| 측면 | RDS | 자체 |
|---|---|---|
| 운영 부담 | 낮음 | 높음 |
| 자유도 | 제한 (slug 일부 extension·OS 못 만짐) | 완전 |
| 비용 | 같은 사양에서 1.5~2x | 낮음 |
| HA·백업 | 자동 | 직접 구성 |
| 모니터링 | Performance Insights 강력 | 직접 구축 |
| 지원 | AWS support | 내부·외부 컨설팅 |
대부분의 OLTP 운영에는 RDS가 합리적. 매우 큰 규모나 자유도 필요한 경우만 자체.
정리
- AWS RDS = AWS 매니지드 PostgreSQL — 운영 부담 ↓, 자유도 ↓
- Multi-AZ로 HA, read replica로 read 분리
- IAM 인증·Performance Insights·자동 백업이 표준 셋
- 슈퍼유저 없음,
pg_hba.conf직접 못 만짐 - 메이저 업그레이드는 콘솔로
- 비용은 자체 운영보다 1.5~2배 — 운영 부담 절감과 트레이드오프
다음 절(17.2)에서는 RDS의 분산 스토리지 버전 — AWS Aurora PostgreSQL을 봅니다.