아키텍처 개요
PostgreSQL의 Extension 소개
PostgreSQL은 확장성이 뛰어난 오픈소스 데이터베이스로 잘 알려져 있습니다. 이러한 명성을 이루는 데에는 PostgreSQL의 기능을 유연하게 확장할 수 있는 Extension Framework가 큰 역할을 합니다. Extension을 활용한 기능 확장은 PostgreSQL의 다양한 데이터 타입 및 함수 지원을 가능하게 하며, 더 나아가 내부 기능의 개선도 가능합니다.
Extension의 중요한 특징은 PostgreSQL 인스턴스에 동적으로 로딩 된다는 것입니다. 즉, PostgreSQL에서는 Extension을 통해 새로운 기능을 추가할 때 소스를 다시 빌드하거나 실행 파일을 교체할 필요가 없습니다. 인스턴스 기동 시 초기화 작업이 필요한 Extension을 제외하면, Extension을 추가할 때 인스턴스를 다시 기동하는 일도 필요 없습니다. 이러한 점 때문에 PostgreSQL에서는 새로운 기능을 추가하는 작업이 매우 간편합니다.
O2 Extensions 소개
O2는 OpenSQL for Oracle의 약어로, Oracle 데이터 타입, 뷰, 내장 함수 및 내장 패키지를 호환해주는 Extension의 집합입니다. O2는 오픈소스 프로젝트인 Orafce를 기반으로 시작되었지만, 다양한 방면에서 많은 변화가 있었습니다. 원래 하나의 Extension으로 관리되었던 Orafce를 여러 개의 Extension으로 분리하였습니다.
O2 Extensions에는 아래 Extension이 포함되어 있습니다.
O2Types: Oracle 데이터 타입 호환 Extension
O2Views: Oracle 뷰 호환 Extension
O2Functions: Oracle 내장 함수 호환 Extension
Package Extensions: Oracle 내장 패키지 호환 Extension 모음
DBMS_ALERT
DBMS_ASSERT
DBMS_OUTPUT
DBMS_PIPE
DBMS_RANDOM
DBMS_SQL
DBMS_JOB
DBMS_RLS
UTL_FILE
원래 하나의 Extension으로 관리되었던 Orafce를 여러 개의 Extension으로 분리하여, 패치 작업의 유연성을 크게 향상 시켰습니다. 또한, 오랜 기간 동안 점진적으로 개발되면서 공통된 컨벤션이나 프레임워크의 부재가 문제였는데, 이를 통합하는 과정에서 개선시켰습니다.
O2 Extensions 장점과 개선 사항
SQL, PL/pgSQL로 작성된 사용자 정의 함수를 C 코드로 변경
O2 Extension에서 제공하는 내장 함수나 패키지는 내부적으로 사용자 정의 함수(UDF)로 구성되어 있습니다. PostgreSQL은 사용자 정의 함수를 작성할 때 SQL, PL/pgSQL뿐만 아니라 C/C++, Python, Perl, Rust 등 다양한 프로그래밍 언어를 지원합니다. O2 Extension은 특히 SQL 및 PL/pgSQL로 작성된 사용자 정의 함수를 C 코드로 변경하여 성능을 향상시켰습니다.
PostgreSQL Query 실행 엔진이 SQL이나 PL/pgSQL로 작성된 UDF를 실행할 때 내부적으로 커서를 생성하여 서브쿼리를 실행하지만, C 코드로 작성된 함수는 컴파일 된 라이브러리에서 직접 실행되므로 빠른 성능을 보장합니다. 또한, C 코드로 구현하면 PostgreSQL 라이브러리를 활용하여 더 정교하고 유연한 구현이 가능합니다.
Extension을 여러 개로 나누어 Blast Radius 감소
기존 Orafce는 하나의 Extension으로 관리되었기 때문에, 전체 구현 중 하나의 요소에 문제가 발생하면 전체 Extension을 업데이트해야 했습니다. 반면, O2는 여러 개의 Extension으로 나누어 관리함으로써, 문제가 발생한 Extension만 교체하면 됩니다. 예를 들어, DBMS_ALERT나 DBMS_PIPE와 같이 공유 메모리를 사용하는 패키지는 shared_preload_libraries에 추가하여 DB 인스턴스를 기동해야 하는데, O2의 경우 이들 Extension이 별도로 분리되어 있어 필요한 Extension만 shared_preload_libraries에 추가하면 되도록 개선했습니다. 이와 같은 개선 사항들은 O2 Extension이 PostgreSQL 사용자들에게 더 강력하고 유연한 Oracle 호환 기능을 제공할 수 있습니다. 또한, O2 Extension의 도입으로 인해 성능, 유연성, 안정성이 크게 향상되었습니다.
Last updated
