Post

Syncthing을 사용한 디렉터리 연동

평소 집에서는 데스크톱을 사용하고 밖에서는 노트북을 사용하여 개발 등의 작업을 하다 보니 이 두 기기간의 연동이 되어 작업 중이던 작업을 이어서 할 수 있으면 좋을 것 같다 생각하였다.

따라서 두 기기간 연동되는 환경을 구축하기 위해 여러 방법에 대해 검색하였고 Nextcloud, rsync, lsync, sshfs 등의 방법 등을 사용해 보았었다. 결과적으로 현재는 syncthing을 사용하고 있는데 이에 대해 소개하고자 한다.

Syncthing

Introduction

syncthing-logo

Syncthing은 지속적인(continuous) 파일 동기화 프로그램으로 두 대 이상의 컴퓨터 간에 파일을 실시간으로 동기화해준다.

오픈소스 프로그램으로 MPL 2.0 라이센스로 배포되며 멀티 플랫폼을 지원해 Windows, macOS, Linux, Android, Solaris, Darwin, BSD에서의 사용을 지원한다.

또한 파일을 전송할 때에는 TLS를 사용한 암호화된 통신을 사용해 안전하게 데이터를 주고받을 수 있다고 한다.

현재 사용중인 환경

글쓴이의 경우 이 Syncthing을 사용해 데스크톱, 노트북, 그리고 개인 서버까지 3개의 기기를 연동해 사용 중이다.

위에서는 데스크톱과 노트북 두 기기간의 연동을 위해 사용한다 해놓고 실제로는 개인 서버까지 3개를 사용하고 있는데 이는 개인 서버를 추가로 사용하면 좀 더 실사용에서 유용하기 때문이다.

좀 더 자세히 설명하자면, Syncthing을 둘 또는 그 이상의 기기간의 디렉터리를 동기화해주는 프로그램으로 두 개의 기기를 동기화할 경우 두기기가 모두 켜져 있어야 실시간으로 동기화가 된다.

따라서 두기기가 모두 켜져있지 않으면 동기화를 보류해 두었다 연결이 성공했을 때 동기화를 해주게 되는데, 이렇게 될 경우 한 기기에서 작업한 내용이 다른 기기에 반영하기 위해서는 잠깐이지만 두기 기를 둘 다 켜놓고 동기화가 끝나길 기다려야 한다.

이렇게 될 경우 노트북에서 작업한 작업을 집에 들어와서 데스크톱을 켜서 작업할 때 노트북도 잠시 켜서 두기기가 모두 연결이 이루어지도록 해줘야 하는 불편함이 있었다.

이를 해결하기 위해 24시간 켜 두는 개인 서버로 사용하는 라즈베리파이에도 syncthing을 설치해 사용하는 세팅을 하게 되었다.

my-setting

위와 같이 세팅을 해주게 되면 데스크톱과 노트북에서 파일을 수정하게 되면 24시간 켜져 있는 서버에 실시간으로 변경이 반영되므로 두 기기간의 동기화를 위해 두 기기를 동시에 켜둘 필요가 없어진다.

또한 서버에 언제나 파일이 백업되므로 좀 더 안전한 파일 관리가 가능하다.

그렇다면 이제 syncthing을 설치하고 설정하는 방법에 대해 알아보자.

설치 및 설정

설치

Syncthing을 설치하기 위해서는 Syncthing 다운로드 문서를 참고해 자신의 운영체제나 환경에 맞게 설치를 진행해 주면 된다.

설치가 끝나면 백그라운드에서 동작할 수 있게 아래 명령을 실행해준다.

1
systemctl --user enable --now syncthing.service

그러면 이제 백그라운드에서 syncthing이 실행중이게 되는데 설정을 위한 화면은 웹브라우저로 https://localhost:8384로 접속하면 된다.

처음 브라우저로 접속하면 아래와 같은 경고를 볼 수 있다.

connection-warning

이는 https 연결을 위한 ssl 인증서가 인증이 안되었다는 경고로 인터넷에서 알 수 없는 사이트를 들어갈 때는 조심해야 하지만 지금 들어가려는 페이지는 방금 서버를 열었기 때문에 인증이 없는 게 당연하므로 무시하고 접속하면 된다.

first-setup

처음 접속을 하면은 위와 같이 비밀번호를 설정하라는 안내가 나오는데 설정을 눌러 비밀번호를 설정하면 된다.

그렇다면 이것으로 기본적인 설치는 끝난 것이다!

기기연동 추가 및 동기화

그렇다면 이제 기기간의 연동을 설정해 주어야 한다. 그러기 위해서는 우선 연동할 디렉터리(폴더)를 추가해주어야 한다.

dir-list

처음 기본 설정으로는 위의 부분에 기본적으로 추가된 디렉터리가 있을것인데 이를 사용해주어도 되고 아니면 연동하고 싶은 디렉터리(폴더)를 직접 추가해 주어도 된다.

device-list

자신의 상황에 맞게 폴더를 설정했다면 연동하고 싶은 기기를 추가해야 하는데 위의 화면과 같이 기기가 추가되어야 한다.

기기 추가를 위해서는 오른쪽 아래의 ‘다른 기기 추가’버튼을 누르면 된다.

add-device-setup

그러면 위와 같은 창이 뜨게 되는데 여기서 중요한 건 기기 식별자를 입력하는 것과 공유할 디렉터리(폴더)를 설정하는 것이다.

우선 공유하고 싶은 디렉터리(폴더)는 원하는 것을 체크하면 되고 비밀번호는 자신의 기기인 것을 아는 이상 신뢰하는 기기이므로 입력하지 않아도 된다.

다음으로 Syncthing은 각각의 기기에 고유한 문자열이 부여돼 이를 사용해 기기를 식별하게 되는데, 이러한 기기 식별자는 Sycthing 개발팀에서 운영하는 중앙 서버에 등록되어 세계 어디서나 기기의 IP가 변경되어도 식별자를 기준으로 IP를 연동하여 기기간 동기화를 가능하게 해 준다.

따라서 기기 식별자를 입력해주어야 하는데 이는 아래와 같이 오른쪽 위 메뉴를 누르면 확인할 수 있다.

device-identifier

기기 식별자는 내가 연동하고자 하는 대상의 기기 식별자를 입력해야 하므로 메신저 등을 사용해 복사해 입력해주도록 하면 된다.

이렇게 설정을 모두 하면 대상이 되는 기기에서 기기를 추가하고 싶다고 알림이 오는것을 확인할 수 있다.

add-device-req

위와 같은 알림이 오게되는데 알맞은 알림인지 확인하고 추가버튼을 누르면 된다.

add-new-dir

기기를 추가하면 좀 있다가 위와 같이 디렉터리(폴더)의 공유 요청이 들어오게 되고 이를 추가해주면 된다.

이때 추가를 누르면 나오는 설정에서 기본 설정을 따라도 되지만 디렉터리 경로나 백업 설정 등을 할 수 있다. 이는 자신이 원하는대로 설정해주면 된다.

syncing

설정이 끝나면 위와 같이 동기화중인 모습을 확인할 수 있다!

이제부터는 파일에 변경 등이 있을때 실시간으로 다른기기에도 변경사항이 반영되는 것을 확인할 수 있다.

추가 자료

Syncthing을 실사용하면서 알게 된 한 가지 주의사항이 있는데, Syncthing의 경우 실시간 동기화이긴 하지만 동기화에 몇 초 정도의 시간이 걸리긴 하므로 가끔 동기화가 되기 전에 파일의 수정이 있으면 충돌이 일어나기도 한다.

만약 파일 간에 충돌이 일어났다면 충돌 난 파일은 <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext> 형식으로 파일이 기록되니 다시 교통정리를 해주면 된다.

하지만 충돌이 일어나기 전에 동기화가 됐는지 잠깐 기다려서 확인한 뒤 사용하는 것이 좀 더 안전하지 않을까 한다..!

여기까지 Syncthing의 간단한 설치 및 설정 방법이었다. 추가로 좀 더 syncthing을 잘 활용해보고 싶다면 공식 문서에 잘 정리되어 있으므로 확인해보면 좋을 것 같다.

This post is licensed under CC BY 4.0 by the author.