개요
Ubuntu 24.04에서 원격 서버와 파일을 안전하게 주고받는 작업은 시스템 관리와 데이터 백업의 핵심입니다. SCP와 Rsync는 SSH(보안 셸)를 기반으로 데이터를 암호화하며 전송하는 두 가지 강력한 도구입니다. 하지만 이들은 속도, 효율성, 기능 면에서 크게 다르기 때문에, 작업 목적에 맞는 도구를 선택하는 것이 중요합니다. 이번 글에서는 두 도구의 차이점을 명확히 이해하고, 상황별 활용법을 알아보겠습니다.
SCP(Secure Copy)란?
SCP는 SSH를 활용한 파일 복사 도구로, 간단한 명령으로 로컬과 원격 서버 간 파일을 전송합니다. 복잡한 설정 없이 빠르게 사용할 수 있어, 소규모 파일이나 단일 디렉터리를 복사할 때 적합합니다. 하지만 전송이 중단되면 처음부터 다시 시작해야 하며, 변경된 부분만 전송하는 기능은 지원하지 않습니다.
Rsync란?
Rsync는 파일의 변경된 부분만 전송하는 ‘차등 전송’으로 잘 알려진 도구입니다. 블록 단위로 파일 변화를 감지해 델타(변경분)만 전송하므로, 네트워크 대역폭과 시간을 크게 절약합니다. 또한 전송 중단 시 재개가 가능하고, 상세한 진행률 확인 옵션을 제공해 대규모 데이터 동기화나 백업에 이상적입니다.
SCP와 Rsync의 주요 차이점 (테이블 비교)
구분 | SCP (Secure Copy) | Rsync |
---|---|---|
연결 방식 | SSH 기반 단순 복사 | SSH 기반 차등 전송 |
차등 전송 | 지원 안 함 (전체 재전송) | 지원 (델타만 전송) |
중단 후 재개 | 불가능 (처음부터 다시) | 가능 (`-P`로 부분 전송 및 진행률 확인) |
속도 특성 | 소규모 전송 시 빠름, 대량 전송은 비효율적 | 대규모 작업에서 효율적 |
상황 확인 | 단순 로그 (`-v`: 상세 메시지) | 상세 진행률 (`–progress`: 퍼센트 표시) |
일반적 용도 | 소규모 파일 복사, 설정 파일 전송 | 대규모 백업, 주기적 동기화 |
옵션 예시 | `-r` (재귀), `-v` (verbose) | `-avz` (아카이브+압축), `–progress` |
SCP 사용 예시 및 전송 상황 확인
SCP의 기본 전송 명령은 다음과 같습니다.
scp user@remote-server:/remote/path/file /local/path/
디렉터리 전체를 복사하려면 -r(재귀) 옵션을 사용합니다.
scp -r user@remote-server:/remote/folder /local/path/
전송 상황을 확인하려면 -v(verbose) 옵션을 추가하면 됩니다.
scp -rv user@remote-server:/remote/folder /local/path/
출력 예시: “Transferred: sent 1234, received 5678 bytes” 같은 로그.
주의: 진행률은 퍼센트로 표시되지 않으며, 중단 시 처음부터 재시작해야 합니다.
Rsync 사용 예시 및 전송 상황 확인
Rsync의 기본 명령은 다음과 같습니다. (Push)
rsync -avz /local/folder user@remote-server:/remote/folder
- -a: 아카이브 모드(권한, 타임스탬프 유지).
- -v: 상세 출력.
- -z: 압축으로 네트워크 사용량 감소.
진행률 확인 (Pull)
진행률을 확인하며 원격에서 로컬로 백업
rsync -avz --progress user@remote-server:/remote/folder /local/backup/
# 출력: file.txt 50% 1.2MB/s 00:01:23
전송 중단 후 재개 (Pull)
-P 옵션으로 중단된 백업 재개
rsync -avz -P user@remote-server:/remote/large.iso /local/backup/
# 출력: large.iso 1.9GB 100% 18.47MB/s 00:01:39 (이어짐)
증분 백업(Incremental Backup) 설정 (Pull)
변경된 부분만 백업
rsync -avz --progress --delete user@remote-server:/remote/folder /local/backup/
–delete: 원격에서 삭제된 파일을 로컬에서도 삭제.
특정 파일 제외 (Pull)
특정 파일(예: temp.log)을 제외하고 백업
rsync -avz --exclude 'temp.log' user@remote-server:/remote/folder /local/backup/
설명: 로그 파일이나 임시 파일을 백업에서 제외해 불필요한 데이터 전송 방지.
날짜별 백업 (Pull)
변경된 파일을 날짜별 폴더에 보관하며 백업
rsync -avz --backup --backup-dir=/local/backup/old_$(date +%Y%m%d) \
--progress user@remote-server:/remote/folder /local/backup/
설명: 변경된 파일은 old_YYYYMMDD 폴더에 저장되며, /local/backup/은 최신 상태 유지.
시뮬레이션 (Pull)
실제 전송 없이 백업 결과를 미리 확인
rsync -avz --dry-run user@remote-server:/remote/folder /local/backup/
# 출력: file.txt (DRY RUN)
설명: –dry-run으로 어떤 파일이 전송될지 확인 후 실제 실행 결정.
크론탭 자동화 (Pull)
매일 새벽 3시 원격 데이터를 로컬로 백업
crontab -e
0 3 * * * /usr/bin/rsync -avz --delete user@remote-server:/remote/folder /local/backup/
주기적으로 동기화하며 최신 상태 유지.
추가 Rsync 활용법 (Push 중심)
디렉터리 구조만 복사 (Push)
rsync -av --include '*/' --exclude '*' /local/folder user@remote-server:/remote/folder
설명: 디렉터리 구조만 복사하며 파일은 제외, 서버 초기 설정 시 유용.
대용량 파일 크기 제한 (Push)
rsync -avz --max-size='500K' /local/folder user@remote-server:/remote/folder
설명: 500KB 이상 파일은 전송 제외, 대용량 파일 배포 방지.
대역폭 제한 (Push)
rsync -avz --bwlimit=600 /local/folder user@remote-server:/remote/folder
설명: 초당 600KB로 전송 속도 제한, 네트워크 부하 조절.
소스-대상 차이점 확인 (Push)
rsync -avzi /local/folder user@remote-server:/remote/folder
# 출력: <f.st...... file.txt (크기 변경)
설명: –itemized-changes(-i)로 소스와 대상 간 파일 크기, 타임스탬프 등 변경 사항을 상세히 표시. <f는 파일, s는 크기, t는 타임스탬프 변경 의미.
스파스 파일 처리 (Push)
rsync -av --sparse /local/sparse.img user@remote-server:/remote/
설명: –sparse로 희소 파일(데이터 없는 부분이 많은 파일)을 효율적으로 복사, 디스크 이미지 전송 시 공간 절약.
상황별 선택 가이드
- SCP: 설정 파일(nginx.conf)이나 소규모 데이터 전송.
- Rsync Pull: 원격 서버 백업, 대용량 데이터 복구 (예: /var/www/html → 로컬).
- Rsync Push: 로컬 변경 사항 배포, 서버 업데이트 (예: 로컬 → /var/www/html).
- 네트워크 불안정: Rsync의 -P와 –bwlimit 활용.
결론 및 추가 팁
SCP와 Rsync는 Ubuntu 24.04에서 안전한 파일 전송을 보장하지만, Rsync의 유연성과 효율성이 대규모 작업에서 두드러집니다. SCP는 단순한 작업에 적합합니다. 백업 자동화를 위해 Rsync와 크론을 조합하면 시간과 노력을 크게 절약할 수 있습니다.
#추가 팁
시뮬레이션: ‘rsync -avz –dry-run’ 으로 변경 사항 미리보기.
보안: SSH 키 인증 설정으로 비밀번호 입력 생략. -> SSH 키 생성 방법 보러가기
SSH 키 인증으로 전송 (비밀번호 입력 생략)
rsync -avz /local/folder user@remote-server:/remote/folder
# 비밀번호 입력 없이 즉시 전송 시작
SSH 키가 설정되면 SCP와 Rsync 모두 비밀번호 없이 작동.
비밀번호 입력 방식 예시
rsync -avz /local/folder user@remote-server:/remote/folder
# 출력: user@remote-server's password: (입력 대기)
키 인증 없이 기본 SSH 설정 사용 시 매번 비밀번호 입력 필요.
모니터링: /var/log에 Rsync 로그 추가로 문제 추적.
로그 파일 생성 예시
rsync -avz --log-file=/var/log/rsync.log user@remote-server:/remote/folder /local/backup/
로그 확인
cat /var/log/rsync.log
# 출력 예: 2025/03/05 14:32:10 [1234] sent 1234 bytes received 5678 bytes total size 9876
전송된 바이트, 파일 목록 등 상세 기록 확인 가능.