Skip to content
VDS · 백업 및 디스크

Restic: 암호화와 이력을 갖춘 백업

종단간 암호화, 중복 제거, 날짜 기반 스냅샷으로 백업을 설정하고 자동화하며 무결성을 검증하는 방법을 알아봐요.

업데이트 2026년 8월 23일

Restic는 rsync가 하지 못하는 일을 해결해요. 데이터를 보내기 전에 암호화하고, 스냅샷 기록을 유지하며, 같은 청크를 두 번 복사하지 않고, S3 호환 스토리지에 백업을 저장할 수 있어요. 의존성 없는 프로그램 하나예요.

설치와 첫 저장소

sudo apt install -y restic
restic version

저장소는 백업이 저장되는 곳이에요. 디렉터리일 수도 있고, SFTP를 통한 원격 머신일 수도 있고, 오브젝트 스토리지일 수도 있어요:

export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

head -c 32 /dev/urandom | base64 > /root/.restic-pass
chmod 600 /root/.restic-pass
restic init

저장소 비밀번호는 복구할 수 없어요. 잊어버리면 데이터도 사라져요. 설계상 여기에는 지원 방법이 없어요. 머신과 별도로 보관하세요. 비밀번호 관리자에, 종이에, 어디든 좋지만, 백업 대상 머신의 /root/.restic-pass 파일에만 두면 안 돼요.

백업 만들기

restic backup /var/www /etc/nginx /opt/myapp \
  --exclude-file=/root/restic-exclude.txt \
  --tag daily
restic snapshots
restic ls latest
restic stats

두 번째 실행부터는 빨라요. 새로운 데이터 청크만 전송되거든요.

복원

restic restore latest --target /restore
restic restore <snapshot-id> --target /restore --include /var/www/uploads

전부 풀어보지 않고 내용만 확인하는 게 훨씬 편해요:

mkdir /mnt/snapshots
restic mount /mnt/snapshots

이 디렉터리에는 모든 스냅샷이 날짜별 일반 폴더로 보여요. 실수로 삭제한 파일 하나만 꺼낼 때 가장 좋은 방법이에요.

예약과 정리

/usr/local/bin/backup.sh 스크립트:

#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

docker compose -f /opt/myapp/compose.yaml exec -T db \
  pg_dump -U postgres app | gzip > /var/backups/db.sql.gz

restic backup /var/www /etc/nginx /opt/myapp /var/backups --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
chmod 700 /usr/local/bin/backup.sh

다음은 systemd 타이머예요. 예약 작업을 참고하세요. forget --prune은 여분의 스냅샷을 제거하고 공간을 확보해요. --prune 없이 실행하면 스냅샷이 목록에서 사라질 뿐 데이터는 남아 있어요.

무결성 검사

restic check
restic check --read-data-subset=5%

첫 번째 명령은 구조를 검사하고, 두 번째는 데이터 일부를 읽어 체크섬을 검증해요. 두 번째는 한 달에 한 번 실행하세요. 디스크와 대역폭을 많이 쓰지만, 조용한 손상을 잡아내는 건 이 명령이에요.

구조 검사는 실제 복원을 대신하지 못해요. 복원 훈련을 참고하세요.

리소스

Restic는 인덱스를 메모리에 유지해요. 큰 데이터셋에서는 수백 메가바이트에 달해요. RAM이 2 GB인 VDS-1에서 수십 기가바이트를 백업하면 부족할 수 있어요. 병렬 처리를 제한하거나 무거운 백업을 한 단계 위로 옮기세요. 디스크 부하도 눈에 띄니 밤 시간대로 예약하세요. 디스크 속도를 참고하세요.

흔한 실수

  • 비밀번호를 백업 대상 머신에만 보관하는 경우. 전형적인 사례예요. 머신을 잃으면 백업의 열쇠도 함께 잃어요.
  • --prune 없이 forget만 실행하는 경우. 공간이 확보되지 않고 저장소는 계속 커져요.
  • 같은 디스크의 같은 디렉터리에 백업하는 경우. 복원할 곳이 없어요. 다른 위치의 백업을 참고하세요.
  • 캐시와 /var/lib/docker를 제외하지 않는 경우. 아무 이득 없이 백업이 네 배로 불어나요. 포함할 목록은 무엇을 백업할까 문서에 있어요.
  • 병렬 실행. 두 번째 실행은 저장소 잠금에 걸려요. 호출을 flock으로 감싸세요.