Kamal을 활용한 PostgreSQL 데이터베이스 백업 및 업그레이드 가이드

How to Backup and Upgrade your database with Kamal

작성자
발행일
2025년 05월 09일

핵심 요약

  • 1 Kamal의 `s3_backup` 액세서리와 Docker 이미지를 통해 PostgreSQL 데이터베이스의 자동 백업 및 복원 방법을 제공합니다.
  • 2 PostgreSQL 주요 버전 업그레이드 시, 기존 데이터 볼륨을 보존하며 새로운 버전으로 안전하게 데이터를 마이그레이션하는 절차를 상세히 설명합니다.
  • 3 Kamal을 이용한 데이터베이스 백업 및 업그레이드는 PaaS 종속성을 벗어나 인프라를 직접 제어하고 비용을 절감하는 데 기여합니다.

도입

데이터베이스 백업은 시스템 장애 시 필수적인 대비책이며, Kamal은 특정 호스팅 제공업체에 얽매이지 않는 유연한 인프라 관리를 가능하게 하여 마이그레이션을 간소화합니다. 본 문서는 `pg_dump` 명령어를 활용하여 일관된 데이터베이스 덤프를 생성하고, 이를 S3 호환 Object Storage(예: Scaleway)에 저장하는 방법을 다룹니다. 특히, `eeshugerman/postgres-backup-s3` Docker 이미지를 사용하여 백업 및 복원 과정을 자동화하는 실용적인 접근 방식을 소개합니다.

Kamal 환경에서 데이터베이스 백업 및 PostgreSQL 주요 버전 업그레이드 절차는 다음과 같습니다.

1. S3 백업 액세서리 설정

  • S3 호환 Object Storage에 버킷을 생성하고, 자격 증명을 .kamal/secrets에 추가합니다.

  • config/deploy.yml 파일에 s3_backup 액세서리를 추가하고 환경 변수를 구성합니다.
    • image: eeshugerman/postgres-backup-s3:16
    • SCHEDULE: @daily (매일 자정 자동 백업)
    • BACKUP_KEEP_DAYS: 30 (백업 보관 일수)
    • S3_REGION, S3_BUCKET, S3_PREFIX, S3_ENDPOINT: S3 연결 정보
    • POSTGRES_HOST, POSTGRES_DATABASE, POSTGRES_USER: 대상 PostgreSQL 정보
    • PGDUMP_EXTRA_OPTS: 덤프 시 추가 옵션 (예: --exclude-table-data=public.solid_cache_entries)
    • secret: POSTGRES_PASSWORD, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY
  • 설정 후 kamal accessory boot s3_backup 명령으로 액세서리를 시작합니다.

2. 수동 백업 및 복원

  • 수동 백업 실행: kamal accessory exec s3_backup "sh backup.sh"

  • 최신 백업 복원: kamal accessory exec s3_backup "sh restore.sh"

3. PostgreSQL 주요 버전 업그레이드 (예: 16에서 17)

PostgreSQL 주요 버전 업그레이드는 데이터 디렉터리 비호환성으로 인해 특별한 절차가 필요합니다.

  • 애플리케이션 중단: kamal app stop 명령으로 앱을 중단하여 마이그레이션 중 데이터 쓰기 작업을 방지합니다.

  • 최종 백업 생성: kamal accessory exec s3_backup "sh backup.sh" 명령으로 현재 데이터의 최종 백업을 수행합니다.

  • DB 액세서리 설정 변경: config/deploy.yml에서 db 액세서리의 imagepostgres:17로, directoriesdata_17:/var/lib/postgresql/data와 같이 새로운 데이터 볼륨 경로로 변경합니다. 이는 새 버전을 위한 깨끗한 데이터 볼륨을 확보합니다.

  • DB 액세서리 재시작: kamal accessories reboot db 명령으로 업데이트된 이미지와 디렉터리를 사용하도록 데이터베이스를 재시작합니다.

  • 데이터 복원: kamal accessory exec s3_backup "sh restore.sh" 명령으로 새로운 Postgres 17 인스턴스에 백업 데이터를 복원합니다.

  • 애플리케이션 재시작: kamal app boot 명령으로 애플리케이션을 다시 온라인 상태로 전환합니다.

  • 이전 데이터 삭제: /root/data에 저장된 이전 PostgreSQL 16 데이터를 삭제하여 디스크 공간을 확보할 수 있습니다.

이 과정을 통해 애플리케이션은 최신 PostgreSQL 버전에서 모든 데이터를 온전히 유지하며 실행됩니다.

결론

Kamal을 활용한 데이터베이스 백업 및 업그레이드 과정은 PaaS 환경에서의 단순한 클릭보다는 다소 복잡해 보일 수 있으나, 그 난이도 차이는 크지 않습니다. 이러한 설정은 PaaS 제공업체에 대한 종속성에서 벗어나 인프라를 완전히 제어하고 운영 비용을 절감할 수 있는 강력한 기반을 제공합니다. Kamal은 데이터베이스 마이그레이션 및 업그레이드를 위한 유연하고 효율적인 도구이며, 이는 장기적으로 인프라 관리의 자율성을 높이는 중요한 단계입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!