서버 백업 방법, 3-2-1 원칙과 파일 DB 자동 백업

핵심 요약
  • 백업은 같은 서버 안에만 두지 말고 다른 장소에 한 벌 이상 따로 보관한다.
  • 파일은 rsync, 데이터베이스는 mysqldump로 받아 cron으로 자동화한다.
  • 복구해 보지 않은 백업은 믿을 수 없으므로 정기적으로 복구 테스트를 한다.

서버는 언젠가 고장 나거나, 실수로 파일이 지워지거나, 해킹으로 망가질 수 있습니다. 이때 서버를 원래대로 되돌릴 수 있는 마지막 수단이 백업입니다. 보안 설정을 아무리 잘해도 백업이 없으면 한 번의 사고가 곧 사이트의 끝이 됩니다.

백업은 “만들었다”에서 끝나지 않습니다. 어디에 두는지, 자동으로 도는지, 실제로 복구되는지까지 확인해야 백업입니다. 이 글은 파일과 DB를 나눠서 받는 기본 방법과 확인 순서를 정리합니다.

무엇을 백업할까

사이트를 다시 세우는 데 필요한 것을 기준으로 나눕니다.

대상예방법
웹 파일문서 루트, 업로드 폴더, 워드프레스 wp-contentrsync, tar
데이터베이스MySQL, MariaDBmysqldump
서버 설정/etc/apache2, /etc/nginx, php.ini, cron 목록파일 복사
인증서와 키Let’s Encrypt 설정, 별도 구매 인증서안전한 곳에 암호화 보관

워드프레스라면 wp-config.php와 wp-content 폴더, DB 세 가지가 핵심입니다. 코어 파일은 다시 내려받을 수 있지만 업로드 이미지와 DB는 다시 만들 수 없습니다. 반대로 임시 캐시 폴더는 백업에서 빼 용량을 줄일 수 있습니다.

3-2-1 원칙

백업 업계에서 흔히 쓰는 기준으로, 데이터 사본 3개를 2종류의 저장 매체에 두고 그중 1개는 다른 장소에 보관하자는 원칙입니다. 이 숫자 자체를 설명한 문서는 이 글을 쓰며 확인하지 못했지만, 같은 취지의 설명은 확인했습니다. Ubuntu 서버 문서는 중요한 백업을 재해에 대비해 다른 장소에 보관하는 것이 좋다고 하고, CISA의 랜섬웨어 안내서는 오프라인으로 암호화한 백업을 유지하라고 합니다. 또 많은 랜섬웨어가 접근 가능한 백업을 찾아 지우거나 암호화한다고 경고합니다.

  • 서버 디스크에 만든 백업 파일 하나로는 서버가 망가질 때 같이 사라집니다.
  • 다른 서버나 오브젝트 저장소에 보낸 사본을 두면 서버 장애와 해킹에서 모두 살아남습니다.
  • 서버에서 백업 저장소를 항상 쓰기 가능 상태로 연결해 두면 침해 시 함께 지워질 수 있으니, 접근 권한을 최소로 줍니다.

내 사이트의 HTTPS·인증서·보안 헤더를 바로 확인할 수 있습니다.

무료 보안 검사 시작

파일 백업 rsync

rsync는 변경된 파일만 복사하는 도구입니다. 매뉴얼 기준으로 -a는 하위 폴더 포함 복사하면서 권한·시간 등 대부분의 속성을 유지하는 옵션입니다. 단 ACL, xattr, 하드링크는 포함하지 않습니다.

# 먼저 -n으로 시험 실행(실제 복사 없음)
rsync -avn /var/www/html/ /backup/html/

# 문제 없으면 -n을 빼고 실행
rsync -av /var/www/html/ /backup/html/

# 다른 서버로 SSH 전송
rsync -av -e ssh /var/www/html/ backupuser@백업서버:/backup/html/

원본 경로 끝의 슬래시에 따라 결과가 달라집니다. 슬래시가 없으면 폴더 이름까지 대상 안에 생기고, 있으면 폴더 내용만 들어갑니다. --delete는 원본에 없는 파일을 대상에서도 지우므로 처음에는 쓰지 않거나 반드시 -n으로 먼저 확인합니다. 원본에서 실수로 지운 파일이 백업에서도 사라지기 때문입니다.

DB 백업 mysqldump

MySQL 문서의 기본 형식은 mysqldump [options] db_name이며 DB 전체를 받을 때는 --databases를 씁니다.

mysqldump -u 사용자 -p --single-transaction --databases 데이터베이스명 > db_backup.sql

--single-transaction은 InnoDB 테이블을 한 시점의 일관된 상태로 받는 옵션으로 쓰는데, MyISAM 테이블은 이 방식으로 일관성이 보장되지 않습니다. 사용 중인 저장 엔진을 확인하고, 이 옵션의 정확한 동작은 사용 중인 MySQL·MariaDB 버전 문서에서 확인하세요. 복구는 일반적으로 mysql -u 사용자 -p < db_backup.sql로 하는데, 덤프를 다시 올리려면 그 안의 문장을 실행할 권한이 필요하다고 문서에 나옵니다.

비밀번호를 명령줄에 직접 적으면 기록에 남으니, 옵션 파일(권한 600)을 쓰는 방법을 알아 두면 좋습니다. 이 부분은 이 글에서 문서를 확인하지 않아 상세 설정은 적지 않았습니다.

자동화 cron

손으로 하는 백업은 어느 날 빠집니다. 스크립트를 만들어 cron(정해진 시간에 자동 실행하는 기능)에 등록합니다.

#!/bin/bash
# /usr/local/bin/backup.sh
set -e
DATE=$(date +%F)
mysqldump --defaults-extra-file=/root/.my.cnf --single-transaction --databases mydb | gzip > /backup/db_$DATE.sql.gz
rsync -a /var/www/html/ /backup/html/
find /backup -name 'db_*.sql.gz' -mtime +14 -delete
sudo crontab -e
# 매일 새벽 3시 실행
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

마지막 줄의 find ... -delete는 14일 지난 DB 덤프를 지우는 정리 단계입니다. 경로를 잘못 적으면 엉뚱한 파일이 지워지니 처음에는 -delete 대신 -print로 대상 목록을 보고 시작합니다. 스크립트 실행 결과를 로그에서 매주 확인해야 조용히 실패하는 일을 막을 수 있습니다.

복구 테스트가 진짜 백업이다

CISA 안내서는 백업의 가용성과 무결성을 정기적으로 시험하라고 권합니다. 최소한 다음을 해 봅니다.

  1. 백업 파일의 크기와 날짜가 정상인지 봅니다. 0바이트나 갑자기 줄어든 파일이 신호입니다.
  2. 테스트용 서버나 로컬 환경에 파일과 DB를 복구해 사이트가 열리는지 확인합니다.
  3. 복구에 걸린 시간과 순서를 기록해 둡니다. 사고 때 이 문서가 큰 도움이 됩니다.

해킹 뒤 복구라면 어느 시점 백업을 쓸지가 중요합니다. 워드프레스 해킹 복구 글에서 순서를 이어서 봅니다. 업데이트 전에는 수동 백업을 하나 더 만들어 두세요(워드프레스 안전 업데이트 글). 전체 점검표는 리눅스 서버 보안 체크리스트에 있습니다.

클라우드 스냅샷, restic·borg 같은 백업 도구는 이 글에서 직접 문서를 확인하지 못해 다루지 않았습니다.

웹사이트 기본 보안 검사HTTPS·리디렉션·인증서·보안 헤더·서버 정보 노출 10개 항목을 무료로 확인할 수 있습니다.

무료 보안 검사 시작

자주 묻는 질문

호스팅 업체가 백업해 주면 따로 안 해도 되나요?

업체 백업의 보관 기간과 복구 방법은 서비스마다 다릅니다. 계약 내용을 확인하고, 중요한 사이트라면 내가 직접 받은 사본을 하나 더 두는 편이 안전합니다.

백업은 얼마나 자주 해야 하나요?

하루에 잃어도 괜찮은 작업량이 기준입니다. 글이나 주문이 매일 생기는 사이트는 DB를 하루 한 번 이상, 거의 안 바뀌는 사이트는 주 단위로도 충분할 수 있습니다. 변경 전에는 수동 백업을 따로 만들어 둡니다.

백업 파일은 암호화해야 하나요?

DB 덤프에는 회원 정보와 비밀번호 해시가 들어 있을 수 있습니다. 외부 저장소로 보낼 때는 접근 권한을 제한하고 암호화해서 보관하는 것이 안전합니다.

해킹당한 서버의 백업을 그대로 복구해도 되나요?

감염 시점 이후의 백업은 악성 파일이 같이 들어 있을 수 있습니다. 감염 전 시점 백업을 고르고 복구 후 비밀번호를 모두 교체해야 합니다. 순서는 워드프레스 해킹 복구 글에서 다룹니다.

확인한 자료

기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.

Next
워드프레스 보안

워드프레스 해킹 복구 순서, 격리부터 재발 방지까지

워드프레스가 해킹당했을 때 복구하는 순서를 정리했습니다. 격리와 백업, 비밀번호·보안 키 교체, 코어와 플러그인 재설치, 재발 방지 설정까지 단계별로 설명합니다.

가이드 보기 →
워드프레스 보안

워드프레스 업데이트 안전하게, 백업과 자동 업데이트 설정

워드프레스 업데이트를 안전하게 하는 순서를 정리했습니다. 백업과 복원 확인, 스테이징 점검, 자동 업데이트 설정 방법, 업데이트 후 오류가 났을 때 대처법을 설명합니다.

가이드 보기 →
서버 보안

리눅스 서버 보안 점검 체크리스트, 7단계 순서대로 확인

리눅스 서버 보안을 업데이트, 계정, SSH, 방화벽, 서비스, 로그, 백업 7단계로 나눠 점검하는 체크리스트입니다. 확인 명령과 개별 설정 글 링크를 함께 담았습니다.

가이드 보기 →
서버 보안

서버 방화벽 설정 ufw, 잠김 방지 순서와 보안그룹 관계

ufw로 서버 방화벽을 켜기 전에 SSH 허용부터 하는 순서, 규칙 확인과 삭제 명령, AWS 보안그룹과 서버 방화벽이 함께 동작하는 방식을 정리했습니다.

가이드 보기 →
서버 보안

서버 버전 정보 숨기기, Apache Nginx PHP

Apache ServerTokens·ServerSignature, Nginx server_tokens, PHP expose_php 설정으로 응답 헤더의 버전 노출을 줄이는 방법과 적용 후 curl 확인법, 이 설정의 한계를 정리했습니다.

가이드 보기 →