Home 라즈베리 파이로 Syncthing 서버 만들기
Post
Cancel

라즈베리 파이로 Syncthing 서버 만들기

배경

개발을 여러 환경에서 하다보면, 소스코드 관리가 꽤 골칫거리가 된다.
현재 밖에서는 맥북에어, 집에서는 리눅스 데스크탑으로 개발을 하고 있다. 학교에서 맥북으로 작업하다가, 집에서는 우분투로 해야하니 파일 동기화가 필요해졌다.
이전에도 비슷한 상황들이 있었는데, 그때는 우분투가 아닌 맥-윈도우 간의 동기화만 신경쓰면 됐어서, 그냥 구글 드라이브/원드라이브 동기화로 해결을 했었다. 그렇지만 우분투와같은 리눅스 환경에서는 일반적인 상용 드라이브를 사용하기가 어렵고, 외부 플랫폼에 의존하지 않는게 좋은 것 같아서, 집에있는 라즈베리파이를 활용해서 동기화 서버를 만들어보기로 하였다.

SyncThing

이러한 상황에서 사용할 수 있는 다양한 솔루션들이 있는데, 그 중에서 Syncthing을 골랐다. 그 이유는

  1. 무료, 오픈소스
  2. 가볍다
  3. 대용량 파일 공유가 아닌 소스코드 중심으로 동기화를 할 것이라 nas 정도의 시스템은 필요가 없었다.
  4. 개발자가 사용하기에 적합한 기능들(Ignore 기능, 버전 관리 기능 등등)

Syncthing의 가장 큰 특징은, 동기화하는 기기들간에 P2P방식으로 동기화를 지원한다는 점이다.
그렇기에 동기화하는 기기들이 모두 작동중인 경우면 문제가 되지 않지만, 한쪽이 작동중이 아니면 동기화가 되지 않는다.
그러면 예를들어 학교에서 맥북으로 작업을 하다가, 집에 들어와서 데스크탑으로 작업을 이어나가려면, 데스크탑을 켠 후 맥북을 다시 켜서 동기화가 될 때까지 기다리는 시간이 필요해진다…

이런 문제점을 해결하기 위해, 항상 켜두고 있는 라즈베리 파이를 맥북과 데스크탑 사이의 동기화를 지원하는 중계 서버로 활용하기로 했다.
이렇게하면, 한쪽 기기에서 파일 변경을 했을 때 다른 기기가 꺼져 있어도, 변경 사항은 라즈베리파이에 저장되었다가, 다른 기기가 켜지면 그때 바로 동기화가 진행된다.

셋업

셋업은 사실 진짜 간단하다. 그냥 다운로드 링크에서 운영체제와 아키텍쳐에 맞는 버전을 다운받고,
UI 다운이 끝나고 실행하면, http://127.0.0.1:8384/이 주소로 Syncthing UI를 확인할 수 있다. 이 곳에서 어떤 기기와 동기화를 할 것인지, 그리고 어떤 디렉토리를 동기화 할 것인지를 선택할 수 있다.

좀 더 자세한 설명은 유튜브를 참고하면 될 것 같다. 그리고 공식 Doc 링크도 참고 UI

디렉토리 별로 설정을 고를 수 있는데, 위와 같이 Ignore 패턴을 지정할 수도 있고, UI 파일 버전 관리 방식도 설정 할 수 있다. 중요한 파일의 경우, 파일 버저닝을 활성화하는 것을 추천한다. 아무래도 3개 기기 간에 동기화를 진행하면, 파일이 간혹가다 꼬이는 경우가 존재한다.

Syncthing이 좋은 점이 P2P 방식인데, 당연히 NAT Traversal도 알아서 해주고,
내부망으로 연결하다가 외부망으로 옮겨도, 연결이 유지가 잘 된다. 근데 아마도 동기화하는 두 기기 중 어느 한쪽은 기존의 공인 IP가 변경되지 않아야할 것 같긴하다. 지금 설정의 경우 라즈베리파이의 IP가 고정이기 때문에, 맥북의 IP가 바뀌어도 맥북에서 라즈베리파이의 IP를 사용해서 연결을 재개하는 듯 하다.

Troubleshooting

구성을하다가 생겼던 약간의 문제점들을 정리해본다.

라즈베리 파이 설정

라즈베리 파이에 우분투 server 버전을 받은 상태여서, Syncthing UI를 라즈베리파이 내에서 볼 수가 없었다. ssh로 연결해서 라즈베리 파이를 활용하고 있는 상황이었고, 라즈베리파이의 http://127.0.0.1:8384/를 접속하기 위해, Syncthing config 파일에서 UI 주소를 http://0.0.0.0:8384/ 로 변경했다. 이렇게하면, 같은 내부망에서는 8384포트로 라즈베리 파이의 UI를 볼 수 있었다. 물론 UI말고도 config파일 만으로도 모든 설정이 가능한 것 같기는 한데, 자신이 없어서 이렇게 우회 방식을 선택했다. 그리고 이렇게 하면 약간의 보안 문제가 발생할 수 있는데, Syncthing UI 자체에 암호를 걸 수 있어서 이걸로 해결을 했다.

iCloud 동기화

현재 맥북과 아이폰, 아이패드 사이의 동기화는 아이클라우드를 사용하고 있다. 대충 강의 ppt, 악보, 그리고 옵시디언도 아이클라우드에 들어가 있다. 그래서 Syncthing 동기화 디렉토리에 아이클라우드 파일들도 포함하려고 했는데, 처음에 약간 헤매는 과정이 있었다.

문제였던것은, Syncthing의 아이클라우드 디렉토리 접근권한과, 아이클라우드의 ‘다운로드 유지’ 옵션이었다.

우선 Syncthing이 아이클라우드에 접근할 수 있도록, 맥의 설정에서 개인정보 보호 및 보안 > 전체 디스크 접근 권한 에서 syncthing을 추가해야 한다.

이렇게만해두고 syncthing UI에 들어가면 무슨 lock과 관련된 에러가 엄청 뜨는데, 아이클라우드 내에서 동기화를 할 디렉토리들을 다운로드 항목 유지를 해줘야한다. 다행히 디렉토리를 그렇게 설정해주면 하위 파일들은 모두 그 설정이 반영이 되니 그렇게 하면 아이클라우드도 잘 동기화가 된다.

성능

처음에 구성을 했을 때, 초기 동기화해야하는 데이터 사이즈가 약 20GB 정도 있었다. 한 2시간 정도 걸렸던 것 같고, 아무래도 대용량 파일 보다는 자잘하게 작은 파일들이 매우 많아서, 동기화가 꽤 오래걸렸던 것 같다. 용량이 큰 파일의 경우 속도는 부족하지 않게 나온다. 초기 동기화를 하면서, 라즈베리파이의 온도를 계속 지켜봤는데, 70도까지 오르는 것을 보면서 약간 마음이 아팠다. 라즈베리 파이 4B, 램 2GB 모델을 사용하고 있는데, 기존에 사진 웹 사이트를 돌리고 있던거에 Syncthing 까지 추가를 하니 약간 버거워하는 것 같았다. 그래도 이걸 위해, 라즈베리파이의 microsd를 32에서 128로 올려주긴 했다.

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

WebRTC 내용 정리

-