일본 서버호스팅으로 서비스를 운영할 때 백업은 가장 중요하면서도 가장 쉽게 놓치는 부분입니다. 하드웨어 장애, 랜섬웨어, 실수로 인한 파일 삭제 등 예상치 못한 상황에서 백업이 없으면 데이터를 복구할 수 없습니다. 이 글에서는 일본 서버의 체계적인 백업 전략을 안내합니다.

백업의 3-2-1 원칙

전문적인 백업 전략의 기본 원칙:

  • 3개 복사본: 원본 포함 3개의 데이터 복사본 유지
  • 2가지 저장 매체: 서로 다른 유형의 저장소에 저장
  • 1개 원격 저장: 최소 1개는 오프사이트(원격 위치)에 저장

1. 데이터베이스 백업

MySQL / MariaDB 백업

#!/bin/bash
# /usr/local/bin/backup-db.sh

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/db"
DB_NAME="myapp"
DB_USER="root"
DB_PASS="패스워드"

mkdir -p $BACKUP_DIR

# 전체 데이터베이스 백업
mysqldump -u $DB_USER -p$DB_PASS \
  --single-transaction \
  --quick \
  --lock-tables=false \
  $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz

# 30일 이상 된 백업 삭제
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

echo "DB 백업 완료: ${DB_NAME}_${DATE}.sql.gz"

PostgreSQL 백업

sudo -u postgres pg_dump myapp | gzip > /backup/db/myapp_$(date +%Y%m%d).sql.gz

2. 파일 백업 (웹 루트, 업로드 파일)

rsync를 이용한 로컬 백업

#!/bin/bash
# 웹 루트 백업
rsync -avz --delete \
  /var/www/html/ \
  /backup/www/

# 업로드 파일 백업
rsync -avz \
  /var/www/html/uploads/ \
  /backup/uploads/

증분 백업 (rsync + 날짜 디렉토리)

DATE=$(date +%Y%m%d)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

rsync -avz --delete \
  --link-dest=/backup/www/$YESTERDAY \
  /var/www/html/ \
  /backup/www/$DATE/

--link-dest 옵션으로 변경된 파일만 새로 복사하고 나머지는 하드링크로 처리해 저장 공간을 절약합니다.


3. 원격 백업 (오프사이트)

로컬 백업만으로는 서버 전체 장애나 데이터센터 문제 시 복구가 불가능합니다. 원격 위치에 추가 백업을 저장하세요.

AWS S3 또는 호환 오브젝트 스토리지 업로드

apt install awscli -y
aws configure  # AWS 자격 증명 설정

# S3에 업로드
aws s3 cp /backup/db/ s3://my-backup-bucket/db/ --recursive
aws s3 cp /backup/www/ s3://my-backup-bucket/www/ --recursive

rclone을 이용한 다양한 클라우드 업로드

rclone은 AWS S3, Google Cloud Storage, Backblaze B2 등 다양한 클라우드 스토리지를 지원합니다.

apt install rclone -y
rclone config  # 클라우드 스토리지 설정

# 백업 업로드
rclone copy /backup/db remote:my-backup/db

4. 자동 백업 스케줄 설정

crontab으로 자동화

crontab -e
# 매일 새벽 2시 DB 백업
0 2 * * * /usr/local/bin/backup-db.sh >> /var/log/backup.log 2>&1

# 매일 새벽 3시 파일 백업
0 3 * * * rsync -avz /var/www/html/ /backup/www/ >> /var/log/backup.log 2>&1

# 매일 새벽 4시 원격 백업 (S3)
0 4 * * * aws s3 sync /backup/ s3://my-backup-bucket/ >> /var/log/backup.log 2>&1

# 매주 일요일 전체 DB 덤프
0 1 * * 0 mysqldump -u root myapp | gzip > /backup/weekly/myapp_$(date +\%Y\%m\%d).sql.gz

5. 백업 복구 테스트

백업은 복구가 가능해야 의미가 있습니다. 정기적으로 복구 테스트를 실시하세요.

# DB 복구 테스트 (테스트 DB에서 수행)
gunzip -c /backup/db/myapp_20260119.sql.gz | mysql -u root test_restore

# 파일 복구 테스트
rsync -avz /backup/www/ /tmp/restore_test/

백업 용량 계획

데이터 유형 백업 주기 보관 기간
데이터베이스 매일 30일
웹 파일 매일 14일
사용자 업로드 매일 30일
주간 전체 백업 매주 3개월

마치며

일본 서버 운영에서 백업은 비용이 아니라 보험입니다. 백업 없이 운영하다가 장애가 발생하면 복구 비용이 훨씬 크게 발생합니다. 오늘 바로 백업 자동화를 설정하세요. 백업 설정이나 스토리지 구성에 대한 문의는 텔레그램 @tcp80net으로 주세요.