PostgreSQL 18이 베타 단계에 진입하면서 데이터베이스 커뮤니티의 관심이 집중되고 있습니다. 이번 버전은 특히 성능과 개발자 경험 측면에서 획기적인 개선을 담고 있으며, PgDog와 같은 관련 프로젝트도 PostgreSQL 생태계를 더욱 풍부하게 만들고 있습니다. PostgreSQL 18의 주요 기능과 PgDog 프로젝트의 동향입니다.
PostgreSQL 18 개요
PostgreSQL Global Development Group은 2025년 5월 8일에 PostgreSQL 18 Beta 1을 공식 발표했습니다. 현재 베타 테스트 중이며, 정식 출시 전까지 일부 기능에 변경이 있을 수 있습니다. 이미 Amazon RDS Database Preview Environment에서 PostgreSQL 18 Beta 1을 사용해볼 수 있어, 관리형 데이터베이스 환경에서도 새로운 기능을 미리 평가할 수 있습니다.
PostgreSQL 18의 주요 기능
1. 비동기 I/O (Asynchronous I/O) 지원
PostgreSQL 18의 가장 주목할 만한 변화는 비동기 I/O 지원입니다. 이는 특히 클라우드 환경에서 성능을 크게 향상시킵니다.
기존 방식의 한계
- 동기식 I/O는 디스크 작업이 완료될 때까지 CPU가 대기하는 블로킹 방식으로 작동
- 디스크 I/O가 병목 현상이 되어 전체 데이터베이스 성능에 제한을 가져옴
비동기 I/O의 장점
- 여러 디스크 읽기 작업을 병렬로 처리하여 CPU 활용도와 전체 처리량 향상
- 특히 클라우드 환경에서 놀라운 성능 개선 효과
구현 방식
io_method
설정을 통해 세 가지 모드 중 선택 가능:sync
: 기존 동기 방식worker
: I/O 전담 워커 프로세스가 비동기 처리 (기본값)io_uring
: Linux 커널 5.1+ 환경에서 사용 가능한 고성능 인터페이스, 워커 프로세스 없이 직접 커널과 통신
성능 향상
- AWS 환경 벤치마크 결과,
io_uring
방식이 기존 동기 방식 대비 최대 2.8배 빠른 디스크 읽기 성능을 보임 effective_io_concurrency
설정의 기본값이 1에서 16으로 상향되어 내부 비동기 read-ahead 요청 수 증가
모니터링
- 새로운
pg_aios
뷰를 통해 현재 진행 중인 비동기 요청의 상세 정보 확인 가능
2. 쿼리 최적화 및 인덱싱 개선
다중 열 B-트리 인덱스 스킵 스캔
- "=" 조건이 없는 쿼리에서도 인덱스를 효율적으로 활용할 수 있게 됨
- 다중 열 인덱스의 활용도를 크게 높여 쿼리 성능 향상
기타 쿼리 최적화
- OR 및 IN (...) 구문을 포함한 쿼리의 성능 개선
- 파티션 제거 효율성 향상 및 계획 단계에서 제거된 파티션 잠금 방지
- 파티션 단위 조인 개선 및 메모리 사용량 감소
- GIN 인덱스의 병렬 빌드 지원으로 JSON 및 전체 텍스트 검색 성능 향상
유연한 파티션 관리
VACUUM ONLY
및ANALYZE ONLY
구문 도입으로 부모 테이블만 처리 가능- 파티션 키 및 물리적 뷰에 대한 고유 인덱스 정의 허용
3. UUIDv7 지원
UUIDv7은 인덱스 성능과 정렬 가능성을 모두 갖춘 새로운 UUID 표준으로, PostgreSQL 18에서 기본 지원됩니다.
UUIDv7의 장점
- 시간 기반 정렬 구조를 채택하여 인덱스 비국소성 문제 해결
- 순차적 값을 생성하여 B-트리 인덱스 삽입 효율 증가
- 기존 UUID와 동일한 고유성 보장
제공 기능
uuidv7()
함수로 UUIDv7 생성 가능- 타임스탬프 추출 및 커스텀 시간 입력 기능 제공
uuidv4()
는gen_random_uuid()
의 별칭으로 추가
4. NOT NULL 제약 조건 개선
유연한 제약 조건 관리
- NOT NULL 제약 조건을 NOT VALID 속성으로 설정 가능
- 테이블 전체 스캔 없이 제약 조건을 추가하고 나중에 유효성 검사 수행 가능
- 유효성 검사 시 ShareUpdateExclusiveLock만 유지하여 일반 DML 작업 계속 가능
추가 기능
- NOT NULL 제약 조건에 이름 지정 가능
- 외래 테이블에 대한 NOT NULL 제약 조건 지원
ALTER TABLE ... ALTER CONSTRAINT ... [NO] INHERIT
구문으로 제약 조건 상속성 제어
5. 모니터링 및 관측성 강화
향상된 진단 도구
- EXPLAIN ANALYZE에 BUFFERS 출력 자동 포함
- EXPLAIN ANALYZE VERBOSE에 WAL, CPU, 평균 읽기 통계 추가
- 백엔드별 I/O 통계 보고 기능 (
pg_stat_get_backend_io()
) pg_stat_io
에 바이트 단위 I/O 활동 및 WAL I/O 활동 행 추가- 체크포인트 관련 통계 및 병렬 워커 활동 모니터링 개선
- 논리적 복제 충돌 정보 확인 기능
6. 보안 기능 강화
- OAuth 인증 도입으로 OAuth 2.0 메커니즘을 통한 사용자 인증 지원
- FIPS 모드 동작 검증 및 강제 기능 추가
- MD5 비밀번호 인증 대신 보다 안전한 SCRAM 인증 방식 도입
- 대형 객체에 대한 접근 권한 확인 기능 (
has_largeobject_privilege
)
7. 개발자 경험 개선
가상 생성 열
- 가상 생성 열(Virtual Generated Columns) 도입으로 값을 저장하지 않고 쿼리 실행 시 계산
- 저장된 생성 열의 논리적 복제 지원
기타 개선사항
- RETURNING 절에서 이전(OLD) 및 현재(NEW) 값 모두 액세스 가능
- COPY 명령의 오류 처리 개선
- plpgsql에서 이름이 지정된 커서 인수에 대해 => 구문 허용
8. 추가 기능 및 개선사항
- 로컬 테이블처럼 외래 테이블 생성 가능 (
CREATE FOREIGN TABLE ... LIKE
) - 다양한 새로운 함수 추가 (crc32, crc32c, gamma, lgamma 등)
- psql에 파이프라인 쿼리 발행 및 명명된 커서 인수를 위한 새로운 명령 추가
- SIMD 명령을 사용한 JSON 처리 성능 향상
- NUMA 인식 기능 추가
- PL/Python 개선 및 최소 지원 Python 버전을 3.6.8로 변경
PostgreSQL 확장 모듈 업데이트
PostgreSQL 18에서는 다양한 확장 모듈도 함께 개선되었습니다.
pg_logicalinspect
: 논리적 스냅샷 검사를 위한 새로운 확장pg_overexplain
: EXPLAIN 출력에 디버그 세부 정보 추가postgres_fdw
: 원격 연결 정보 출력 개선file_fdw
: 유효하지 않은 파일 행 처리 기능 강화amcheck
: GIN 인덱스 확인 기능 추가pg_buffercache
: 버퍼 evict 기능 제공pg_stat_statements
: 쿼리 추적 기능 향상 및 성능 개선
PgDog 프로젝트 동향
PgDog는 PostgreSQL의 수평적 확장을 지원하는 유망한 오픈소스 프로젝트로, 트랜잭션 풀링과 자동 샤딩 기능을 제공합니다.
PgDog의 주요 특징
아키텍처 및 구현
- Rust로 작성된 고성능 트랜잭션 풀러 및 논리적 복제 관리자
- PgBouncer와 유사하면서도 쿼리 분석 및 복제까지 지원하는 애플리케이션 계층 프록시
- Kubernetes 및 Docker로 쉽게 배포 가능
핵심 기능
- 로드 밸런싱
- PostgreSQL 쿼리 기반 트래픽 분산
- SELECT는 복제본으로, INSERT/UPDATE는 기본 노드로 자동 라우팅
- 다양한 전략 지원 (round robin, random, least active connections 등)
- 실시간 헬스 체크 및 자동 Failover
- 트랜잭션 풀링
- 세션/트랜잭션 단위 풀링 지원
- 수십만 클라이언트를 소수의 PostgreSQL 연결로 처리 가능
- 샤딩 및 복제
- SQL 분석을 통해 shard key 추출 및 해당 샤드에 쿼리 자동 전달
- 교차 샤드 쿼리 결과 조합
- COPY 명령 샤드 단위 분할 처리
- 논리적 복제 지원으로 기존 PostgreSQL 클러스터를 중단 없이 확장 가능
- 관리 및 모니터링
- .toml 설정 파일 사용, 재시작 없이 설정 변경 가능
- 표준 PgBouncer 관리 포트 + OpenMetrics 지원
현재 상태
- 초기 단계 프로젝트로, 조기 채택자를 환영
- 성능 최적화에 중점, 벤치마크 결과 제공
- AGPL v3 라이선스로 배포
커뮤니티 논의 및 트렌드
PostgreSQL 커뮤니티에서는 다음과 같은 주제가 활발히 논의되고 있습니다.
- 파티셔닝 및 외래 키 제약 조건
- 파티션된 테이블에서 외래 키 제약 조건 관리의 어려움
- NOT VALID 속성을 사용한 제약 조건 추가 및 유효성 검사 방법
- partman과 같은 도구 활용 방안
- 클라우드 환경 최적화
- AWS 등 클라우드 환경에서의 PostgreSQL 성능 최적화
- io_uring의 효과 및 활용 방안
- 비동기 I/O의 실제 효과와 적용 전략
- 스키마 문서화
- 효과적인 스키마 문서화 방법
- 설계 결정 문서화 및 COMMENT ON 사용
- 무료/오픈 소스 문서화 도구
- 고가용성 및 확장성
- Patroni 환경에서의 Consul 사용 및 라이선스 문제
- 수평적 확장 솔루션의 비교 및 평가
- 실시간 데이터 변경 추적 방법
PostgreSQL 18은 비동기 I/O 지원을 통한 혁신적인 성능 개선을 포함하여 다양한 영역에서 중요한 발전을 이루었습니다. 특히 클라우드 환경 사용자에게 큰 이점을 제공할 것으로 예상됩니다. UUIDv7 지원과 NOT NULL 제약 조건 관리의 유연성 증가는 개발자와 DBA에게 실질적인 가치를 제공합니다. PgDog와 같은 프로젝트는 PostgreSQL의 수평 확장 및 고가용성을 위한 유망한 솔루션을 제시하고 있습니다. 커뮤니티에서는 파티셔닝, 제약 조건, 문서화 등 실제 운영 환경에서의 도전 과제에 대한 활발한 논의가 이어지고 있습니다.
향후 PostgreSQL 18의 정식 출시와 함께 비동기 I/O 기능이 실제 환경에서 어떻게 활용되고 추가적인 최적화가 이루어질지 주목할 필요가 있습니다. 또한 클라우드 환경에서의 성능 및 관리 최적화는 계속해서 중요한 주제가 될 것으로 예상됩니다. PostgreSQL 18을 도입하려는 조직은 베타 버전을 테스트하여 새로운 기능의 이점을 평가하고, 특히 비동기 I/O와 같은 성능 관련 기능의 효과를 미리 확인하는 것이 좋습니다. 이를 통해 정식 버전 출시 후 원활한 전환과 최적의 성능을 얻을 수 있을 것입니다.
댓글