자동화된 MongoDB 백업 — 프로덕션 준비 가이드
I’m happy to translate the article for you, but I need the actual text you’d like translated. Could you please paste the content of the article (or the portion you want translated) here? I’ll keep the source line exactly as you provided and preserve all formatting, markdown, and technical terms.
백업이 중요한 이유 (생각보다 더 많이)
Production databases will fail — human error, cloud outages, bad deployments, or accidental deletes. The only real safety net is a reliable, automated backup system that you trust enough to restore from at 3 AM.
운영 데이터베이스는 언제든지 실패할 수 있습니다 — 인간 실수, 클라우드 장애, 잘못된 배포, 혹은 실수로 인한 삭제 등. 진정한 안전망은 신뢰할 수 있는 자동 백업 시스템이며, 새벽 3시에 복구할 수 있을 정도로 믿을 수 있어야 합니다.
In this guide we walk through a battle‑tested MongoDB backup system built using:
이 가이드에서는 다음을 활용해 구축한 검증된 MongoDB 백업 시스템을 단계별로 살펴봅니다:
mongodump/mongorestore- Node.js +
node-cron - Amazon S3
- MongoDB (as backup metadata store)
By the end you’ll understand how to safely back up MongoDB, store it in S3, clean old backups, and fully restore your database if disaster strikes.
이 과정을 마치면 MongoDB를 안전하게 백업하고, S3에 저장하며, 오래된 백업을 정리하고, 재해 발생 시 데이터베이스를 완전히 복구하는 방법을 이해하게 됩니다.
System Goals
우리는 다음과 같은 시스템을 원했습니다:
- multiple MongoDB databases를 백업
- daily, weekly, and monthly 자동 실행
- 백업을 S3에 안전하게 저장
- 모든 작업을 MongoDB에 추적
- 만료된 백업을 자동으로 삭제
- 삭제된 데이터베이스를 fully restore 가능
- 수동 단계나 위험한 우회 방법이 전혀 필요 없음
핵심 개념: MongoDB 덤프
MongoDB는 mongodump이라는 기본 백업 도구를 제공합니다.
mongodump --uri="" --archive --gzip --oplog
이것이 하는 일
--archive→ 단일 파일을 출력합니다 (보관이 용이함)--gzip→ 백업을 압축합니다--oplog→ 복제 세트에 대해 일관된 스냅샷을 보장합니다
결과: 백업당 하나의 .archive.gz 파일이 생성됩니다. 이 백업은 읽기 전용이며 원본 데이터베이스는 절대 수정되지 않습니다.
다중 데이터베이스 지원
하드코딩된 하나의 데이터베이스 대신, MongoDB 연결의 일반 리스트를 정의합니다:
const databases = [
{ name: "app-db", uri: process.env.MONGO_URI_1 },
{ name: "analytics-db", uri: process.env.MONGO_URI_2 }
];
각 항목:
- 동일한 백업 로직을 사용합니다
- 자체 백업 파일을 생성합니다
- 메타데이터를 별도로 저장합니다
이는 시스템을 일반적이고 재사용 가능하게 유지합니다.
자동화된 크론 작업
All backups run inside the Node.js app using node-cron.
| 작업 유형 | 스케줄 |
|---|---|
| Daily | 매일 |
| Weekly | 매주 일요일 |
| Monthly | 매월 1일 |
| Cleanup | 매일 |
Each cron job:
mongodump실행- 파일을 S3에 업로드
- MongoDB에 메타데이터 저장
외부 크론 서버가 필요하지 않습니다.
S3 스토리지 구조
백업은 .archive.gz 파일 형태로 S3 버킷에 업로드됩니다. 권장 폴더 구조는 다음과 같습니다:
s3://mongo-backups/
{dbName}/
daily/
weekly/
monthly/
{dbName}→ 정제된 MongoDB 데이터베이스 이름daily | weekly | monthly→ 백업 주기
생산 안전 규칙
- 데이터베이스 이름은 소문자이며 공백 없이 정리됩니다
- 파일은 덤프가 성공한 후에만 업로드됩니다
- 로컬 파일은 S3 업로드가 성공한 후에만 삭제됩니다
이 구조는 모든 프로젝트나 조직에 적용 가능하며 깔끔하게 확장됩니다.
MongoDB에서 백업 메타데이터
MongoDB는 회사나 제품과 무관한 일반적인 백업 메타데이터를 저장합니다:
{
"dbName": "app-db",
"backupType": "daily",
"storageProvider": "s3",
"storageKey": "mongo-backups/app-db/daily/backup.archive.gz",
"createdAt": ISODate(),
"expireAt": ISODate()
}
왜 이것이 중요한가
- MongoDB가 진실의 원천이 됩니다
- 모든 백업은 감사 가능합니다
- 정리 로직이 안전하고 결정적입니다
- 명시적으로 추적되지 않는 한 아무 것도 삭제되지 않습니다
만료된 백업 자동 정리
별도의 일일 cron 작업:
expireAt < now인 백업을 찾음- S3에서 파일을 삭제함
- MongoDB에서 레코드를 삭제함
백업이 MongoDB에 기록되지 않은 경우 삭제되지 않음. 이는 실수로 인한 데이터 손실 및 무제한 저장소 증가를 방지합니다.
재해 복구 (복원 절차)
MongoDB 데이터베이스가 삭제되거나 손상된 경우:
단계 1: 최신 백업 다운로드
aws s3 cp s3://mongo-backups/{dbName}/daily/latest.archive.gz .
단계 2: mongorestore를 사용하여 복원
mongorestore --gzip --archive=latest.archive.gz --drop
--drop은 기존 데이터를 삭제합니다- 데이터베이스가 아카이브에서 재구성됩니다
이 절차는 모든 MongoDB 배포에 적용됩니다.
안전 보장
- 원본 DB는 절대 수정되지 않음
- 백업은 전체이며 일관됨
- 스토리지 증가가 제어됨
- 모든 백업이 추적됨
- 복구는 언제나 가능
이것은 데모 스크립트가 아닌 프로덕션 등급입니다.
Final Thought
이 가이드는 mongodump를 사용한 일반적인, 프로덕션에 안전한 MongoDB 백업 전략을, 예약 작업, S3 스토리지, MongoDB‑추적 메타데이터, 자동 정리, 그리고 신뢰할 수 있는 복구 흐름과 함께 시연했습니다 — 어떤 프로젝트나 조직에도 적용할 수 있습니다.
Happy building 🚀