백업과 복원 완벽 가이드
업데이트: 2026-10-08
봇이 수집한 SQLite 데이터베이스, 로그인 세션, 주문 상태 장부는 재생성할 수 없는 자산입니다. DashCloud는 3중 백업 파이프라인으로 데이터를 보호하고, 노드 장애 시에도 다른 노드로 자동 복구합니다.
백업 종류
| 종류 | 저장 위치 | 특징 | 복원 범위 |
|---|---|---|---|
| 로컬 백업 | 노드 로컬 디스크 | 빠른 복원, 최근 7개 보관 | 같은 노드 |
| GDrive 백업 | Google Drive | 일 1회 전체 tar, 플랜 보관 기간만큼 유지 | 같은 노드 (다운로드 후 복원) |
| restic 증분 | Backblaze B2 (S3) | 증분/중복제거, 6h~1h 주기 | 모든 노드 (restore-anywhere) |
자동 백업 주기와 보관 개수는 플랜에 따라 결정됩니다.
| 플랜 | GDrive | restic | 수동(잠금) 백업 |
|---|---|---|---|
| Free | 매일 1회 | – | 최대 4개 |
| Hobby | 매일 1회 | 6시간마다 (최근 28개) | 최대 4개 |
| Pro | 매일 1회 | 1시간마다 (최근 48개) | 최대 4개 |
정지/크래시 상태도 백업됩니다
자동 백업은 RUNNING뿐 아니라 STOPPED/CRASHED 상태의 프로젝트도 대상으로 합니다. 봇이 멈춰 있어도 데이터는 사용자 자산이기 때문입니다.
백업에서 제외되는 항목
재설치로 복구 가능한 항목은 백업 크기를 줄이기 위해 제외됩니다. 복원 후에는 의존성이 자동 재설치됩니다.
| 제외 항목 | 범위 |
|---|---|
node_modules, .venv, venv, __pycache__, .git | 하위 모든 위치 |
.cache, .npm, .deps.hash, .node_modules.bak*, .node_modules.lock | 프로젝트 루트만 |
data/ 아래의 실제 데이터는 모두 포함됩니다. 단, .git은 백업에 포함되지 않으므로 Git 저장소 자체를 복원하려면 원격 저장소에서 다시 클론하세요.
수동 백업 만들기
- 대시보드 → 프로젝트 → 백업 메뉴
- [지금 백업] 클릭 → 202 응답 후 백그라운드로 실행되며, 이력에서 진행 상태를 확인
- 중요한 백업은 잠금 처리해두면 자동 정리에서 제외됩니다 (최대 4개)
CLI로 백업하고 복원하기
대시보드 대신 터미널에서도 동일한 백업을 다룰 수 있습니다. (npm dashcloud CLI)
# 백업 목록 확인
npx dashcloud backups list --project my-bot
# 지금 백업 (백그라운드 실행)
npx dashcloud backups create --project my-bot
# 특정 백업으로 복원 (list에서 확인한 백업 파일명 사용)
npx dashcloud backups restore <백업 파일명> --project my-botSQLite를 쓰는 봇이라면 백업 직전에 WAL을 정리해 두면 아카이브 크기가 줄고 일관성도 좋아집니다. 스케줄 작업으로 아래 스크립트를 돌려두는 방법이 안전합니다.
import sqlite3
# WAL 내용을 본 DB 파일로 병합 (백업 크기 감소 + 일관성 확보)
with sqlite3.connect("/app/data/bot.db") as conn:
conn.execute("PRAGMA wal_checkpoint(TRUNCATE)")
print("WAL checkpoint 완료")복원 절차
- 백업 메뉴에서 원하는 시점의 백업 선택 → [복원]
- 데몬이 복원 전에 아카이브를 검증(손상/한도)한 뒤 프로젝트 디렉터리를 교체합니다. 검증 실패 시 기존 데이터는 그대로 유지됩니다.
- 복원 직후 의존성이 자동 재설치되고, 실행 중이던 봇은 자동으로 다시 기동됩니다.
- 복원은 서버를 잠시 중지하므로 다운타임이 발생합니다.
복원은 현재 파일을 대체합니다
복원하면 프로젝트 디렉터리의 기존 파일이 백업 시점 상태로 교체됩니다. 백업 시점 이후에 작성된 파일은 사라지므로, 필요한 경우 먼저 수동 백업을 생성하세요.
노드 장애 시 자동 이관 (restore-anywhere)
Hobby/Pro 플랜은 restic 스냅샷이 있으므로, 노드 장애 시 다른 정상 노드로 프로젝트가 자동 복구됩니다.
- 노드 하트비트가 180초 이상 끊기면 해당 노드는
OFFLINE처리되고 자동 이관이 시작됩니다. - 최신 스냅샷을 다른 노드에서 직접 복원하므로 원본 노드가 살아나지 않아도 데이터가 보존됩니다.
- 최신 스냅샷이 손상/삭제된 경우 차선의 스냅샷으로 시도합니다.
- Free 플랜은 restic이 없어 자동 이관이 불가능하며, 재배포가 필요합니다.
백업 상태 점검
- 관리자는 매일 자동 검증 스크립트로 WAL-G/restic 스냅샷 신선도, B2 용량, 주간 restic 무결성/복원 검증(
restic check --read-data-subset=1%+ 단일 파일 dump)을 확인합니다. - 프로젝트 이력에서 실패한 백업은 사유(
errorMessage)와 함께 표시되며, 실패 후 30분 뒤 자동 재시도됩니다.