Linux

내 컴퓨터와 서버 디렉터리 동기화 - rsync

둔진 2020. 5. 2. 03:09

  클라우드 환경에서 작업을 하다보면 현재 내가 작업 중인 컴퓨터의 특정 디렉터리와 서버의 디렉터리를 동기화하고 싶을 때가 있습니다. 내 컴퓨터의 코드와 데이터를 있는 구조 그대로 서버로 옮기거나, 서버에서 작업 중이던 데이터와 구조를 그대로 내 컴퓨터로 옮기고 싶을 때가 있죠.

합쳐져라!

  한가지 방법은 git을 써서 push하고 pull하는 방법이 있지만, 이 경우에 중간 서버를 경유해야한다는 단점이 있고, 무엇보다 아직 repository에 push하면 안 되는 중간 내역들이 push되게 됩니다. 이런 상황에서 유용한 툴이 rsync입니다.

  rsync는 두 path의 내용을 똑같이 맞춰주는 역할을 합니다. 두 path는 local-local도 되고, server-local도 됩니다. 최초 한번은 전체를 복사해야하기 때문에 시작이 좀 걸리지만, 한번 하고나면 이전 Sync와 비교해서 차이가 난 부분만 복사하기 때문에 아주 속도가 빠릅니다.

 

  예를 들어 저는 현재 Mac의 /Users/ceongjeein/Workspace/dl에서 작업을 하고 있고, 똑같은 서버의 경로는 Ubuntu의 /home/ceongjeein/Workspace/dl이라고 가정해보겠습니다.

  랩탑에서 서버로 데이터를 동기화하기 위해서는 아래와 같이 명령해줍니다.

rsync -avh --progress --exclude 'venv' --exclude '__pycache__' /Users/ceongjeein/Workspace/dl/ ceongjeein@dl.local:/home/ceongjeein/Workspace/dl/
  • 기본 형식은 "rsync 옵션들 원본경로 목적지경로"입니다.
  • -a: 원본경로의 디렉토리 구조를 하위까지 돌면서 (recursive) 퍼미션, 링크 등의 정보를 모두 복사합니다.
  • -v: 동기화 현황을 자세히 보여줍니다.
  • -h: 동기화 현황의 숫자들을 사람이 보기 좋은 형태로 출력합니다.
  • --exclude: 동기화에서 제외할 패턴입니다. 이 경우에 venv를 쓰고 있는데 시스템마다 하위 내용이 다르기 때문에 제외했습니다. __pycache__도 마찬가지고요. 
  • -z: 여기에서는 안 썼지만 데이터를 압축 후 전송합니다. 네트워크가 아주 느린 경우라면 도움이 좀 되겠지만 아니라면 쓰지 않는 편이 오히려 좋습니다. 압축에 들어가는 CPU 오버헤드가 더 큰 경우가 많거든요.

  반대로 서버에서 데이터를 동기화해 올 때는 원본 경로와 목적 경로만 바꿔주면 됩니다.

rsync -avh --progress --exclude 'venv' --exclude '__pycache__' ceongjeein@dl.local:/home/ceongjeein/Workspace/dl/ /Users/ceongjeein/Workspace/dl/ 

 

  한가지 팁은, 첫번째 명령을 sync_to_server.sh, 두번째 명령을 sync_to_laptop.sh로 저장해두고 필요에 따라 실행하시면 더욱 간편합니다.