오픈소스 인사이트
home
오픈소스 기술 동향
home
🚀

PostgreSQL 18, 무엇이 달라졌나

들어가며

드디어 나왔어요!
오픈소스 데이터베이스의 대표주자인 PostgreSQL이 2025년 9월 25일, 18 버전을 정식 출시했습니다.
이번 릴리스는 더 빠른 I/O짧아진 업그레이드 시간똑똑해진 인덱스 & 쿼리 엔진, 그리고 개발자 경험 개선을 핵심 메시지로 내세웠어요.
특히 운영 환경에서의 체감 성능이 크게 향상되어, DBA는 물론 개발자·운영자 모두가 서비스 품질과 생산성 측면에서 실질적인 이점을 얻을 수 있습니다.
그럼 이제 PostgreSQL 18에서 어떤 변화가 있었는지, 아래 내용을 통해 하나씩 살펴보러 가볼까요?

비동기 I/O (Asynchronous I/O, AIO)

PostgreSQL은 오랫동안 동기식 I/O 모델로 동작해왔습니다.
즉, 읽기 요청마다 백엔드 프로세스가 운영체제의 응답을 기다려야 하는 구조죠.
이런 구조는 간단하고 안정적이지만, 요청이 많을수록 대기 시간이 쌓여 전체 처리 속도가 느려지는 한계가 있습니다.
PostgreSQL 18에서는 새로운 I/O 서브시스템을 도입하면서 이 문제를 정면으로 해결했습니다.
이제 데이터베이스가 I/O 요청을 병렬로 발행하여, 운영체제의 readahead 메커니즘에 의존하지 않고
더 적극적으로 데이터를 읽어올 수 있게 되었죠.
그 결과, Cold Cache 환경에서 최대 3배의 성능 향상을 기록했습니다
파라미터
설명
비고
io_method=sync
기존 동기식 I/O
안정적. 성능 향상 없음
io_method=worker
별도 I/O 워커로 비동기 처리
기본값. OS 제약 적음
io_method=io_uring
고성능 비동기 I/O (Linux 5.1+)
liburing 필요
io_workers
I/O 워커 수 (기본 3)
과다 설정은 비효율적
 벤치마크 결과 (AWS c7i.8xlarge, 100GB io2 EBS 기준)
환경
실행 시간
속도 향상
PostgreSQL 17 (기준)
약 15.8초
-
18 + sync
약 15.0초
1.05배
18 + worker (3개)
약 10.0초
1.6배
18 + io_uring
약 5.7초
최대 3배 빠름
비동기 I/O는 특히 CPU 여유가 있는 환경이나 읽기 중심 워크로드에서 큰 효과를 보입니다.
PostgreSQL 18은 여기에 pg_aios 뷰를 추가해, 운영자가 현재 진행 중인 I/O 요청을 직접 모니터링할 수도 있습니다.

B-tree 인덱스 Skip Scan

PostgreSQL 18은 멀티컬럼 B-tree 인덱스 활용성을 크게 확장했습니다.
기존에는 인덱스의 선행 컬럼이 조건에 포함되지 않으면 인덱스 자체를 사용할 수 없었지만, 이번 버전에서
새롭게 도입된 Skip Scan 기능 덕분에 후행 컬럼만으로도 인덱스를 활용할 수 있습니다.
그 결과, Full Scan이 수행되던 쿼리들이 인덱스 기반 탐색으로 대체되어 대규모 성능 향상을 기대할 수 있습니다.

동작 원리

Skip Scan은 선행 컬럼이 생략된 경우, PostgreSQL이 내부적으로 distinct value를 인식해 필요한
인덱스 구간만 선택적으로 탐색하도록 도와줍니다.
즉, 불필요한 인덱스 페이지는 건너뛰고(skip) 필요한 위치로 바로 접근하죠.
이 방식은 특히 선행 컬럼의 카디널리티가 낮은 경우(예: 1~4 수준) 큰 효과를 냅니다.

테스트 결과 (PG17 vs PG18)

버전
실행 계획
실행 시간
PostgreSQL 17
Parallel Seq Scan
약 516ms
PostgreSQL 18
Index Only Scan (Skip Scan)
약 0.059ms
PostgreSQL 17 및 18 각각의 버전에서 테스트를 수행해본 결과, 약 8,000배 빠른 실행 결과가 나왔습니다
물론 실제 환경에서는 데이터 분포나 인덱스 설계에 따라 속도 향상 폭이 다를 수 있습니다.
하지만 이 기능은 “인덱스 비활성 영역”을 최소화했다는 점에서 의미가 큽니다.

pg_upgrade 성능 및 호환성 개선

기존 PostgreSQL 업그레이드에서는 플래너 통계가 보존되지 않아, 업그레이드 직후 ANALYZE 완료 전까지 계획 품질이 불안정한 경우가 있었습니다.
PostgreSQL 18은 이제 플래너 통계를 그대로 이어받을 수 있도록 개선했습니다. 이 덕분에 업그레이드 직후에도 안정적인 실행 계획 유지가 가능해졌습니다.
또한 --swap 업그레이드 모드가 새로 도입되어, 디렉토리 단위로 데이터 클러스터를 교체하는 구조로 
대규모 시스템에서도 속도 향상을 제공합니다.
 --swap vs --link 비교
옵션
방식
특징
--swap
디렉터리 단위 교체
대규모 테이블에서 더 빠름
--link
하드링크 재사용
기존 방식. 속도는 빠르나 파일 수 많으면 비용↑
벤치마크 결과, 약 1.3배 빠른 업그레이드 속도를 확인했습니다.
특히 수천 개 이상의 릴레이션을 가진 환경이라면 --swap이 뚜렷한 우위를 보입니다.

UUIDv7

PostgreSQL 18은 새로운 UUIDv7 표준(RFC 9562)을 공식 지원합니다.
기존 UUIDv4는 완전 난수 기반이라 인덱스가 무작위로 삽입되어 페이지 단편화가 심했지만,
UUIDv7은 시간 기반 구조(상위 48비트 타임스탬프 + 난수 하위 비트)로 되어 있어 정렬 가능성과
인덱스 효율성을 동시에 확보했습니다.

 UUIDv4 vs UUIDv7, 뭐가 다를까?

UUIDv4는 완전 난수(random) 기반입니다.
상위·하위 비트를 모두 랜덤 값으로 채워 넣기 때문에 시간 정보가 전혀 없고, 데이터가 정렬되지 않은 상태로 삽입됩니다.
이로 인해 대규모 테이블에서는 인덱스의 지역성(Locality) 이 떨어지면서 디스크 페이지 분할이 늘어나고,
조회 성능이 떨어질 수 있습니다.
반면 UUIDv7은 ‘시간순 증가’를 특징으로 합니다!
상위 48비트에 밀리초 단위 Unix 타임스탬프를 포함하고, 하위 74비트에는 여전히 난수(random bits) 를
유지합니다.
결국 UUIDv7은 정렬 가능하면서도 고유성을 유지하고, B-tree 인덱스 효율까지 크게 개선된 버전이라고 할 수 있습니다

성능 비교 (UUIDv4 vs UUIDv7)

PostgreSQL 18에서 테스트를 수행해보았습니다.
단건 조회 응답속도에서는 비슷한 수치로 나타났지만 범위 조회 응답 속도 측면에서는 UUIDv7이 약 4.5배 더 빠른 속도로, 전반적인 처리 효율이 향상된 것으로 확인되었습니다.
 결론: UUIDv7은 시간 정보를 활용해 삽입·조회 효율을 극대화하는 구조적인 개선입니다.

가상 생성 컬럼 (Virtual Generated Column)

PostgreSQL 18에서는 VIRTUAL 생성 컬럼이 새롭게 추가되었습니다.
이전에는 생성 컬럼이 항상 디스크에 저장(STORED)되어 쓰기 부하가 있었지만, 이제 기본 동작이 가상(VIRTUAL)으로 변경되었어요.
즉, 컬럼 값을 바로 계산해 제공하므로 쓰기 성능과 저장 효율이 개선됩니다.
CREATE TABLE user_profiles ( user_id SERIAL PRIMARY KEY, settings JSONB, username VARCHAR(100) GENERATED ALWAYS AS (settings ->> 'username') ## PG17 이하에서는 "syntax error" );
SQL
복사
이 기능은 JSON 데이터를 자주 다루는 개발자에게 특히 유용합니다.
컬럼 데이터를 디스크에 따로 저장하지 않아 쓰기 부하가 줄고, 필요 시 즉석에서 계산된 값을 조회할 수 있습니다.

OAuth 2.0 통합 인증

PostgreSQL 18은 OAuth 2.0 인증을 기본 지원합니다.
이제 Google, Azure AD, Keycloak, Auth0 같은 외부 IdP에서 발급한 액세스 토큰으로 데이터베이스에 안전하게 접속할 수 있습니다.
PostgreSQL은 리소스 서버(Resource Server)로 동작하며, 외부 공급자가 발급한 Bearer 토큰을 검증하여
클라이언트 인증을 수행합니다.
이 기능을 통해 다음 시나리오를 구현할 수 있습니다:
기업 SSO와의 직접 연동
중앙 사용자 관리 (기존 IdP 연동)
패스워드 없는 토큰 기반 인증
Scope(read/write/admin)에 따른 권한 제어
CLI(psql)에서도 이용 가능하며, PostgreSQL 빌드 시 --with-libcurl 옵션으로 활성화할 수 있습니다.

마치며

PostgreSQL 18은 단순한 버전 업그레이드를 넘어,I/O, 인덱스, 업그레이드, 인증, 데이터 타입 전반의 구조적 혁신을 보여줍니다.
비동기 I/O → 최대 3배 빠른 읽기 성능
Skip Scan → 인덱스 활용 범위 확장
pg_upgrade 개선 → 통계 유지 + 신규 --swap 지원
UUIDv7 → 시간 기반 정렬로 효율 향상
Virtual 컬럼 → 저장공간 절감 + JSON 활용성 ↑
OAuth 2.0 → SSO / 토큰 기반 인증 지원
PostgreSQL은 한층 더 “빠르고, 안전하며, 개발자 친화적인” 데이터베이스로 진화했습니다.
앞으로 PostgreSQL이 또 어떤 변화로 발전할지 기대되지 않나요?
새로운 기능들을 직접 테스트해보고, 환경에 맞게 적용해보아요!

참고 자료

김가영 프로
오픈소스사업부 오픈소스전환그룹
오픈소스 DBMS 엔지니어로서, 삼성 그룹 계열사 및 대외 금융권 기업들의 DBMS 기술지원 업무를 수행하고 있습니다.