PostgreSQL 18 출시! EDB가 분석한 핵심 신기능 총정리

2025월 11월 03일
EDB 코리아
최근 오픈소스 데이터베이스의 최강자, PostgreSQL의 새 버전인 PostgreSQL 18이 정식 릴리스되었습니다. 이번 버전은 특히 성능 향상과 개발자 편의성, 그리고 관리 기능 면에서 주목할 만한 대규모 업데이트를 포함하고 있습니다.
얼마 전 EDB의 김동수 엔지니어가 진행한 ‘PostgreSQL 18 신기능’ 웨비나의 핵심 내용을 바탕으로, DBA와 개발자라면 꼭 알아야 할 주요 변경 사항들을 블로그 형식으로 알기 쉽게 정리해 드립니다.
1. EDB의 기여: 커뮤니티와 함께 만든 PostgreSQL 18
PostgreSQL은 강력한 커뮤니티를 기반으로 발전하는 오픈소스 프로젝트입니다. 이번 PG 18 릴리스에서도 EDB는 코드 기여, 리뷰, 테스트 등 다방면에 걸쳐 핵심적인 역할을 수행했습니다.
웨비나에서 소개된 바와 같이, EDB의 주요 개발자들(Bruce Momjian, Peter Eisentraut 등)이 이번 릴리스의 주요 기능 개발에 직접 참여하며 PostgreSQL의 발전을 이끌었습니다. EDB가 기여한 주요 기능들은 다음과 같습니다.
- NOT ENFORCED 제약 조건
- pg_overexplain을 통한 EXPLAIN 개선
- PL/Python에서 Python Limited API 사용
- fdw_postgrs의 SCRAM pass-through 등
이는 EDB가 단순한 PostgreSQL 배포판을 넘어, 코어 커뮤니티의 일원으로서 기술 혁신에 기여하고 있음을 보여줍니다.
2. 성능 개선 사항: 더 빠르고 강력해지다
이번 PG 18에서 가장 눈에 띄는 부분은 단연 ‘성능’입니다. 특히 대용량 데이터를 다루는 시스템에서 체감할 수 있는 굵직한 기능들이 추가되었습니다.
🚀 비동기 I/O (Asynchronous I/O) 지원
기존 PostgreSQL은 데이터를 읽고 쓸 때 동기(Synchronous) I/O 방식을 사용해 디스크 작업이 완료될 때까지 대기하는 병목 현상이 있었습니다.
- 개선점: PG 18부터는 백그라운드에서
io worker라는 별도 프로세스가 I/O 작업을 미리 처리하는 **비동기 I/O(AIO)**를 지원합니다. - 핵심 설정:
io_method라는 새로운 파라미터가 생겼으며,worker(백그라운드 워커 사용) 또는 최신 리눅스 커널에서 최상의 성능을 내는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)의 고유값을 ‘건너뛰며(Skip)’ col2의 값만으로도 인덱스를 효율적으로 탐색할 수 있게 되었습니다.
- 효과: 웨비나에서 공개된 테스트 결과에 따르면, 특정 쿼리에서 1,455개의 버퍼를 읽던 작업이 단 32개의 버퍼만 읽도록 개선되었으며, 실행 시간도 12.004ms에서 0.088ms로 획기적으로 단축되었습니다.
이 외에도 병렬 GIN 인덱스 빌드(Parallel GIN index builds), EXCEPT/INTERSECT 연산 속도 향상, 옵티마이저 개선(Self-join 제거 등)을 통해 전반적인 쿼리 성능이 크게 향상되었습니다.
3. 개발자 경험 개선: 더 편리하고 유연하게
개발자들의 편의성을 높여주는 매력적인 기능들도 대거 추가되었습니다.
📄 가상 생성 컬럼 (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 인덱스에 순차적으로 삽입(Sequential Insert)되어 인덱스 성능 저하를 방지합니다. 대규모 로그 시스템, IoT 데이터, 이벤트 시스템 등 대량 삽입(Insert)이 발생하는 환경에 매우 유리합니다.
⏳ 시간 제약 조건 (Temporal Constraints)
이력 관리 테이블 등에서 매우 유용한 기능입니다.
- 기능:
(시작일, 종료일)과 같은 기간 데이터가 서로 겹치지 않도록 보장하는WITHOUT OVERLAPS제약 조건을 지원합니다. (btree_gist확장 기능 필요) - 장점: 기존에는 복잡한 애플리케이션 로직이나 트리거로 처리해야 했던 ‘기간 중복 방지’ 로직을 데이터베이스 레벨에서 간단하게 구현할 수 있게 되었습니다.
4. 관리 기능 개선: 더 안전하고 명확하게
DBA를 위한 관리 및 보안 기능도 현대화되었습니다.
🔐 OAuth 2.0 / OIDC 인증 지원
드디어 PostgreSQL에서도 최신 인증 방식을 지원합니다.
- 기능: 기존의 패스워드 방식 외에 OAuth 2.0 / OIDC 토큰 기반 인증을 지원합니다.
- 장점: 더 이상 DB에 직접 패스워드를 관리할 필요가 없습니다. IdP(ID 공급자)와의 연동을 통해 중앙 인증, MFA(다중 인증), SSO(싱글 사인온) 구현이 가능해져 보안성과 관리 편의성이 대폭 향상됩니다.
📊 향상된 EXPLAIN 유틸리티
튜닝의 필수 도구인 EXPLAIN이 더 편리해졌습니다.
- 기존 문제:
EXPLAIN (ANALYZE)실행 시 버퍼 사용량(shared hit/read)을 보려면BUFFERS옵션을 매번 추가해야 했습니다. - 개선점: PG 18부터는
EXPLAIN (ANALYZE)만 실행해도 기본적으로 버퍼 사용량이 출력됩니다. 사소하지만 DBA/개발자가 가장 자주 사용하는 기능 중 하나이기에 체감 만족도가 매우 높은 개선입니다.
🚀 마치며
PostgreSQL 18은 비동기 I/O와 인덱스 스킵 스캔이라는 강력한 무기를 통해 성능의 한계를 한 단계 끌어올렸습니다. 동시에 UUIDv7, 가상 컬럼, OAuth 인증 등 현대적인 애플리케이션 개발과 관리에 필수적인 기능들을 대거 탑재했습니다.
오픈소스 커뮤니티와 EDB 같은 핵심 기여 기업들의 노력으로 PostgreSQL은 매년 무섭게 진화하고 있습니다. 지금 바로 PostgreSQL 18의 신기능들을 탐색하고, 차세대 시스템 업그레이드를 계획해 보시는 것은 어떨까요?
본 포스팅은 EDB의 ‘PostgreSQL 18 New Features’ 웨비나 내용을 기반으로 재구성되었습니다. 전체 웨비나 영상은 EDB 코리아 유튜브 채널에서 다시 보실 수 있습니다.

