--- title: rsync — 증분 동기화와 백업 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: 변경된 부분만 전송하는 동기화 도구. 서버 간 백업과 배포에서 가장 많이 쓰입니다. tags: 프로그램, 파일 및 디스크 관리, rsync --- **💬 "rsync 명령어"** rsync는 **달라진 부분만** 전송합니다. 서버 간 백업, 이전, 배포 모두에 쓰이는 표준 도구입니다. 옵션 조합이 중요합니다. `-a`(속성 유지), `-v`(출력), `-z`(전송 압축)을 기본으로 씁니다. - **개념**: 원본과 대상의 차이만 주고받는 파일 동기화 도구입니다. - **왼쪽 인자**: 원본 경로입니다. 끝에 슬래시가 있으면 **내용물**을, 없으면 **디렉터리 자체**를 복사합니다. - **오른쪽 인자**: 대상 경로입니다. 원격이면 `user@host:/path` 형식입니다. - **삭제**: `--delete`를 쓰면 원본에 없는 파일을 대상에서도 지웁니다. ## 자주 쓰는 옵션 | 옵션 | 설명 | | --- | --- | | -a | 권한·시각·소유자 등 속성을 보존(아카이브 모드) | | -v | 전송 파일을 출력합니다 | | -z | 전송 중 압축합니다(원격 전송에 유용) | | --delete | 원본에 없는 파일을 대상에서 제거해 완전 미러로 만듭니다 | | -n / --dry-run | 실제로 하지 않고 무엇이 바뀔지만 미리 보여줍니다 | ## 필수 명령어 조합 3가지 - `rsync -avz /var/www/html/ deploy@10.0.0.2:/var/www/html/` — 웹 루트를 원격 서버로 증분 동기화 - `rsync -avn --delete /data/ /backup/data/` — 삭제 동작까지 미리 확인(dry-run) - `rsync -av --exclude '*.log' /srv/app/ /backup/app/` — 로그 제외하고 백업 **💬 "이걸로 비용(리소스) 절감하는 예시 알려줘"** 실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다. ### 1단계 · 미리 보기(dry-run) 무엇이 전송·삭제될지 먼저 확인합니다. --delete는 특히 미리 봐야 합니다. ``` rsync -avn --delete /srv/app/ /backup/app/ ``` ### 2단계 · 실제 동기화 문제가 없으면 -n을 빼고 실행합니다. ``` rsync -av --delete /srv/app/ /backup/app/ ``` ### 3단계 · 검증 파일 수와 용량, 대표 파일을 비교합니다. ``` rsync -avn --delete /srv/app/ /backup/app/ | tail -3 ``` ## 실무에서는 이렇게 씁니다 ### 1. 서버 이전 **상황** — 구 서버의 /srv/app 을 신 서버로 그대로 옮겨야 합니다. ``` rsync -avz --exclude 'cache/' /srv/app/ root@10.0.0.9:/srv/app/ ``` **결과** — 대용량도 변경분만 전송되어 이전 시간이 크게 줄어듭니다. **포인트** — 이전 전에 한 번 돌려 전송 후, 서비스 중단 시점에 한 번 더 돌리면 중단 시간이 최소화됩니다. ### 2. 로그 아카이브 백업 **상황** — 지난달 로그를 백업 저장소로 옮겨 보관해야 합니다. ``` rsync -av --remove-source-files /var/log/nginx/2026-09-* /backup/logs/ ``` **결과** — 전송이 끝난 원본 파일은 삭제되어 로컬 디스크를 확보합니다. **포인트** — --remove-source-files는 검증 후에만 씁니다. 실패 시 원본이 남아 있도록 성공 확인이 필수입니다. ## 주의할 점 - 원본 경로 끝의 슬래시 유무로 결과가 완전히 달라집니다. 디렉터리를 통째로 원할 때와 내용만 원할 때를 구분합니다. - --delete는 대상에서 파일을 지웁니다. 반드시 -n으로 미리 확인합니다. - 운영 중인 DB 파일 동기화는 일관성이 깨집니다. DB는 덤프 후 전송합니다. - --remove-source-files는 전송 실패 시 데이터 손실 위험이 있어 자동화에 넣을 때 주의합니다. ## 실제 실행 화면 dry-run으로 전송·삭제 대상만 확인한 결과입니다(실제 변경 없음). ![rsync 명령어 실행 결과: dry-run 증분 전송 목록](https://games.cursorai.co.kr/assets/rsync-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/filesystem/rsync.html