PostgreSQL에서 논리적 복제의 진화: 직접 경험담

작성자: Petr Jelinek
2025년 9월 11일

PostgreSQL은 단일 노드 데이터베이스였던 초기 시절에서 지금까지 정말 먼 길을 걸어왔습니다. PostgreSQL을 오래 다뤄보신 분들은 알겠지만, 견고한 논리적 복제(logical replication)에 이르기까지의 여정은 결코 단순하지 않았습니다. 커뮤니티의 노력, 창의적인 우회 방법, 그리고 고가용성(HA)과 유연성에 대한 끊임없는 요구가 그 길을 만들어왔습니다.

저는 londiste, pglogical, 여러 버전의 PGD (BDR), 그리고 PostgreSQL 자체에 내장된 논리적 복제 등 다양한 프로젝트에 깊이 관여해왔고, 그 변화를 직접 목격하며 기여할 수 있었습니다.


초기 시절: 트리거, 해킹, 그리고 집념

2000년대 당시 PostgreSQL의 철학은 단순했습니다. 단일 노드 경험에 집중한다는 것. 고가용성? 우선순위가 아니었습니다. 그 결과 내장된 복제 기능은 존재하지 않았습니다.

이 공백을 메우기 위해 트리거 기반 복제 시스템들이 등장했습니다.

  • Slony: 가장 초기의 시도 중 하나
  • Londiste: 제가 Skype의 skytools 모음집에서 개발을 도운 프로젝트
  • Bucardo: 위 두 가지와 유사한 아이디어를 활용해 액티브-액티브 솔루션을 시도

이 외에도 덜 알려진 솔루션들이 있었습니다. 이런 도구들은 기발했지만 본질적으로 한계가 있었습니다. 동시에 Simon Riggs의 노력을 바탕으로 warm standbyhot standby 같은 물리적 복제 방식이 힘을 얻으며, 보다 견고한 대안을 마련하는 길을 열었습니다.


논리적 디코딩과 BDR의 등장

PostgreSQL 복제를 개선하려는 Simon Riggs의 비전을 이어, PostgreSQL 9.4에서 **논리적 디코딩(logical decoding)**이라는 중대한 돌파구가 열렸습니다. 이를 통해 개발자들은 WAL 스트림에서 변경 사항을 추출할 수 있게 되었습니다. 이 기반 위에서 다음이 등장했습니다:

  • BDR 1: 초기 액티브-액티브 복제 시도
  • pglogical 1: 사용자 친화적 확장 기능으로 제공된 논리적 복제

포크, 플러그인, 그리고 내장 지원을 향한 압박

수요가 커지면서 복제 도구 생태계도 확대되었습니다.

  • BDR 2: PostgreSQL 패치가 필요한 기능을 제거·대체하는 데 집중했지만 짧게 끝났습니다. 초기 커밋 후에는 클로즈드 소스로 전환되어 지금까지 BDR/PGD는 비공개 상태로 유지되었습니다.
  • pglogical 2: pglogical 1을 기반으로 많은 기능과 UI 개선을 추가한 버전

이후 두 가지 결정적인 전환점이 있었습니다.

  1. Peter Eisentraut와 제가 약 10개월 동안 패치를 작업하여 PostgreSQL 10에 논리적 복제를 정식 기능으로 포함시켰습니다. PostgreSQL 9.4의 논리적 디코딩으로 시작된 다년간의 노력이 마침내 결실을 맺어, 사용자가 서드파티 확장 없이도 논리적 복제를 활용할 수 있게 된 것입니다.
  2. 동시에 저희는 자체 확장 기능에 큰 아키텍처 변화를 주기로 했습니다.
    • pglogical 3: 클로즈드 소스로, 플러그인 아키텍처를 채택하여 Kafka나 RabbitMQ 같은 외부 시스템과의 복제를 지원
    • BDR 3: pglogical 3 기반의 완전한 재작성. 주요 액티브-액티브 친화적 기능을 도입:
      • Raft 기반의 견고한 노드 관리
      • 안전한 글로벌 DDL
      • 시퀀스 동기화
      • CAMO 같은 일관성 모드

독립과 생태계 확장

그 후 발전은 가속화되었습니다.

  • 이후 BDR 3 버전에서는 병렬 적용(parallel apply) 같은 기능이 추가
  • BDR 4: pglogical에서 독립하여 새로운 내구성 설정 시스템인 commit scopes 도입
  • BDR 5: 내장된 위치 기반 라우팅(location aware routing) 제공, 노드 간 데이터 흐름 단순화
  • BDR 6: 내장 연결 관리자, 더 나은 Postgres 호환성, 사용 편의성을 위한 다양한 기능 추가

동시에 다양한 포크와 파생 프로젝트가 등장했습니다.

  • Postgres Pro: pglogical 1을 포크하여 액티브-액티브 복제를 개발했으나 PostgreSQL 자체에 많은 침습적 변경이 필요
  • pgEdge: pglogical 2를 포크하여 Spock이라는 이름으로 액티브-액티브 솔루션 개발
  • AWS: BDR 2 초기 커밋(클로즈드로 전환되기 전)을 포크해 pgactive를 자사 클라우드에서 출시
  • 이후 pgactive는 오픈소스로 공개되어 또 다른 선택지를 제공

내장 논리적 복제의 성숙

릴리스가 거듭되며 PostgreSQL의 네이티브 논리적 복제는 빠르게 성숙했습니다.

  • 장애 조치 후 복제 연속성 지원
  • 파티션 테이블 복제 및 재파티셔닝
  • 컬럼 및 행 필터링
  • 2단계 트랜잭션 복제 지원
  • 트랜잭션 스트리밍
  • 다양한 성능 개선
  • UI와 모니터링 기능 향상

PostgreSQL 17에 이르러서는 pglogical 2를 사실상 대체할 만큼 충분한 기능이 내장되었습니다.


맺음말

PostgreSQL에서 논리적 복제가 발전해온 과정은 무엇보다 사용자의 요구가 이끌었습니다. 수작업 트리거 기반 시스템에서부터 플러그형 액티브-액티브 환경에 이르기까지, 각 단계는 진정한 유연성과 고가용성에 한 걸음 더 다가서게 했습니다.

이는 끈기, 협업, 그리고 끊임없는 혁신의 이야기이며, 아직 끝나지 않았습니다.

메일: salesinquiry@enterprisedb.com