Azure Database for PostgreSQL flexible server (설계와 운영)
PostgreSQL flexible server 의 컴퓨트 계층(Burstable, General Purpose, Memory Optimized), 지원 버전(2026-10 기준 PostgreSQL 14~18, 11~13 은 확장 지원), 영역 중복 고가용성, 네트워크 두 방식, Entra 인증, 서버 매개 변수와 연결 풀링, 확장 기능, 2026-06 Public preview 가 된 Azure HorizonDB 를 정리합니다.
서비스 정리
Azure 의 관리형 PostgreSQL 은 이제 flexible server 하나입니다. 예전 Single Server 는 2025-03 에 퇴역했고, 같은 시기 MariaDB 용 서비스도 2025-09-19 에 퇴역했습니다. 오래된 문서나 Terraform 코드에서 azurerm_postgresql_server(Single Server)를 보면 azurerm_postgresql_flexible_server 로 바꿔야 합니다.
컴퓨트 계층과 저장소
| 계층 | 성격 | 용도 |
|---|---|---|
| Burstable (B 시리즈) | CPU 크레딧 기반 | 개발, 작은 앱. 고가용성 불가 |
| General Purpose (D 시리즈) | 균형 | 대부분의 운영 |
| Memory Optimized (E 시리즈) | 메모리 많음 | 큰 작업 세트, 분석 쿼리 |
저장소는 Premium SSD(크기에 따라 IOPS 가 정해짐)와 Premium SSD v2(IOPS, 처리량을 따로 정함) 중에서 고르고, 저장소 자동 증가를 켜 두면 디스크가 꽉 차서 읽기 전용이 되는 사고를 막습니다. 저장소는 늘릴 수만 있고 줄일 수 없습니다.
지원 버전
2026-10 기준 Microsoft Learn 의 지원 버전 표에는 PostgreSQL 18, 17, 16, 15, 14 가 있고, 13, 12, 11 은 확장 지원(Extended Support) 으로 표시되어 있습니다. 확장 지원은 커뮤니티 수명이 끝난 버전을 유료로 더 쓰게 해 주는 단계이므로, 이 버전들은 업그레이드 계획을 세워야 합니다. PostgreSQL 18 은 일부 확장이 아직 지원되지 않고 io_method = io_uring 설정을 쓸 수 없다는 제약이 문서에 있습니다.
- 마이너 버전은 월간 유지 관리 때 자동으로 올라갑니다. 유지 관리 창을 사용자 지정해 업무 시간을 피합니다.
- 메이저 버전은 제자리 업그레이드로 올릴 수 있습니다. 업그레이드 전에 사용 중인 확장이 대상 버전에서 지원되는지 확인하고, 복원한 사본에서 먼저 시험합니다.
고가용성
| 모드 | 대기 서버 위치 | 효과 |
|---|---|---|
| 영역 중복 HA | 다른 가용성 영역 | 영역 장애 대비. Korea Central 운영 기본 |
| 같은 영역 HA | 같은 영역 | 서버 장애 대비, 지연 최소 |
대기 서버로 동기 복제하므로 장애 조치 때 데이터 손실이 없고, 보통 수십 초~2분 안에 넘어갑니다. 대기 서버는 읽기에 쓸 수 없으므로 읽기 분산은 읽기 복제본(비동기)을 따로 만듭니다. 다른 리전 읽기 복제본을 승격하는 방식으로 리전 재해 복구도 구성합니다. 고가용성을 켜면 컴퓨트와 저장소 요금이 대략 두 배가 됩니다.
네트워크: 만들 때 정함
| 방식 | 설명 | 주의 |
|---|---|---|
| 공용 액세스 + 방화벽 규칙 | 공용 엔드포인트, 허용 IP 만 | Private Endpoint 를 같이 붙일 수 있음 |
| VNet 통합 (사설 액세스) | 위임된 서브넷 안에 서버를 둠 | 만든 뒤 공용 방식으로 못 바꿈. Private DNS 영역 필요 |
새 설계는 공용 액세스 방식으로 만들고 공용 접근을 끈 뒤 Private Endpoint 를 붙이는 쪽이 허브 스포크와 다른 PaaS 와 일관된 패턴이라 많이 쓰입니다. DNS 영역은 privatelink.postgres.database.azure.com 입니다 (Private Endpoint 와 DNS).
인증
Microsoft Entra 인증을 켜고 앱은 관리 ID 로 접속합니다. 비밀번호 대신 Entra 토큰을 비밀번호 자리에 넣는 방식입니다.
# 개발자 로그인 토큰으로 psql 접속 (토큰 수명은 짧음)
export PGPASSWORD=$(az account get-access-token --resource-type oss-rdbms --query accessToken -o tsv)
psql "host=pg-shop-prod.postgres.database.azure.com port=5432 dbname=shop user=dba-group@contoso.com sslmode=require"-- Entra 관리자로 접속해 앱의 관리 ID 를 역할로 등록
SELECT * FROM pgaadauth_create_principal('app-shop-prod', false, false);
GRANT CONNECT ON DATABASE shop TO "app-shop-prod";
GRANT USAGE ON SCHEMA public TO "app-shop-prod";
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO "app-shop-prod";매개 변수와 연결
max_connections의 기본값은 컴퓨트 크기에 따라 정해집니다. 연결 하나가 메모리를 쓰므로 앱 인스턴스가 늘면 금방 모자랍니다.- 내장 PgBouncer 를 켜면 6432 포트로 연결 풀링을 쓸 수 있습니다. 서버리스 앱(Functions, Container Apps)처럼 연결이 많고 짧은 경우에 특히 필요합니다.
shared_preload_libraries에 넣어야 하는 확장(pg_stat_statements, pg_cron 등)과azure.extensions허용 목록에 넣어야 하는 확장이 있습니다. 허용 목록에 없으면CREATE EXTENSION이 거부됩니다.
az postgres flexible-server parameter set -g rg-data-prod -s pg-shop-prod \
--name azure.extensions --value "VECTOR,PG_STAT_STATEMENTS,PG_TRGM"
az postgres flexible-server parameter set -g rg-data-prod -s pg-shop-prod \
--name pgbouncer.enabled --value true성능 확인
- Query Store(
pg_qs)와 쿼리 성능 인사이트에서 오래 걸리고 자주 도는 쿼리를 찾습니다. - 인덱스 튜닝(Intelligent tuning)의 권고를 검토합니다.
- 저장소 IOPS 한도에 붙어 있으면 디스크를 키우거나(Premium SSD) IOPS 를 올립니다(Premium SSD v2).
- 오래 열린 트랜잭션은 vacuum 을 막아 테이블이 부풀게 합니다.
pg_stat_activity에서idle in transaction을 찾습니다.
AI 와 벡터
vector 확장(pgvector)으로 임베딩을 저장하고 근사 최근접 검색을 할 수 있고, Azure 전용 확장으로 DiskANN 인덱스도 제공합니다. 데이터가 이미 PostgreSQL 에 있고 검색 규모가 크지 않다면 별도 검색 서비스 없이 RAG 를 만들 수 있습니다.
Azure HorizonDB
Azure HorizonDB 는 Ignite 2025 에 PrPr 로 발표되고, 2026-06-02 에 Preview 가 된 PostgreSQL 호환 신규 서비스입니다. 저장소 자동 확장 최대 128 TB, 컴퓨트 최대 3,072 vCore, DiskANN 벡터 인덱싱 같은 특징을 내세웁니다. 2026-10 기준 GA 일정은 공개되지 않았고 Preview 는 SLA 가 없으므로, 운영 워크로드는 flexible server 를 기본으로 하고 HorizonDB 는 검증용으로 봅니다.