
[ubuntu] 데스크탑과 노트북을 Syncthing으로 자동 동기화하기
데스크탑과 노트북 사이에서 파일을 편하게 주고받기 위해 처음에는 SMB 공유를 고려했다. 하지만 노트북을 외부에서도 사용하고, 데스크탑이 꺼져 있을 때도 파일을 열어야 했기 때문에 Syncthing으로 작업 폴더를 양방향 동기화하기로 했다.
최종 구성은 다음과 같다.
Ubuntu 24.04 데스크탑
~/00_Syncthing_Desktop
↕
Syncthing
↕
Ubuntu 24.04 노트북
~/00_Syncthing_Notebook
Syncthing은 특정 서버에 파일을 올리는 클라우드 서비스가 아니다. 각 장치가 서로 파일을 교환하며, 동기화된 파일은 양쪽 장치에 로컬 파일로 남는다. 따라서 한쪽 컴퓨터가 꺼져 있어도 이미 동기화된 파일은 계속 사용할 수 있다.
Syncthing과 SMB의 차이
둘은 비슷해 보이지만 목적이 다르다.
| 구분 | Syncthing | SMB |
|---|---|---|
| 기본 방식 | 각 장치에 파일 복사본을 동기화 | 서버의 파일을 네트워크로 직접 사용 |
| 데스크탑이 꺼진 경우 | 노트북의 로컬 파일 사용 가능 | 공유 폴더 접근 불가 |
| 오프라인 작업 | 가능 | 불가능 |
| 저장 공간 | 장치마다 필요 | 서버에만 필요 |
| 적합한 용도 | 문서, 소스, 작업 자료 | 대용량 영상, ISO, 보관 자료 |
자주 수정하는 작업 파일은 Syncthing으로 동기화하고, 용량이 큰 보관 자료는 필요할 때 SMB로 접근하는 혼합 구성이 실용적이다.
1. Ubuntu에 Syncthing 설치
데스크탑과 노트북에서 각각 다음 명령을 실행한다.
sudo apt update
sudo apt install syncthing
Ubuntu 24.04에서는 Syncthing이 universe 저장소에 포함되어 있어 APT로 바로 설치할 수 있다. Ubuntu에 기본 설치되는 프로그램은 아니지만 별도의 설치 파일을 내려받을 필요는 없다.
설치된 버전은 다음 명령으로 확인한다.
syncthing --version
2. 로그인할 때 자동 실행하기
Syncthing을 사용자 서비스로 활성화한다. 이 명령에는 sudo를 붙이지 않는다.
systemctl --user enable --now syncthing.service
서비스 상태를 확인한다.
systemctl --user is-enabled syncthing.service
systemctl --user is-active syncthing.service
다음처럼 나오면 정상이다.
enabled
active
문제가 생겼을 때는 아래 명령으로 상세 상태와 로그를 확인할 수 있다.
systemctl --user status syncthing.service
journalctl --user-unit=syncthing.service -e
3. 관리 화면 열기
브라우저에서 다음 주소를 연다.
http://127.0.0.1:8384
또는 터미널에서 바로 열 수 있다.
xdg-open http://127.0.0.1:8384
관리 화면의 수신 주소는 특별한 이유가 없다면 127.0.0.1:8384로 유지한다. 이렇게 하면 같은 컴퓨터에서만 관리 화면에 접근할 수 있다.
4. GUI 로그인 ID와 비밀번호 설정
관리 화면에서 다음 메뉴로 이동한다.
Actions → Settings → GUI
아래 두 항목에 원하는 값을 입력한다.
GUI Authentication UserGUI Authentication Password
이 정보는 Syncthing 온라인 계정이 아니다. 각 컴퓨터의 관리 화면을 보호하는 로컬 로그인 정보이므로 데스크탑과 노트북에서 서로 다르게 설정해도 된다.
5. 동기화 폴더 생성
데스크탑에서 동기화 폴더를 준비한다.
mkdir -p ~/00_Syncthing_Desktop
노트북에서는 별도의 로컬 경로를 준비한다.
mkdir -p ~/00_Syncthing_Notebook
데스크탑의 Syncthing 화면에서 Add Folder를 누르고 다음과 같이 설정한다. Folder Label은 화면에 표시되는 이름이므로 원하는 이름을 사용해도 된다. 이번 구성에서는 Notebook_Share를 사용했다.
| 항목 | 설정값 |
|---|---|
| Folder Label | Notebook_Share |
| Folder ID | 자동 생성된 값 |
| Desktop Folder Path | ~/00_Syncthing_Desktop |
| Notebook Folder Path | ~/00_Syncthing_Notebook |
| Folder Type | Send & Receive |
Folder ID는 연결된 장치들이 동일한 폴더임을 구분할 때 사용하는 값이다. 실제 값은 설치 환경마다 달라지므로 블로그의 예시 값을 직접 복사하지 말고, 처음 폴더를 만들 때 자동 생성된 값을 그대로 사용한다. 다른 장치에서 공유 요청을 수락할 때도 이 값은 변경하지 않는다.
장치마다 실제 폴더 경로가 달라도 괜찮다. Syncthing은 로컬 경로가 아니라 동일한 Folder ID를 기준으로 두 폴더를 연결한다.
6. 두 장치 연결
Syncthing의 Device ID는 프로그램을 처음 실행할 때 자동 생성된다. 로그인 ID나 비밀번호와는 다른 값이며 사용자가 직접 정하는 값도 아니다.
각 장치에서 다음 메뉴를 열어 Device ID를 확인한다.
Actions → Show ID
연결 순서는 다음과 같다.
- 노트북에서
Add Remote Device를 누른다. - 데스크탑의 Device ID를 입력한다.
- 장치 이름을 알아보기 쉽게 지정한다.
- 데스크탑에 표시되는 연결 요청을 수락한다.
- 데스크탑에서
Notebook_Share → Edit → Sharing을 연다. - 연결된 노트북을 선택하고 저장한다.
- 노트북에 나타나는 새 폴더 공유 요청을 수락한다.
- 노트북의 폴더 경로를
~/00_Syncthing_Notebook으로 지정한다.
같은 네트워크에 있는 장치는 자동으로 발견될 수도 있지만, Device ID를 직접 입력하는 방식이 가장 확실하다.
블로그나 공개 문서에는 실제 Device ID를 그대로 기록하지 않는 편이 좋다. Device ID 자체가 비밀번호는 아니지만, 필요한 상대에게만 공유하는 습관이 안전하다.
7. 파일 버전 관리 설정
동기화는 삭제도 그대로 전파한다. 한쪽에서 실수로 파일을 삭제하면 다른 장치에서도 삭제된다. 기본 설정에서는 파일 버전 관리가 꺼져 있으므로, 기본 동기화가 정상 작동하는 것을 확인한 뒤 켜는 것을 권장한다.
각 장치에서 폴더의 Edit → File Versioning으로 이동한 뒤 다음과 같이 설정한다.
File Versioning: Staggered File Versioning
Maximum Age: 90 days
Staggered 방식은 최근 버전은 촘촘하게, 오래된 버전은 간격을 두고 보관한다. 이전 파일은 기본적으로 동기화 폴더 내부의 .stversions 디렉터리에 저장된다.
버전 관리는 해당 장치가 다른 장치에서 변경된 파일을 수신할 때 적용된다. 어느 쪽에서 실수하더라도 복구할 수 있게 양쪽 장치 모두에서 켜는 것이 좋다.
8. 동기화 시험
데스크탑에서 테스트 파일을 만든다.
printf 'Syncthing test\n' > ~/00_Syncthing_Desktop/syncthing-test.txt
노트북에 동일한 파일이 나타나는지 확인한다.
cat ~/00_Syncthing_Notebook/syncthing-test.txt
Syncthing 화면에서 양쪽 장치와 폴더가 모두 Up to Date로 표시되면 설정이 끝난 것이다.
사용하면서 주의할 점
동기화는 백업이 아니다
Syncthing은 두 장치의 상태를 맞추는 프로그램이다. 파일 삭제, 잘못된 수정, 랜섬웨어로 인한 변경도 다른 장치에 전파될 수 있다. 버전 관리를 켜더라도 중요한 파일은 별도의 외장 디스크나 백업 저장소에 보관해야 한다.
동시에 같은 파일을 편집하지 않는다
두 장치가 오프라인인 상태에서 같은 파일을 각각 수정하면 sync-conflict 파일이 생길 수 있다. 컴퓨터를 바꾸기 전에 가능하면 Syncthing 상태가 Up to Date인지 확인한다.
홈 디렉터리 전체를 동기화하지 않는다
다음과 같은 항목은 별도 검토 없이 동기화하지 않는 것이 좋다.
.cache와 브라우저 프로필- 실행 중인 가상머신 이미지
- 데이터베이스 데이터 디렉터리
- 운영체제별 설정 파일 전체
- 매우 큰 빌드 결과물
필요한 작업 파일만 전용 폴더에 넣는 구성이 단순하고 안전하다.
소스코드의 버전 관리는 Git으로 한다
Syncthing은 여러 컴퓨터 사이에 작업 디렉터리를 전달하는 데 편리하지만, 소스코드 변경 이력을 관리하는 도구는 아니다. 소스코드는 Git을 기본으로 사용하고 Syncthing은 문서나 대용량 작업 자료를 전달하는 보조 수단으로 쓰는 편이 좋다.
데스크탑이 Windows와 Ubuntu 듀얼부팅이라면
같은 물리적 데스크탑이라도 Syncthing에서는 다음처럼 별개의 장치로 취급하는 것이 안전하다.
Desktop-Ubuntu ─┐
├── Laptop-Ubuntu
Desktop-Windows ─┘
Windows와 Ubuntu의 Syncthing이 동일한 NTFS 폴더와 상태 데이터베이스를 직접 공유하게 만들기보다는, 운영체제별로 별도의 동기화 폴더를 두고 노트북을 중간 장치로 사용하는 편이 충돌 가능성이 작다.
데스크탑 운영체제를 바꾸기 전에는 노트북과의 동기화가 Up to Date인지 먼저 확인한다.
마무리
Syncthing을 사용하니 데스크탑에서 작업하던 문서를 별도로 복사하거나 업로드하지 않아도 노트북에서 이어서 사용할 수 있었다. 노트북이 외부에 있거나 데스크탑이 꺼져 있어도 로컬 복사본을 사용할 수 있다는 점이 SMB 공유와 비교했을 때 가장 큰 장점이었다.
현재 구성에서는 다음 역할 분리가 잘 맞는다.
- 자주 수정하는 작업 파일: Syncthing
- 대용량 보관 자료: 필요하면 SMB
- 소스코드 변경 이력: Git
- 장기 보존이 필요한 파일: 별도 백업
0 댓글