복원 테스트: 백업을 미리 점검하기
시험 복원을 수행하는 방법, 결과로 무엇을 기록할지, 그리고 실제 재난이 아닌 훈련에서만 드러나는 전형적인 문제들을 설명해요.
업데이트 2026년 8월 23일
복원해 본 적 없는 백업은 백업이 아니라 희망입니다. 분기에 한 번, 한 시간을 들여 복원 연습을 하면 그 희망이 검증된 사실이 됩니다.
무엇을 확인할까요
장애가 발생하기 전에 답을 알고 있어야 할 세 가지 질문이 있습니다.
- 완전성. 백업에 시작에 필요한 모든 것이 들어 있나요? 데이터, 설정, 키, 인증서, 스케줄까지요.
- 가독성. 압축 파일이 열리나요? 데이터베이스 덤프가 오류 없이 복원되나요?
- 시간. 전체 복원에 몇 시간이 걸리나요? 이 숫자는 미리 알고 있어야 하며, 압박 속에서 알아내서는 안 됩니다.
연습은 어떻게 진행할까요
가장 정직한 방법은 운영 서버가 아닌 별도 장비에서 진행하는 것입니다. VDS-1을 한 달간 신청하고, 거기에 처음부터 복원한 뒤 시간을 재 보세요.
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic snapshots
restic restore latest --target /restore
ls -la /restore
데이터베이스를 복원합니다.
docker compose up -d db
gunzip -c /restore/var/backups/db.sql.gz | docker compose exec -T db psql -U postgres app
docker compose exec -T db psql -U postgres app -c "select count(*) from users;"
애플리케이션을 실행하고 브라우저에서 여는 것이 마지막 단계입니다. 페이지가 열리기 전까지는 복원이 끝난 것이 아닙니다.
더 가벼우면서도 유용한 방법도 있습니다. 같은 장비의 별도 컨테이너에 데이터베이스만 복원하고, 데이터가 존재하며 최신인지 확인하는 것입니다.
압축 해제가 성공했는지만이 아니라 데이터의 날짜도 확인하세요. 안정적으로 생성되지만 한 달 전부터 필요한 디렉터리를 포함하지 않게 된 백업은 스냅샷 목록에서 지극히 정상으로 보입니다. 테이블의 레코드 수와 최신 파일의 타임스탬프를 비교하세요.
보통 드러나는 것들
.env파일을 잊는 경우. 데이터는 있지만 그 데이터에 접근할 비밀번호가 없습니다.- 인증서를 잊는 경우. 사이트는 뜨지만 HTTPS로 응답하지 않습니다.
- 스케줄을 잊는 경우. 모든 것이 작동하지만 백업이 더 이상 생성되지 않으며, 한 달 뒤에야 알게 됩니다.
- 시작 순서를 적어 두지 않은 경우. 애플리케이션이 데이터베이스보다 먼저 시작해 충돌합니다.
- 저장소 비밀번호가 분실한 장비에만 있던 경우. 백업은 존재하지만 접근할 수 없습니다.
- 복원에 두 시간이 아니라 열 시간이 걸리는 경우. 수신 대역폭이나 디스크 선반 문제입니다. 디스크 속도를 참고하세요.
순서를 적어 두세요
연습을 바탕으로 짧은 지침을 작성해 장비 밖에 보관하세요.
- 같거나 더 높은 등급의 장비를 주문합니다. 프로비저닝은 약 1분 걸립니다.
- Docker를 설치하고 백업에서
/opt/myapp을 복원합니다. - 데이터베이스 덤프를 복원하고 레코드 수를 확인합니다.
/etc/nginx와 인증서를 복원하고 웹 서버를 실행합니다.- 도메인을 새 주소로 연결합니다.
crontab.txt에서 스케줄을 복원합니다.- 확인합니다. 사이트가 열리고, 로그인이 작동하고, 백업이 다시 생성됩니다.
5번 항목이 가장 과소평가됩니다. DNS 레코드는 즉시 갱신되지 않으므로, 이전을 염두에 둔다면 미리 레코드 TTL을 300초로 낮춰 두세요.
얼마나 자주
운영 서비스는 분기에 한 번, 나머지는 6개월에 한 번입니다. 그리고 항상 큰 변경이 있은 직후에도 하세요. 새 데이터베이스, 새 서비스, 디렉터리 이동 등이요. 연습을 캘린더에 넣어 두세요. 그러지 않으면 절대 하지 않게 됩니다.
백업에 무엇이 들어가야 하는지는 무엇을 백업할까요에서, 어디에 보관할지는 오프사이트 백업에서 확인하세요. 이미 장애가 발생했다면 데이터 손실을 참고하세요.