PostgreSQL 18 신기능 총정리: 비동기 I/O부터 UUIDv7까지

작성자: EDB Korea Team
2025년 11월 3일
오픈소스 데이터베이스 PostgreSQL의 새로운 주요 버전인 PostgreSQL 18이 정식 릴리스되었습니다. PostgreSQL 18은 비동기 I/O, 인덱스 스킵 스캔과 같은 성능 개선부터 가상 생성 컬럼, UUIDv7, OAuth 2.0 인증까지 DBA와 개발자가 주목할 만한 다양한 신기능을 제공합니다.
이 글에서는 EDB 김동수 엔지니어가 진행한 ‘PostgreSQL 18 신기능’ 웨비나를 바탕으로 PostgreSQL 18의 주요 변경 사항을 성능, 개발자 경험, 데이터베이스 관리 관점에서 정리합니다.
EDB의 PostgreSQL 18 커뮤니티 기여
PostgreSQL은 전 세계 개발자와 기업이 참여하는 오픈소스 커뮤니티를 기반으로 발전합니다. PostgreSQL 18 릴리스에서도 EDB는 코드 기여와 리뷰, 테스트 등 여러 영역에서 역할을 수행했습니다.
웨비나에서 소개된 바와 같이 Bruce Momjian, Peter Eisentraut를 비롯한 EDB의 주요 개발자들이 이번 릴리스의 기능 개발에 참여했습니다. EDB가 기여한 주요 기능은 다음과 같습니다.
- NOT ENFORCED 제약 조건
- pg_overexplain을 통한 EXPLAIN 개선
- PL/Python에서 Python Limited API 사용
- fdw_postgrs의 SCRAM pass-through 등
이러한 활동은 EDB가 PostgreSQL 제품과 서비스를 제공하는 데 그치지 않고, 코어 커뮤니티의 일원으로서 PostgreSQL의 기술 발전에도 참여하고 있음을 보여줍니다.
PostgreSQL 18 성능 개선: 비동기 I/O와 인덱스 스킵 스캔
PostgreSQL 18에서 특히 주목할 부분은 성능 개선입니다. 대용량 데이터를 처리하는 시스템에서 활용할 수 있는 비동기 I/O와 인덱스 스킵 스캔을 비롯해 여러 쿼리 최적화 기능이 추가되었습니다.
비동기 I/O(Asynchronous I/O) 지원
기존 PostgreSQL은 데이터를 읽고 쓸 때 동기식(Synchronous) I/O 방식을 사용하기 때문에 디스크 작업이 완료될 때까지 기다려야 하는 병목이 발생할 수 있었습니다.
- 개선점: PostgreSQL 18부터는
io worker라는 별도 프로세스가 백그라운드에서 I/O 작업을 미리 처리하는 비동기 I/O(AIO)를 지원합니다. - 핵심 설정: 새로운
io_method매개변수에서 백그라운드 워커를 사용하는worker또는 최신 Linux 커널에서 활용할 수 있는io_uring옵션을 선택할 수 있습니다. - 효과: VACUUM, Sequential Scan, Bitmap Heap Scan 등 대량의 데이터를 읽는 작업에서 최대 2~3배의 읽기 성능 향상과 CPU 효율성 개선을 기대할 수 있습니다.
인덱스 스킵 스캔(Index Skip Scan)
인덱스 스킵 스캔은 Oracle을 비롯한 다른 관계형 데이터베이스 관리 시스템(RDBMS) 사용자에게는 비교적 익숙하지만, 기존 PostgreSQL에서는 지원되지 않았던 기능입니다.
- 기존 문제:
(col1, col2)순서로 복합 인덱스를 생성한 경우,WHERE col2 = 'value'처럼 선행 컬럼인col1조건 없이 쿼리하면 인덱스를 효율적으로 사용하지 못하고 Index Full Scan이나 Sequential Scan이 발생했습니다. - 개선점: Index Skip Scan이 도입되면서 인덱스 선행 컬럼인
col1의 고유 값을 건너뛰고col2의 값만으로 인덱스를 탐색할 수 있게 되었습니다. - 효과: 웨비나에서 공개된 테스트에서는 특정 쿼리가 읽는 버퍼 수가 1,455개에서 32개로 줄었고, 실행 시간은 12.004ms에서 0.088ms로 단축되었습니다.
이 밖에도 병렬 GIN 인덱스 빌드(Parallel GIN index builds), EXCEPT 및 INTERSECT 연산 성능 개선, 셀프 조인 제거를 비롯한 옵티마이저 개선을 통해 전반적인 쿼리 성능이 향상되었습니다.
PostgreSQL 18 개발자 경험 개선
PostgreSQL 18에는 애플리케이션 개발과 데이터 모델링을 더욱 편리하게 만드는 가상 생성 컬럼, UUIDv7, 시간 제약 조건 등의 기능도 추가되었습니다.
가상 생성 컬럼(Virtual Generated Columns)
- 기능: 데이터를 디스크에 물리적으로 저장하지 않고 쿼리 시점에 계산하는 가상 컬럼 기능이 추가되었습니다.
GENERATED ALWAYS AS (...) VIRTUAL구문을 사용합니다. - 장점:
first_name과last_name을 결합해full_name을 만들거나 JSON 데이터에서 특정 값을 추출하는 등 파생 데이터를 별도의 저장 공간 없이 사용할 수 있습니다. 로그 테이블이나 뷰(View)를 대체하는 용도로도 활용할 수 있습니다.
UUIDv7() 함수 지원
기존 UUIDv4는 무작위로 생성되므로 고유성은 보장하지만, B-Tree 인덱스에 저장할 때 I/O 성능 저하를 유발할 수 있다는 문제가 있었습니다.
- 개선점: UUIDv7은 타임스탬프(Timestamp)를 기반으로 생성됩니다.
- 장점: 생성된 UUID가 시간순으로 정렬되므로 B-Tree 인덱스에 순차적으로 삽입되어 인덱스 성능 저하를 줄일 수 있습니다. 대규모 로그, IoT 데이터 및 이벤트 시스템처럼 대량의 INSERT가 발생하는 환경에 유용합니다.
시간 제약 조건(Temporal Constraints)
시간 제약 조건은 이력 관리 테이블처럼 기간 데이터의 중복을 제어해야 하는 환경에서 활용할 수 있는 기능입니다.
- 기능: 시작일과 종료일로 구성된 기간 데이터가 서로 겹치지 않도록 보장하는
WITHOUT OVERLAPS제약 조건을 지원합니다. 이 기능을 사용하려면btree_gist확장이 필요합니다. - 장점: 기존에는 애플리케이션 로직이나 트리거로 처리해야 했던 기간 중복 방지 로직을 데이터베이스 수준에서 구현할 수 있습니다.
PostgreSQL 18 관리 및 보안 기능 개선
PostgreSQL 18은 DBA가 인증 체계를 구성하고 쿼리 실행 계획을 분석하는 데 필요한 관리 및 보안 기능도 개선했습니다.
OAuth 2.0 및 OIDC 인증 지원
PostgreSQL 18에서는 기존 패스워드 방식과 함께 현대적인 토큰 기반 인증 방식을 사용할 수 있습니다.
- 기능: OAuth 2.0 및 OIDC 토큰 기반 인증을 지원합니다.
- 장점: ID 공급자(IdP)와 연동하면 중앙 인증, 다중 인증(MFA), 싱글 사인온(SSO)을 구현할 수 있어 보안 및 관리 편의성을 높일 수 있습니다.
EXPLAIN 유틸리티 개선
쿼리 튜닝에 사용하는 EXPLAIN도 개선되었습니다.
- 기존 방식:
EXPLAIN (ANALYZE)실행 시 공유 버퍼의 적중 및 읽기 상태를 확인하려면BUFFERS옵션을 별도로 추가해야 했습니다. - 개선점: PostgreSQL 18부터는
EXPLAIN (ANALYZE)만 실행해도 버퍼 사용량이 기본적으로 출력됩니다. DBA와 개발자가 자주 사용하는 실행 계획 분석 작업을 더욱 편리하게 수행할 수 있습니다.
PostgreSQL 18 신기능 정리
PostgreSQL 18은 비동기 I/O와 인덱스 스킵 스캔을 통해 대용량 데이터 처리와 쿼리 실행 성능을 개선했습니다. UUIDv7, 가상 생성 컬럼, 시간 제약 조건은 애플리케이션 개발과 데이터 모델링의 유연성을 높여줍니다.
OAuth 2.0 및 OIDC 인증과 EXPLAIN 개선은 현대적인 인증 체계와 데이터베이스 운영에 필요한 관리 편의성을 제공합니다. PostgreSQL 18로 업그레이드할 계획이라면 현재 워크로드와 운영 환경을 기준으로 각 기능의 적용 가능성을 검토하는 것이 좋습니다.
이 포스팅은 EDB의 ‘PostgreSQL 18 New Features’ 웨비나 내용을 바탕으로 재구성되었습니다. 전체 웨비나 영상은 EDB 코리아 유튜브 채널에서 다시 볼 수 있습니다.
PostgreSQL 18 신기능 FAQ
PostgreSQL 18에서 가장 주목할 만한 성능 개선은 무엇인가요?
대표적인 성능 개선 기능은 비동기 I/O와 인덱스 스킵 스캔입니다. 병렬 GIN 인덱스 빌드, EXCEPT 및 INTERSECT 연산 개선, 셀프 조인 제거 등의 옵티마이저 개선도 포함됩니다.
PostgreSQL 18의 비동기 I/O는 어떤 기능인가요?
별도의 I/O 워커가 백그라운드에서 I/O 작업을 미리 처리하는 기능입니다. io_method 매개변수에서 worker 또는 io_uring 방식을 선택할 수 있습니다.
PostgreSQL 18의 인덱스 스킵 스캔은 언제 유용한가요?
복합 인덱스의 선행 컬럼 조건이 쿼리에 없을 때 유용합니다. 선행 컬럼의 고유 값을 건너뛰면서 뒤쪽 컬럼의 조건으로 인덱스를 탐색할 수 있습니다.
UUIDv7은 UUIDv4와 무엇이 다른가요?
UUIDv4가 무작위 값을 사용하는 것과 달리 UUIDv7은 타임스탬프를 기반으로 생성됩니다. 생성된 값이 시간순으로 정렬되므로 B-Tree 인덱스에 순차적으로 삽입하는 데 유리합니다.
PostgreSQL 18은 OAuth 2.0 인증을 지원하나요?
PostgreSQL 18은 OAuth 2.0 및 OIDC 토큰 기반 인증을 지원합니다. ID 공급자와 연동하면 중앙 인증, MFA 및 SSO를 구성할 수 있습니다.
PostgreSQL 18에서 EXPLAIN은 어떻게 개선되었나요?
PostgreSQL 18에서는 EXPLAIN (ANALYZE)를 실행할 때 버퍼 사용량이 기본적으로 출력됩니다. 기존처럼 버퍼 정보를 확인하기 위해 BUFFERS 옵션을 매번 추가할 필요가 없습니다.