본문 바로가기

카테고리 없음

rsync로 서버 파일 안전하게 동기화하는 방법: 원격 서버 백업 실전 가이드

 

리눅스 서버를 운영하다 보면 중요한 파일을 다른 서버에 복사하거나 정기적으로 백업해야 하는 상황이 생깁니다.

단순히 cp 명령어로 파일을 복사할 수도 있지만, 서버에 저장된 파일의 양이 많아지면 매번 전체 데이터를 복사하는 방식은 시간과 디스크 공간을 많이 사용하게 됩니다.

이럴 때 유용한 명령어가 바로 rsync입니다.

rsync는 리눅스 서버에서 파일과 디렉터리를 효율적으로 동기화할 수 있는 대표적인 도구입니다. 특히 SSH와 함께 사용하면 원격 서버로 데이터를 안전하게 전송하고 백업하는 환경을 만들 수 있습니다.

이번 글에서는 rsync의 기본 사용법부터 SSH를 이용한 원격 서버 동기화, 삭제 파일 처리, 백업 디렉터리 구성, 자동화까지 실무에서 자주 사용하는 방법을 단계별로 알아보겠습니다.


1. rsync란 무엇인가?

rsync는 파일과 디렉터리를 다른 위치와 동기화하는 프로그램입니다.

가장 큰 특징은 변경된 데이터 중심으로 전송한다는 것입니다.

예를 들어 서버에 10GB의 웹사이트 데이터가 있고 그중 100MB만 변경됐다고 가정해보겠습니다.

전체 파일을 다시 복사하는 방식이라면 10GB를 전송해야 하지만, rsync는 상황에 따라 변경된 데이터만 전송하여 불필요한 데이터 이동을 줄일 수 있습니다.

그래서 다음과 같은 작업에 많이 사용됩니다.

  • 서버 파일 백업
  • 웹사이트 데이터 동기화
  • 원격 서버 백업
  • 서버 이전
  • 로그 파일 백업
  • 개발 서버와 운영 서버 간 파일 동기화
  • NAS와 리눅스 서버 간 데이터 동기화

2. rsync 기본 문법

rsync의 기본적인 사용 형식은 다음과 같습니다.

rsync [옵션] 원본 대상

예를 들어 현재 서버의 /var/www/html 디렉터리를 /backup으로 복사하려면 다음과 같이 사용할 수 있습니다.

rsync -av /var/www/html/ /backup/

여기서 가장 많이 사용하는 옵션이 -a와 -v입니다.

주요 옵션

옵션의미

-a 아카이브 모드
-v 처리 과정 표시
-z 전송 데이터 압축
-h 사람이 읽기 쉬운 단위 표시
-n 실제 실행 없이 테스트
--delete 원본에 없는 파일을 대상에서도 삭제
--progress 전송 진행 상황 표시
-e 사용할 원격 접속 방식 지정

실무에서는 다음과 같은 옵션 조합을 자주 사용합니다.

rsync -avz

3. 로컬 서버에서 파일 동기화하기

먼저 같은 서버 안에서 디렉터리를 동기화하는 방법을 살펴보겠습니다.

예를 들어 웹사이트 파일을 백업 디렉터리로 복사합니다.

sudo rsync -av /var/www/html/ /backup/website/

실행하면 원본 디렉터리의 파일이 /backup/website/로 동기화됩니다.

다시 같은 명령을 실행해도 이미 동일한 파일은 불필요하게 다시 전송하지 않는 방식으로 동작합니다.

이러한 특성 때문에 정기적인 백업 작업에 rsync가 유용합니다.


4. rsync에서 슬래시 하나가 중요한 이유

rsync를 사용할 때 초보자가 자주 실수하는 부분이 디렉터리 뒤에 붙는 /입니다.

다음 두 명령은 의미가 다릅니다.

rsync -av /var/www/html/ /backup/

그리고

rsync -av /var/www/html /backup/

첫 번째 명령은 html 디렉터리 안의 내용을 /backup/으로 동기화하는 방식입니다.

반면 두 번째 명령은 상황에 따라 html 디렉터리 자체가 대상 위치 아래에 생성될 수 있습니다.

따라서 백업 작업에서는 원하는 디렉터리 구조를 먼저 확인한 후 슬래시를 사용하는 것이 중요합니다.


5. 원격 서버로 파일 백업하기

rsync의 가장 강력한 기능 중 하나는 SSH를 이용해 다른 서버로 데이터를 전송할 수 있다는 것입니다.

예를 들어 현재 서버의 웹사이트 파일을 원격 서버 192.168.1.100으로 백업한다고 가정해보겠습니다.

rsync -avz /var/www/html/ user@192.168.1.100:/backup/website/

구조를 살펴보면 다음과 같습니다.

현재 서버
/var/www/html/
       │
       │ rsync + SSH
       ▼
원격 서버
/backup/website/

원격 서버에 접속할 사용자 계정과 서버 주소, 저장할 디렉터리를 지정하면 됩니다.


6. SSH 포트가 기본값이 아닐 때

SSH 포트를 22번이 아닌 다른 번호로 변경해서 사용하는 서버도 있습니다.

예를 들어 SSH 포트가 2222라면 다음과 같이 지정할 수 있습니다.

rsync -avz -e "ssh -p 2222" /var/www/html/ user@192.168.1.100:/backup/website/

-e 옵션을 사용하면 rsync가 어떤 방식으로 원격 서버에 접속할지 지정할 수 있습니다.


7. SSH 키를 이용하면 자동화하기 편리하다

rsync를 정기적인 원격 백업에 사용할 경우 매번 비밀번호를 직접 입력하는 방식은 자동화하기 어렵습니다.

이럴 때 SSH 공개키 인증을 활용할 수 있습니다.

현재 서버에서 SSH 키를 생성합니다.

ssh-keygen -t ed25519

그다음 공개키를 원격 서버에 등록합니다.

ssh-copy-id user@192.168.1.100

정상적으로 설정됐다면 이후에는 다음과 같이 SSH 접속을 테스트할 수 있습니다.

ssh user@192.168.1.100

키 인증이 정상적으로 작동하면 rsync 자동화 작업을 구성하기가 훨씬 편리해집니다.

단, SSH 개인키는 외부에 노출되지 않도록 권한과 보관 위치를 적절하게 관리해야 합니다.


8. 전송 진행 상황 확인하기

대용량 파일을 전송할 때는 진행 상황을 확인하는 것이 좋습니다.

다음과 같이 --progress 옵션을 사용할 수 있습니다.

rsync -avz --progress /var/www/html/ user@192.168.1.100:/backup/website/

파일별 전송 진행률과 전송 속도 등을 확인할 수 있어 대용량 데이터 백업 상태를 확인할 때 유용합니다.


9. 실제 실행 전에 테스트하는 방법

rsync는 옵션에 따라 파일을 삭제하거나 변경할 수도 있기 때문에 중요한 서버에서는 실제 실행 전에 테스트하는 습관을 들이는 것이 좋습니다.

이때 -n 옵션을 사용할 수 있습니다.

rsync -avzn /var/www/html/ /backup/website/

-n은 실제 변경 작업을 수행하지 않고 어떤 작업이 이루어질지 확인하는 데 사용하는 옵션입니다.

원격 서버를 대상으로 할 때도 사용할 수 있습니다.

rsync -avzn /var/www/html/ user@192.168.1.100:/backup/website/

특히 처음 사용하는 서버에서는 --dry-run을 활용하는 것도 좋습니다.

rsync -avz --dry-run /var/www/html/ user@192.168.1.100:/backup/website/

백업 대상과 결과를 충분히 확인한 후 실제 명령을 실행하는 것이 안전합니다.


10. --delete 옵션은 주의해서 사용하기

rsync에는 매우 강력한 --delete 옵션이 있습니다.

rsync -avz --delete /var/www/html/ user@192.168.1.100:/backup/website/

이 옵션을 사용하면 원본에는 없지만 대상에만 존재하는 파일을 삭제하여 두 디렉터리를 보다 정확하게 동일한 상태로 맞출 수 있습니다.

하지만 백업 작업에서 잘못 사용하면 대상 서버의 파일이 삭제될 수 있습니다.

따라서 처음부터 --delete를 사용하는 것보다는 먼저 테스트합니다.

rsync -avzn --delete /var/www/html/ user@192.168.1.100:/backup/website/

출력 내용을 확인한 후 실제 실행하는 것이 좋습니다.


11. 특정 파일이나 디렉터리 제외하기

백업할 때 캐시나 임시 파일처럼 굳이 복사할 필요가 없는 데이터를 제외할 수도 있습니다.

예를 들어 cache 디렉터리를 제외하려면:

rsync -avz --exclude="cache/" /var/www/html/ user@192.168.1.100:/backup/website/

특정 확장자의 파일을 제외할 수도 있습니다.

예를 들어 로그 파일을 제외하려면:

rsync -avz --exclude="*.log" /var/www/html/ user@192.168.1.100:/backup/website/

여러 개를 제외할 때는 --exclude 옵션을 여러 번 사용할 수 있습니다.


12. 원격 서버에서 현재 서버로 가져오기

rsync는 서버에서 원격 서버로 데이터를 보내는 것뿐만 아니라 반대로 가져오는 것도 가능합니다.

예를 들어 원격 서버의 백업 데이터를 현재 서버로 가져오려면:

rsync -avz user@192.168.1.100:/backup/website/ /restore/website/

이 기능은 서버 이전이나 데이터 복구 작업에서 유용하게 사용할 수 있습니다.


13. 파일 권한과 소유권도 보존하기

리눅스 서버 백업에서는 단순히 파일 내용만 복사하는 것이 아니라 권한과 소유자 정보도 중요합니다.

-a 옵션은 아카이브 모드로 동작하여 파일의 여러 속성을 보존하는 데 도움을 줍니다.

예를 들어:

rsync -av /var/www/html/ /backup/website/

웹서버 파일을 백업할 때 권한과 디렉터리 구조 등을 함께 고려할 수 있습니다.

다만 서로 다른 시스템의 사용자 ID나 그룹 ID 구성이 다르면 복원 과정에서 소유권 문제가 발생할 수 있으므로 실제 복구 환경에서도 반드시 확인해야 합니다.


14. rsync와 tar.gz의 차이점

앞서 살펴본 tar.gz와 rsync는 모두 백업에 사용할 수 있지만 목적이 조금 다릅니다.

구분rsynctar.gz

파일 동기화 매우 적합 적합하지 않음
원격 서버 전송 매우 적합 별도 전송 필요
변경된 파일 중심 전송 가능 불가능
하나의 압축 파일 생성 기본 기능 아님 가능
파일 구조 유지 가능 가능
장기 보관용 압축 백업 별도 구성 필요 적합
실시간에 가까운 동기화 적합 부적합

즉, 자주 변경되는 서버 데이터를 다른 서버와 동기화하는 작업에는 rsync, 장기간 보관할 압축 백업에는 tar.gz 방식이 유용합니다.

두 가지를 함께 사용하는 방법도 있습니다.


15. rsync 원격 백업 실전 예제

웹사이트 서버를 운영하고 있고 별도의 백업 서버가 있다고 가정해보겠습니다.

원본:

/var/www/html/

백업 서버:

192.168.1.100

백업 위치:

/backup/webserver/

다음 명령을 사용할 수 있습니다.

rsync -avz --progress /var/www/html/ user@192.168.1.100:/backup/webserver/

이렇게 하면 웹사이트 파일을 원격 백업 서버로 동기화할 수 있습니다.

백업이 정상적으로 완료됐는지 원격 서버에서 확인합니다.

ls -lah /backup/webserver/

16. Crontab으로 rsync 자동 백업하기

rsync는 Crontab과 함께 사용하면 정기적인 원격 백업을 자동화할 수 있습니다.

예를 들어 매일 새벽 3시에 백업하도록 설정한다고 가정해보겠습니다.

Crontab을 엽니다.

crontab -e

다음 내용을 추가합니다.

0 3 * * * rsync -az /var/www/html/ user@192.168.1.100:/backup/webserver/ >> /var/log/rsync_backup.log 2>&1

이제 매일 새벽 3시에 웹사이트 파일이 원격 서버로 동기화됩니다.

SSH 키 인증을 미리 구성해두면 비밀번호를 직접 입력하지 않고 자동화할 수 있습니다.


17. 백업 로그를 남기는 것이 좋은 이유

자동 백업은 실행 여부를 확인할 수 있도록 로그를 남기는 것이 좋습니다.

예를 들어:

0 3 * * * rsync -az /var/www/html/ user@192.168.1.100:/backup/webserver/ >> /var/log/rsync_backup.log 2>&1

로그를 확인하려면:

tail -f /var/log/rsync_backup.log

최근 로그를 확인하려면:

tail -n 50 /var/log/rsync_backup.log

백업에 문제가 발생했을 때 로그가 있으면 원인을 찾기가 훨씬 쉬워집니다.


18. rsync 백업에서 꼭 확인해야 할 사항

원격 서버 백업을 구성할 때는 다음 항목을 확인하는 것이 좋습니다.

① 원본 경로 확인

ls -lah /var/www/html/

백업하려는 디렉터리가 정확한지 확인합니다.

② 원격 서버 접속 확인

ssh user@192.168.1.100

SSH 접속이 정상적으로 되는지 확인합니다.

③ 백업 경로 권한 확인

원격 서버에서 백업 디렉터리에 파일을 생성할 권한이 있는지 확인합니다.

④ dry-run 테스트

rsync -avzn /var/www/html/ user@192.168.1.100:/backup/webserver/

실제 파일을 변경하기 전에 결과를 확인합니다.

⑤ 실제 복구 테스트

백업이 정상적으로 생성되는 것뿐만 아니라 필요한 데이터를 실제로 가져와 복구할 수 있는지도 확인합니다.


19. rsync 백업의 가장 중요한 원칙

서버 백업에서 가장 중요한 것은 백업 파일이 존재하는 것과 실제 복구가 가능한 것은 다르다는 점입니다.

예를 들어 매일 rsync를 실행하고 있어도 잘못된 경로를 백업하고 있다면 장애 발생 시 필요한 데이터를 복구할 수 없습니다.

따라서 정기적으로 다음 과정을 점검하는 것이 좋습니다.

원본 서버
   ↓
rsync 동기화
   ↓
원격 백업 서버
   ↓
백업 파일 확인
   ↓
샘플 데이터 복구
   ↓
정상 복구 여부 확인

중요한 서버라면 백업 성공 여부를 단순히 파일 생성 여부만으로 판단하지 말고 실제 복구 테스트까지 진행하는 것이 안전합니다.


마무리

rsync는 리눅스 서버에서 파일을 효율적으로 동기화하고 원격 서버에 백업할 때 매우 유용한 명령어입니다.

특히 SSH와 함께 사용하면 서버 간 데이터를 안전하게 전송할 수 있고, Crontab과 결합하면 정기적인 원격 백업도 자동화할 수 있습니다.

가장 기본적인 명령어는 다음과 같습니다.

rsync -av /원본경로/ /백업경로/

원격 서버로 백업할 때는:

rsync -avz /var/www/html/ user@192.168.1.100:/backup/webserver/

실제 실행 전에 테스트하려면:

rsync -avzn /var/www/html/ user@192.168.1.100:/backup/webserver/

그리고 --delete 옵션은 대상 파일을 삭제할 수 있으므로 반드시 테스트한 후 사용하는 것이 좋습니다.

서버 운영에서는 하나의 백업 방법만 사용하는 것보다 rsync를 이용한 원격 동기화 + tar.gz를 이용한 장기 보관 백업 + 별도 저장소 보관 + 정기적인 복구 테스트를 함께 구성하면 보다 안정적인 백업 체계를 만들 수 있습니다.

백업의 목적은 파일을 복사하는 것이 아니라 장애가 발생했을 때 데이터를 다시 사용할 수 있도록 만드는 것입니다.


SEO 핵심 키워드

리눅스 rsync, rsync 사용법, rsync 서버 백업, rsync 원격 백업, 리눅스 서버 백업, rsync SSH, rsync 자동 백업, Crontab rsync, 서버 파일 동기화, 리눅스 파일 동기화, 원격 서버 백업, Linux 서버 관리

 

 


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 블로그 이름