rsync은(는) 무엇을 하나요?
개요
rsync는 효율적인 파일 동기화를 위한 표준 도구입니다. 파일의 변경된 부분만 전송(델타 전송)하고, SSH를 지원하며, 권한을 처리하고, 백업, 배포, 디렉터리 미러링에 사용됩니다.
사용법
1단계: 기본 사용법
# 로컬 디렉터리 동기화
rsync -avz source/ destination/
# -a = 아카이브 (권한, 타임스탬프, 심볼릭 링크 보존)
# -v = 자세한 출력
# -z = 전송 중 압축
# 원격 서버로 동기화
rsync -avz ./dist/ deploy@server:/var/www/myapp/
# 원격에서 가져오기
rsync -avz deploy@server:/var/log/myapp/ ./logs/
# 드라이 런 (실제 실행 없이 변경 사항만 표시)
rsync -avzn source/ destination/
2단계: 일반적인 패턴
# 웹사이트 배포 (대상에 없는 소스 파일은 삭제)
rsync -avz --delete ./build/ deploy@server:/var/www/site/
# 제외(Exclude)를 사용한 백업
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='.env' \
/opt/myapp/ /backups/myapp/
# 하드 링크를 사용한 증분 백업 (공간 효율적)
rsync -avz --link-dest=/backups/latest \
/opt/myapp/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest
# 대역폭 제한 (대용량 전송에 유용)
rsync -avz --bwlimit=5000 source/ destination/ # 5000 KB/s
3단계: 배포 스크립트
#!/bin/bash
# scripts/deploy.sh — rsync를 사용한 앱 배포
SERVER="[email protected]"
REMOTE_DIR="/var/www/myapp"
echo "빌드 중..."
npm run build
echo "파일 동기화 중..."
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.env' \
--exclude='.git' \
./dist/ ${SERVER}:${REMOTE_DIR}/
echo "서비스 재시작 중..."
ssh ${SERVER} "sudo systemctl restart myapp"
echo "배포 완료!"
지침
--delete를 사용할 때는 항상 먼저-n(드라이 런)을 사용하여 실수로 인한 데이터 손실을 방지하세요.- 후행 슬래시는 중요합니다:
source/는 디렉터리 내용을 동기화하고,source는 디렉터리 자체를 동기화합니다. - 대용량 전송 시
--progress를 추가하면 파일별 진행 상황을 볼 수 있습니다. - SSH를 통한 rsync는 기본적으로 암호화되므로 인터넷 전송에 안전합니다.