POSTGRESQL/단편

PostgreSQL 글로벌 컨트리뷰터와의 기술 인터뷰_feat. 최신 PG 17버전

(주)비트나인 2024. 6. 27. 10:00

PostgreSQL 글로벌 컨트리뷰터와의 기술 인터뷰

feat. 최신 PG 17버전

 

PostgreSQL 전문 기업 비트나인에서 특별한 시간을 준비했습니다. 비트나인 제품의 핵심 연구원과 인터뷰를 통해 PostgreSQL 이야기를 나눠보려고 합니다. 최근 릴리즈된 17 Beta 버전에 대한 전문가의 견해도 놓치지 않고 담아왔습니다.

 

그럼 지금부터 시작합니다.

 

Q. 안녕하세요, Umar Hayat 수석보님! 자기소개 부탁드립니다. 

 안녕하세요, 인터뷰에 초대해 주셔서 감사드립니다. 저는 Umar Hayat이고 파키스탄에서 왔습니다. 현재는 가족과 함께 서울에서 살면서 데이터베이스 전문기업 비트나인에서 일하고 있습니다. 

 

Q. 그동안 어떤 커리어를 쌓아 오셨는지 궁금합니다. 

 저는 컴퓨터 사이언스 학사 학위를 취득한 후, 2011년 파키스탄 이슬라마바드의 엔지니어링 CAD 회사인 벤틀리 시스템에서부터 커리어를 시작했습니다. 

 

 그 이후 2016년에는 Enterprise DB에 입사하여 클라이언트 측 Database Driver, PgPool 및 Pgbounce와 같은 미들웨어 툴 그리고 Server 툴을 다루는 다양한 팀에서 일했습니다. EDB에서 저는 인하우스 제품을 개발뿐만 아니라 커뮤니티 프로젝트에 기여하였고, 그 중에서도 PgPool Development Group의 멤버가 되었습니다

 

 경력을 쌓아오면서 저는 사이버 보안에 관심을 가지게 되었고, Information Security 석사 학위를 취득했습니다. 보안은 IT에서, 특히나 데이터베이스 분야에서 아주 중요한 요소라고 생각했기 때문입니다.

 

 EDB에서 5년간 근무한 후 2021년 비트나인에 입사하게 됐습니다. 현재는 Bitnine에서 Database Engine 개발 및 HA 가용성을 담당하는 Core Group을 리딩하는 수석보입니다.

 

 

Q. 파키스탄에서 한국까지 오는 결정이 쉽지 않았을 것 같습니다. 비트나인에서 일하게된 특별한 계기가 있으신가요?

 비트나인에 조인하게된 데는 여러 이유가 있습니다. 저의 커리어의 상당 부분은 데이터 베이스 관련 업무를 해왔고 데이터베이스 개발과 그와 관련된 툴, 에코시스템 등에 관심이 많았기 때문에 이 커리어를 지속적으로 성장시킬 수 있는 회사가 필요했습니다. 

 

 비트나인은 데이터베이스 전문기업으로서 글로벌 시장에서 존재감을 드러내고 있는 전도유망한 회사였고, 뿐만 아니라 비트나인이 오픈소스를 적극 지원하는 것에 많은 영감을 받았습니다. 전사적으로 PostgreSQL, Apache AGE 등 오픈소스 커뮤니티에 상당한 기여를 할 수 있도록 지원하고 있었습니다. 이에 동료들과 함께 성장할 수 있는 적합한 회사라는 생각이 들었고 과감하게 의사결정하게 되었습니다. 현재는 임직원을 소중하게 생각하는 조직문화에서 만족하면서 즐겁게 일하고 있습니다. 

Q. 오픈소스 커뮤니티 이야기가 흥미롭네요. PostgreSQL Contributor를 포함하여 활동하고 계신 커뮤니티 이야기를 해주시겠어요?

 저는 다양한 오픈소스 커뮤니티 활동을 즐기고 있습니다. 처음은 2018년 NpgSQL(PostgreSQL.NET Driver)에서 PostgreSQL 커뮤니티에 Contribution을 시작했고, SCRAM 인증을 위한 구현을 제공했습니다. (SCRAM: 현재 PostgreSQL 설치에서 표준 및 기본 인증 메커니즘)

 

 이후에 PgPool Development Group과 함께 일하기 시작했고 PgPooL의 여러 메이저 및 마이너 릴리스에서 기능과 버그 수정을 하는 데 Contribution 하기 시작했습니다. 요즘에도 여유 시간이 생길 때마다 되도록 많은 PG 커뮤니티 프로젝트에 기여하려고 노력합니다.

 

 PostgreSQL은 과거부터 현재까지 매우 강력한 오픈 소스 커뮤니티이며, 대부분의 프로젝트에서 항상 많은 일이 일어나고 있습니다. 이러한 훌륭한 커뮤니티에 일원으로 참여하게 되어 영광으로 생각합니다.

 

Q. 오랜 기간동안 꾸준히 커뮤니티 활동을 하신 게 대단하시네요. 그렇다면 PostgreSQL 커뮤니티의  Contributor가 되고 싶어 하시는 분들께 한마디 부탁드립니다.

 

 PostgreSQL 커뮤니티의 Contributor가 되고 싶다면, 먼저 목적을 명확히 해야 합니다. 많은 사람들이 각기 다른 이유가 있겠지만 예를들면 ‘다른 사람들을 행복하게 함으로써 내가 행복을 느끼고 싶다’는 것처럼 간단할 수도 있습니다. 혹은 조금 더 실용적인 목적과 목표를 가질 수 있는데 예를들면 가장 좋아하는 분야에서 전문성을 쌓는 다든가 좋은 사람들과 일하고 네트워킹 하는 게 될 수 있습니다. 

 

 당신의 Contribution은 작을 수 있지만 나중에 이 제품에서 해당 기능을 사용하는 사람에게 엄청난 차이를 만들어 낼 수 있다는 걸 알아야 합니다. 물론 당신의 목적과 목표에 상관 없이 당신의 전문적인 커리어는 분명히 성장하게 될 것입니다. 

 

 

 

Q. 좋은 마인드인 것 같습니다. 구체적인 Contribution 방법도 설명해주시겠어요? 

 

 시작을 위해서는 몇가지 단계를 거쳐야 합니다. 일부 기능을 구현하거나 문제를 해결하려면 PostgreSQL의 언어인 C 프로그래밍 지식이 있어야 하며 당연히 데이터베이스 개념과 SQL 언어를 알아야 합니다. 또한, 소스 코드와 컴파일 방법을 이해해야 합니다.

 

 PostgreSQL 웹사이트의 Developers 섹션에서 Mailing List 링크를 사용할 수 있습니다. 링크를 활용해 활성 토론을 볼 수 있고 그들을 구독해서 이메일을 받아볼 수 있습니다. 그럼 프로젝트에서 활성 토론이 언제 발생하는지 알 수 있습니다.

 

 활성 패치를 볼 수 있는 Commitfest 포털도 있습니다. 초보자의 경우 먼저 기존 패치를 검토해보고 다른 개발자가 패치를 검토하는 방법을 확인하는 것이 좋습니다. 환경에 익숙해지면 기존 버그를 선별하여 수정을 시도한 다음 점차 복잡한 기능 구현을 진행할 수 있습니다.

 

 철저한 검토와 여러 번의 패치 논의를 거쳐 최종 패치까지 제안 과정을 거친 후 패치를 Commit 할 준비가 완료됩니다. 소수의 Commit 담당자가 직접 검토한 후 패치를 Git repository에 Commit 할 것입니다.

 

 사실 코드는 PG 커뮤니티에서만 Contribution 할 수 있는 것은 아닙니다. 여러분의 블로그나 다른 채널을 사용해서 다른 사람들을 도와주거나 시스템의 인프라를 제공함으로써 기여할 수 있습니다. Advocacy 자체가 커뮤니티에 큰 기여를 합니다.

 

 

 

Q. 자세한 설명 감사합니다. 이번 PG 17 버전에 대해 많은 분들이 궁금해하고 계신데요, 그 이전에 그동안 PG가 발전해온 방향성에 대한 전문적인 관점을 소개해주시겠어요?

 최근에 PG 17 Beta 1 버전이 출시되어 전세계 IT 담당자들이 평가를 시작했습니다. 여러 해동안 활발하게 contribution 해주신 모든 분들께 이 자리를 빌어 감사인사 드립니다. 

 

지난 많은 릴리즈 동안, PostgreSQL은 다양한 분야에서 상당한 성능 향상을 보여줬습니다. 

 

PostgreSQL 13은 parallelized vacuuming이나 incremental sorting 같은 향상된 기능을 도입하여 인덱싱 및 쿼리 성능을 높였고, PostgreSQL 14는 parallel sequential 스캔 및 보다 효율적인 B-tree index handling 같은 기능을 통해 성능을 더욱 최적화했습니다. 그리고 PostgreSQL 15는 partitioned tables의 쿼리 성능을 향상시키는 partition pruning과 vacuum 효율성의 개선으로 이전 버전의 주 강화 기능과 비슷한 행보를 이어나갔습니다. 

 

PostgreSQL 16은 더 빠른 sorting 알고리즘과 병렬 쿼리를 위한 메모리 관리를 추가하는데 중점을 둔 기능 개선이 이뤄졌습니다. 각각의 릴리즈는 PostgreSQL이 더 크고 복잡한 workload를 처리할 수 있도록 기능이 강화 되었습니다.

 

PostgreSQL 10에서 시작된 built-in  logical replication 기능은 publish-subscribe 모델을 통해 table-level 복제를 지원합니다. 이후 출시한 PostgreSQL 16까지 다른 PostgreSQL 기능과 더욱 원활하게 통합하면서 성능, conflict의 관리, 데이터 타입 지원을 강화되고 replication 측면에서의 성능 개선이 지속적으로 이뤄졌습니다.



Postgres 14, 15에도 많은 발전이 있었지만 가장 눈에 띄는 것은 16에서 소개된 양방형 replication 지원입니다. 앞으로도 PostgreSQL은 대규모 및 고가용성 환경의 요구를 충족시킬 예정입니다. 이를 위해 보다 세분화된 제어 기능, 복잡한 복제 토폴로지 지원, 성능 최적화를 통한 논리적 복제(logical replication) 개선 등을 목표로 하고 있습니다. 이러한 발전 방향은 PostgreSQL 17과 같은 향후 버전에서 더욱 구현될 것으로 기대됩니다.



천천히 그러나 꾸준히 우리는 진정한 멀티 마스터 솔루션 구현으로 나아가고 있습니다.

 

또한, PostgreSQL은 사용성과 개발자 기능에서 상당한 발전을 이루었습니다. PostgreSQL 13에서는 JSON path 쿼리, 인덱스 생성, 파티셔닝 기능 향상을 통해 개발자가 복잡한 데이터 구조를 좀 더 쉽게 처리하고 쿼리성능을 개선할 있도록 했습니다.

 

PostgreSQL 14는 여러 개의 쿼리에 대한 대기 시간을 줄여주는 쿼리 pipelining 기능, 모니터링 및 통계 기능 강화 등으로 사용성을 더욱 향상시켰습니다. 

 

PostgreSQL 15는 MERGE 명령과 같은 SQL 호환 기능 추가, 향상된 JSON 및 SQL/JSON 지원, full-text 검색 개선으로 더 나은 검색 기능을 제공합니다.

 

PostgreSQL 16은 SQL/JSON constructors 및 향상된 logical replication 지원과 향상된 보안 기능 및 더 강력한 오류 보고 기능을 도입하여 개발자가 애플리케이션을 더 쉽게 구축, 유지 및 확장할 수 있도록 함으로써 이러한 추세를 이어갔습니다.

 

요약을 위해 몇 가지 주요 부분만 언급했지만, PostgreSQL 17까지 전체적인 그림을 보면  성능, 보안 및 사용성을 향상시키기 위한 PostgreSQL의 지속적인 노력을 엿볼 수 있습니다.

 

각 릴리즈는 이전 버전을 기반으로 최신 데이터베이스 애플리케이션의 요구를 충족하고 새로운 기능을 사용자에게 알립니다.

 

이러한 발전을 통해 세계 기업과 개발자들에게 최고의 선택이 되기 위한 PostgreSQL의 의지를 알 수 있습니다.

 

 StackOverflow와 DB-Engine의 전년도 결과에서도 볼 수 있듯이, PostgreSQL은 현재 가장 많은 개발자에게 인기 있는 오픈소스 데이터베이스 1위가 되었습니다.



Q. PostgreSQL 17에서 어떤 점이 달라졌나요?

 이번 PG 17에는 새로운 기능이 많이 추가되었으나, 핵심 기능  몇 가지만 추려 말하고자 합니다.

 

 가장 큰 개선이 된 성능부터 설명하겠습니다. 

 

성능 개선은 쿼리실행과 그 하위단계에서 가장 크게 드러납니다.

 

stream I/O 사용, 순차 스캔과 WAL 프로세스 lock의 개선, 여러 부분에서의 최적화를 통해 쿼리플래너, 옵티마이저, 실행단계의 성능을 향상시켰습니다.

 

 두번째는 Vacuum 프로세스의 개선에 관한 것입니다. 17에서는 메모리 소비, 실행 시간이 모두 개선되었는데 Vacuum 프로세스 관련 최대 메모리 설정이 기존 1GB에서 3GB로 늘었습니다. 

 

 다음은 incremental backup support입니다. 기존에는 업데이트가 많은 WAL 파일을 만들어냈기 때문에 많은 부하가 발생했습니다. 용량에 따라 다르긴 하지만, 더 많은 용량을 백업할 수 있도록 바뀌었는데, 이제는 WAL 파일을 다시 읽어들이는 시간이 10배 단축되었습니다. 

 

논리적 복제 측면에서는 물리적 standby서버에서도 논리적 복제를 할 수 있도록 pg_create subscriber utility를 도입, CREATE/ALTER SUBSCRIVISION을 이용하여 논리적 복제의 장애처리를 할 수 있게 되었습니다.

 

장애조치후 replication쪽을 새로 primary 노드로 재설정하는 번거로움이 있었기 때문에 고가용성 측면에서 이 두 기능이 많은 도움을 줄거라 생각합니다.Subscriber노드의 PK and REPLICA IDENTITY에 hash 인덱스가 지원되면서 성능도 향상되었습니다.

 

이전 PG16까지는 오직 B-tree 인덱스만 지원되었습니다. 하위 트랜잭션의 논리적 디코딩은 대용량 쿼리의 속도를 높이는데 이는 HA(고가용성)에서 많은 도움이 될 것으로 전망합니다.

 

SQL 명령어에서도 많은 개선이 이뤄졌는데, 테이블 파티션 영역에서는 테이블 구조를 변경하는 MERGE PARTITIONS, SPLIT PARTITIONS 명령어가 소개되었습니다. 명령어 형태로도 유추할 수 있듯이 여러 파티션을 병합하거나(MERGE PARTITIONS), 파티션을 여러부분 분할(SPLIT PARTITIONS)하는 명령어입니다. 하지만 현재는 약간의 제한이 있습니다. 이 명령어들은 단일 프로세스에서 작동해야 하고 부모 테이블에 ACCESS EXCLUSIVE LOCK 설정이 필요하므로, 결과적으로 부하가 많은 대형 파티션 테이블에서는 권장되지 않습니다.

 

pg_stat_*이름의 새로운 view들이 추가되고 기존의 view에도 새로운 정보가 추가됨으로써   데이터베이스 객체, 작동에 대한 모니터링도 개선되었습니다. 

어플리케이션 개발자들에게는  RETURNING 절이 지원되는 MERGE 문은 아주 중요한데, 

RETURNING 절이 추가되어 병합 작업중에도 수행된 작업된 작업에 대한 정보를 얻을 수 있게 되었습니다.

또한 개발자의 편의를 위한 여러 기능들이 도입되었는데, 이 중 SQL/JSON function의 적용범위가 크게 향상되었습니다. 이제 Postgres에서도 JSON_TABLE() 함수를 사용하여 JSON 데이터를 테이블 형식에 맞게 변환할 수 있게 되었고, subquery나 다른 SQL 작업들에서도 사용할 수 있습니다. 그리고  JSON(), JSON_SCALAR(), JSON_SERIALIZE()와 같은 json을 생성하는 함수, 그외에도 JSON_EXISTS(), JSON_QUERY(), JSON_VALUE() 와 같은 함수들이 이번 릴리즈에 포함되었습니다.

 

또한 Hash 인덱스를 복제 변경 적용에 활용할 수 있게 됨에 따라 성능이 향상되고, B-tree 인덱스를 넘어서는 유연성이 향상되며, 워크로드의 엄청난 수의 하위 트랜잭션에 대한 논리적 디코딩도 HA 시나리오에서 중요한 역할을 할 것입니다.

 

애플리케이션 개발자에게 MERGE 문과 SQL/JSON 향상은 매우 유용할 것입니다. 새로운 pg_stat_* 뷰를 추가하고 기존 뷰에 대한 정보를 추가함으로써 데이터베이스 개체 및 작업에 대한 모니터링도 향상되었습니다.

 

그 외에도 더 많은 기능 개선점들이 있지만 위의 내용들이 눈에 띄게 개선된 부분들이어서 뽑아보았습니다.



Q. 중요한 개선사항을 짚어 설명해 주셔서 감사합니다. 오늘 Umar Hayat님의 커리어 이야기 그리고 PG 17 Beta 버전에 대한 견해까지 들어볼 수 있는 좋은 시간이었습니다. 

 네, 저도 좋은 시간이었습니다. 앞으로도 PostgreSQL 관련 다양한 내용 나눌 수 있으면 좋겠습니다. 

 

 여기까지 Umar Hayat님와 함께한 인터뷰였습니다. 다음 시간에도 비트나인의 또 다른 전문 역량을 갖춘 분을 초대하여 PostgreSQL 기술 이야기를 나누는 시간을 준비 하겠습니다. 감사합니다.