PostgreSQL 업그레이드

Mattermost v11.11번역일: 2026-09-02원본 보기

Mattermost는 메이저 버전당 5년간 지원을 제공하는 PostgreSQL 커뮤니티 버전 관리 정책을 따릅니다. PostgreSQL 버전이 수명 종료(end-of-life)에 도달하면 Mattermost는 이후 릴리스에서 해당 버전에 대한 지원을 중단합니다. 현재 지원되는 PostgreSQL 버전은 소프트웨어 및 하드웨어 요구 사항 문서를 참고하세요.

PostgreSQL을 업그레이드할 때는 공식 PostgreSQL 업그레이드 문서에서 종합적인 안내를 확인하세요. 이 페이지에서는 Mattermost 배포에 특화된 단계를 다룹니다.

시작하기 전에

  1. 데이터베이스를 백업하세요. 업그레이드 전에는 항상 데이터베이스 전체 백업을 수행합니다. 백업 및 재해 복구 문서를 참고하세요.
  2. 지원 버전을 확인하세요. 대상 PostgreSQL 버전이 사용 중인 Mattermost 릴리스에서 지원되는지 확인합니다. 소프트웨어 및 하드웨어 요구 사항을 참고하세요.
  3. Mattermost를 중지하세요. 작업 중 데이터가 기록되지 않도록 데이터베이스 업그레이드를 시작하기 전에 Mattermost 서버를 종료합니다.

베어메탈 PostgreSQL 서버 업그레이드

베어메탈이나 가상 머신에서 PostgreSQL을 업그레이드하는 방식은 크게 두 가지입니다.

  • pg_upgrade(인플레이스): 더 빠르며, 전체 덤프/복원 과정 없이 데이터 디렉터리를 업그레이드합니다. 대용량 데이터베이스에 권장됩니다.
  • pg_dump / pg_restore(논리적): 더 단순하고 안전하며, 서로 다른 머신으로 마이그레이션하거나 인플레이스 업그레이드가 불가능한 경우에 적합합니다.

pg_upgrade 사용

pg_upgrade를 사용하면 전체 내보내기 없이 PostgreSQL 메이저 버전 간 업그레이드를 수행할 수 있습니다. 이전 버전과 새 버전의 PostgreSQL이 모두 나란히 설치되어 있어야 합니다.

  1. 패키지 관리자를 사용해 기존 버전과 함께 새 PostgreSQL 버전을 설치합니다.

  2. 기존 PostgreSQL 서비스를 중지합니다.

    sudo systemctl stop postgresql
  3. postgres 사용자로 pg_upgrade를 실행하면서 두 버전의 바이너리 디렉터리와 데이터 디렉터리를 지정합니다. <old_version>과 <new_version>을 해당 버전 번호(예: 15와 16)로 바꾸세요.

    sudo -u postgres /usr/lib/postgresql/<new_version>/bin/pg_upgrade \
      --old-datadir /var/lib/postgresql/<old_version>/main \
      --new-datadir /var/lib/postgresql/<new_version>/main \
      --old-bindir /usr/lib/postgresql/<old_version>/bin \
      --new-bindir /usr/lib/postgresql/<new_version>/bin
  4. 새 PostgreSQL 버전이 기본으로 시작되도록 시스템을 갱신한 뒤 서비스를 시작합니다.

    sudo systemctl start postgresql

pg_upgrade의 전체 레퍼런스는 공식 pg_upgrade 문서를 참고하세요.

pg_dump와 pg_restore 사용

이 방식은 데이터베이스 전체를 내보내고, 새 PostgreSQL 버전을 설치한 뒤 데이터를 복원합니다. 더 단순하지만 데이터베이스 크기에 비례하는 중단 시간이 필요합니다.

  1. Mattermost 데이터베이스를 내보냅니다(mattermost는 데이터베이스 이름으로, mmuser는 데이터베이스 사용자로 바꾸세요).

    pg_dump -U mmuser -Fc mattermost > mattermost_backup.dump
  2. 새 PostgreSQL 버전을 설치하고 데이터베이스 사용자와 데이터베이스를 생성합니다.

    sudo -u postgres psql -c "CREATE USER mmuser WITH PASSWORD 'your_password';"
    sudo -u postgres psql -c "CREATE DATABASE mattermost OWNER mmuser;"
  3. 새 PostgreSQL 인스턴스로 데이터베이스를 복원합니다.

    pg_restore -U mmuser -d mattermost mattermost_backup.dump

Docker에서 PostgreSQL 업그레이드

참고

아래 단계는 공식 Mattermost Docker 배포를 기준으로 작성되었습니다. 사용자 정의 Docker 구성을 사용하고 있다면 컨테이너 이름과 볼륨 이름을 그에 맞게 조정하세요.

Docker에서 PostgreSQL을 실행하는 경우에는 pg_dump/pg_restore 방식의 업그레이드를 권장합니다. 인플레이스 pg_upgrade는 같은 컨테이너 안에 이전 바이너리와 새 바이너리가 모두 있어야 하므로 컨테이너 환경에서는 복잡합니다.

  1. Mattermost 컨테이너를 중지합니다.

    docker stop mattermost
  2. 실행 중인 PostgreSQL 컨테이너에서 데이터베이스를 덤프합니다(mattermost, mmuser, db를 각각 데이터베이스 이름, 사용자, 컨테이너 이름으로 바꾸세요).

    docker exec postgres pg_dump -U mmuser -Fc mattermost > mattermost_backup.dump
  3. 기존 PostgreSQL 컨테이너를 중지합니다.

    docker stop postgres
  4. .env 파일의 POSTGRES_IMAGE_TAG를 새 버전으로 갱신합니다. 예를 들면 다음과 같습니다.

    POSTGRES_IMAGE_TAG=16-alpine
  5. .env의 새 이미지 태그가 적용되도록 PostgreSQL 컨테이너를 다시 생성합니다.

    docker compose up -d --force-recreate postgres
    참고

    볼륨에 이전 메이저 버전의 데이터가 이미 들어 있다면 PostgreSQL이 시작을 거부합니다. 이 경우 새 컨테이너용으로 새 명명된 볼륨을 만든 뒤, 다음 단계에서 덤프로부터 복원하세요.

  6. 새 컨테이너에서 데이터베이스 사용자와 데이터베이스를 다시 생성한 뒤 복원합니다.

    docker exec -i postgres psql -U postgres -c "CREATE USER mmuser WITH PASSWORD 'your_password';"
    docker exec -i postgres psql -U postgres -c "CREATE DATABASE mattermost OWNER mmuser;"
    docker exec -i postgres pg_restore -U mmuser -d mattermost < mattermost_backup.dump

업그레이드 후

PostgreSQL을 업그레이드한 뒤에는 Mattermost 데이터베이스에서 ANALYZE VERBOSE를 실행하세요. 이 작업은 PostgreSQL이 최적의 쿼리 계획을 생성하는 데 사용하는 pg_statistic 테이블을 다시 채웁니다. 이 단계를 건너뛰면 데이터베이스 성능이 저하될 수 있습니다.

sudo -u postgres psql -d mattermost -c "ANALYZE VERBOSE;"

완료되면 Mattermost를 다시 시작합니다.

sudo systemctl start mattermost