PostgreSQL Buildfarm: pg_upgrade 버전 간 호환성 검증의 비밀

Andrew Dunstan

December 12, 2025

PostgreSQL을 운영하는 실무자나 전문가들조차 자주 묻는 질문이 있습니다. “과연 커뮤니티는 9.5 버전에서 18 버전으로의 업그레이드 테스트를 어떻게 수행하는가?”입니다.

문서화가 잘 되어 있지 않은 이 부분에 대해, EDB의 Andrew DunstanPostgreSQL Buildfarm의 내부 작동 원리를 직접 설명했습니다. 오픈소스 데이터베이스가 엔터프라이즈 환경에서도 견고한 안정성을 유지하는 비결, 바로 그 자동화된 검증 프로세스를 공개합니다.

PostgreSQL Buildfarm의 핵심: TestUpgradeXversion

PostgreSQL의 품질을 책임지는 Buildfarm 클라이언트 스크립트는 기본적으로 run_build.pl입니다. 이 스크립트는 단일 브랜치(예: REL_17_STABLE)를 빌드하고 테스트합니다. 보통 빌드가 끝나면 산출물(Artifacts)은 삭제됩니다.

하지만 TestUpgradeXversion이라는 특수 모듈을 활성화하면 이야기가 달라집니다. 이 모듈은 표준 설치 검사(installcheck)가 끝난 후 다음과 같은 정교한 작업을 수행합니다.

1. 빌드 산출물의 영구 저장 (Snapshot)

테스트가 끝난 현재 버전의 바이너리(bin, lib, include, share)와 데이터 디렉터리를 저장합니다. 이때 중요한 점은, 저장된 인스턴스가 현재의 빌드 경로나 설치 경로에 의존하지 않도록 라이브러리 경로 등을 조정(Relocation)한다는 것입니다. 이렇게 저장된 데이터는 추후 업그레이드 테스트의 ‘소스(Source)’로 활용됩니다.

2. 과거 버전과의 매칭 로직

모듈은 저장된 버전 목록을 스캔합니다. 만약 현재 빌드 중인 버전이 ‘Release 15’라면, 저장된 버전 중 15 버전과 같거나 오래된 모든 버전을 테스트 대상으로 선택합니다. 즉, 매번 구버전을 새로 빌드하는 것이 아니라, 과거에 빌드되어 저장된 산출물을 재사용합니다.

  • 참고: 이 방식 덕분에 소스 코드 컴파일이 까다로운 아주 오래된 버전(예: 9.2)도 매번 다시 빌드할 필요 없이 업그레이드 테스트를 수행할 수 있습니다.

상세 업그레이드 검증 프로세스 (Step-by-Step)

선택된 구버전(Source) 데이터를 현재 버전(Target)으로 업그레이드하는 과정은 다음과 같이 엄격하게 진행됩니다.

  1. 환경 조정: 구버전 데이터 디렉터리의 복사본을 생성하고, 업그레이드 수행을 위한 설정(Config)을 조정합니다.
  2. 버전 간 차이 보정 (AdjustUpgrade.pm): 소스와 타겟 버전이 다를 경우, PostgreSQL 소스 코드 내의 Perl 모듈을 통해 필요한 조정 작업을 수행합니다. 이 로직은 커미터들에 의해 관리되므로 Buildfarm 클라이언트를 수정할 필요가 없습니다.
  3. 데이터 덤프 및 클러스터 생성: 구버전에서 pg_dumpall을 수행한 뒤 인스턴스를 중지합니다. 이후 신규 버전용 클러스터를 생성합니다.
  4. pg_upgrade 실행: 구버전 데이터를 신규 클러스터로 마이그레이션합니다.
  5. 사후 검증:
    • 해시 인덱스(Hash Index) 재구성이 필요한 경우 수행합니다.
    • pg_amcheck를 통해 데이터 무결성을 검사합니다.
    • 모든 확장(Extension) 기능이 정상적으로 업데이트되는지 확인합니다.
  6. 덤프 비교 (Diff): 업그레이드된 신규 클러스터에서 다시 덤프를 뜹니다. 그리고 구버전 덤프와 신규 버전 덤프를 비교하여 바이트 단위의 정합성을 확인합니다.

왜 모든 Buildfarm에서 실행하지 않는가?

이토록 완벽해 보이는 테스트를 기본값(Default)으로 설정하지 않는 이유는 명확합니다. 바로 리소스 비용 때문입니다.

  • 시간: 빠른 인스턴스에서는 20분 정도 소요되지만, 느린 환경에서는 1시간 이상 걸립니다.
  • 디스크 공간: 이 모듈을 지원하기 위해 Buildfarm 머신(예: animal ‘crake’)은 약 17GB의 유휴 공간과 처리 중 추가 공간을 필요로 합니다.

결론: 신뢰는 검증에서 나옵니다

PostgreSQL이 엔터프라이즈 레벨에서 신뢰받는 이유는 기능의 화려함 때문이 아니라, 보이지 않는 곳에서 수행되는 이러한 치열한 검증 과정 때문입니다. 9.2 버전부터 최신 버전까지 아우르는 호환성 테스트는 여러분이 수행하는 pg_upgrade 명령어가 안전하다는 것을 보증합니다.

[Next Step] PostgreSQL 버전 업그레이드나 마이그레이션 전략 수립에 어려움을 겪고 계신가요? EDB의 검증된 도구와 전문가 지원을 통해 리스크 없는 현대화를 시작해 보십시오.

메일: salesinquiry@enterprisedb.com

Visited 5 times, 1 visit(s) today