CodeGym /행동 /Docker SELF /rsync와 scp를 사용한 백업

rsync와 scp를 사용한 백업

Docker SELF
레벨 6 , 레슨 5
사용 가능

rsyncscp를 사용한 백업

1. 백업이 왜 중요할까?

오늘은 IT와 프로그래밍 세계에서 일하는 모두에게 가장 중요한 업무 중 하나인 데이터 백업에 대해 이야기해볼 거야. 만약 디스크 오류나 실수 때문에 중요한 데이터를 잃어본 적이 있다면, 얼마나 중요한지 잘 알 거야. 혹시 잃어본 적이 없다면, 우린 그걸 방지하기 위해 여기 있어!

상황을 상상해봐: 몇 개월 동안 프로젝트에 열심히 매달렸는데, 어느 날 갑자기 하드 디스크가 파업을 선언한 거야. 이건 SQL 쿼리 끝에 세미콜론을 까먹었을 때만큼 당황스러운데, 그보다 천 배 더 심각하다고 보면 돼. 시스템은 신뢰하기 어려울 때가 있고, 사람들은 실수를 하고, 파일은 사라질 수 있어. 백업이 있다면 이런 불쾌한 서프라이즈를 미리 대비할 수 있어.

Linux에서는 백업을 위한 강력한 도구 몇 가지가 있어. 오늘은 그 중 두 가지, rsyncscp를 배워볼 거야.


2. rsync 명령어: 빠르고 스마트한 데이터 복사 도구

rsync는 가장 인기 있는 데이터 복사 및 동기화 도구 중 하나야. 이 도구의 가장 큰 장점은 속도와 효율성이야. 모든 파일을 무작정 복사하는 대신, rsync는 변경된 파일만 복사해. 이 점 때문에 대량 데이터를 정기적으로 백업하기에 딱 좋은 도구야.

rsync의 문법

다음은 기본 명령 형식이야:

rsync [옵션] 원본 대상

여기서:

  • 원본 — 복사하려는 파일이나 폴더의 경로.
  • 대상 — 데이터를 복사할 목적지.

주요 옵션과 그 기능

다음은 자주 사용되는 옵션들이야:

  • -a (archive): 모든 메타데이터(권한, 타임스탬프 등)를 포함하여 복사.
  • -v (verbose): 진행 상황을 자세히 보여줌.
  • --progress: 복사 진행 상황을 표시 (큰 파일을 복사할 때 매우 유용함).
  • --delete: 원본에 더 이상 없는 파일을 대상에서도 삭제 (완전한 동기화에 유용함).
  • -z (compress): 데이터를 전송하기 전에 압축하여 작업 속도를 높임 (특히 네트워크 작업에서 중요).

예제: 로컬 데이터 복사

백업 저장을 위한 /backup 디렉토리를 만들자.

mkdir /backup

/home 디렉토리의 모든 내용을 /backup으로 복사:

rsync -av /home /backup

이 예제를 분석해 보자:

  • -a는 파일 구조와 권한을 유지.
  • -v는 프로세스 진행 상황을 보여줌.

다시 명령어를 실행하면, 이번에는 변경되거나 새로 추가된 파일만 복사할 거야.

예제: 원격 백업

이번에는 원격 서버로 백업을 전송하고 싶다고 가정해 보자. rsync는 SSH 사용을 지원해.

rsync -av /backup user@remote_server:/remote_backup

여기서:

  • user — 원격 서버의 사용자 이름.
  • remote_server — 원격 서버 주소 (예: IP 주소나 도메인 이름).
  • /remote_backup — 데이터를 저장할 서버 상의 경로.

SSH 키로 인증 가능하면 전송이 더욱 간편(그리고 안전)해져.


3. scp 명령: 간단하고 효율적임

scp (Secure Copy Protocol) — 로컬 및 원격 머신 간 파일을 복사하는 도구입니다. 이 도구는 rsync보다 약간 더 간단하며 전체 동기화가 필요하지 않은 경우에 적합합니다.

scp 문법

기본 명령 형식은 다음과 같이 보입니다:

scp [옵션] 소스 대상

여기서:

  • 소스 — 복사하려는 파일의 경로입니다.
  • 대상 — 전달하려는 주소입니다.

주요 옵션과 그 기능

몇 가지 유용한 옵션들:

  • -r: 폴더를 재귀적으로 복사합니다.
  • -C: 전송 전에 파일을 압축합니다.
  • -P: 기본값(22)과 다른 SSH 포트를 지정합니다.

예제: 파일을 원격 머신으로 복사하기

로컬 컴퓨터에서 서버로 파일을 전송하고 싶습니다. 예를 들어, 파일 이름이 document.txt라고 가정합시다.

scp document.txt user@remote_server:/remote_folder

파일이 /home/user/documents 폴더에 있다면, 명령은 다음과 같이 보일 것입니다:

scp /home/user/documents/document.txt user@remote_server:/remote_folder

이제 파일은 원격 머신의 /remote_folder 폴더에서 사용할 수 있습니다.

예제: 서버에서 로컬 머신으로 파일 복사하기

이 과정은 반대로 작동합니다:

scp user@remote_server:/remote_folder/document.txt /home/user/documents

이 경우 document.txt 파일은 로컬 폴더에 있게 됩니다.


4. rsyncscp의 차이점

두 명령어 모두 파일 복사가 가능하지만, 각각의 특징이 있어.

특징 rsync scp
속도 변경된 데이터만, 대용량에 더 빠름 변경되지 않은 파일도 전부 복사
동기화 완전한 동기화 지원 동기화 지원 안 됨
데이터 압축 -z 지원 -C 지원
사용 용이성 설정이 더 복잡함 간단한 인터페이스

그래서 빠르게 파일을 복사해야 한다면, scp를 사용해. 정기적인 동기화나 대용량 데이터를 다룬다면, 확실히 rsync가 좋아.


5. 실전 예제: 백업 설정

여기 실습 과제가 있어: 프로젝트를 원격 서버에 백업하는 전체 과정을 설정하고 싶어.

  1. 예를 들어, 프로젝트 파일이 /home/user/project 폴더에 저장되어 있다고 치자. 너는 이 파일들을 backup.server.com 서버의 /backups/project 폴더에 백업하고 싶어.

  2. 더 빠르게 복사를 수행하기 위해 rsync를 사용할 거야.

백업 스크립트 설정

backup.sh 파일을 만들어:

#!/bin/bash

SOURCE="/home/user/project"
DESTINATION="user@backup.server.com:/backups/project"

# rsync로 백업 수행
rsync -av --delete "$SOURCE" "$DESTINATION"

# 완료 메시지 출력
echo "백업 완료!"

파일을 실행 가능하게 만들어:

chmod +x backup.sh

이제 이 스크립트를 수동으로 실행할 수 있어:

./backup.sh

혹은 cron에 추가해서 자동으로 실행되도록 설정할 수 있어 (cron에 대해서는 나중에 배우자).


6. 일반적인 실수와 그것들을 피하는 방법

  1. 명령어 라인에서 잘못된 경로. 파일 경로를 잘못 지정하면 rsyncscp가 아무 것도 복사하지 않을 거야. 경로가 맞는지 확인하려면 lspwd 명령어를 사용해봐.

  2. 인증 키 없음. SSH를 사용할 때 키 설정이 안 되어 있다면 비밀번호를 계속 물어볼 거야. 과정을 쉽게 만들려면 SSH 키를 설정해.

  3. 백업 중단. 네트워크가 불안정하면 rsync는 다음 실행 시에도 전송을 계속할 수 있어. 하지만 scp는 처음부터 다시 시작해야 해.

rsyncscp를 사용하면 로컬 컴퓨터와 원격 서버 모두에서 데이터를 안전하게 복사하고 동기화할 수 있을 거야. 중요한 파일을 보호할 땐 이 도구들이 네 든든한 파트너가 될 거야.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION