본문으로 건너뛰기

[6/7] Syncthing으로 Obsidian과 농장 PC의 Garden 동기화하기

· 약 5분

이 글은 실제 Abulafium 구축 이력(2026-10-09 기준)을 바탕으로 다시 작성한 공개용 실습 매뉴얼입니다. [실제 검증]은 구축 과정에서 성공을 확인한 상태, [재현 절차]는 이를 일반화한 실행 순서, [확인 필요]는 실제 소스·대시보드를 추가 확인해야 하는 사항입니다. 명령어의 <USER>, <REPO_URL> 등은 자신의 환경으로 변경하세요.

완성 목표​

노트북의 Obsidian Vault garden/과 PC의 garden/을 Git Commit 없이 양방향 파일 동기화한다. 단, .git/은 공유하지 않는다.

1. 선택 이유​

Git Pull을 주기적으로 실행하면 Push 전 편집 중인 문서를 Hermes가 읽지 못한다. 반대로 Hermes가 작성한 결과물을 개인 PC에 전달하는 흐름도 별도 구성이 필요했다. 그래서 Git은 버전·출판, Syncthing은 파일 복제로 역할을 분리했다.

2. 기존 환경에서 실제 발견한 상태​

처음에는 /home/<USER>/automation/docker-compose.yml 하나에서 db, n8n, syncthing이 함께 운영되고 있었다. 수업 시연용 db/n8n은 더 이상 필요하지 않았지만 즉시 삭제하지 않고 Syncthing만 별도 Compose 프로젝트로 이전했다. 실제 확인 명령:

docker ps --filter 'name=syncthing'
docker inspect syncthing --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
docker inspect syncthing --format '{{json .Config.Labels}}'
cd "$HOME/automation"
docker compose config --services

이때 db, n8n, syncthing이 출력됐고 기존 구성 파일은 automation/docker-compose.yml이었다. 새로 설치하는 사람에게는 기존 시연 환경 정리 작업이 불필요하다. 그 경우 아래 최종 Compose 구성부터 시작한다.

3. 이전 전 백업 [실제 검증]​

기존 Syncthing 컨테이너의 설정 디렉터리와 기기 키/ID를 보존해야 했다. 실제로 수행한 백업 형태:

mkdir -p "$HOME/docker/syncthing"
cp -a "$HOME/automation/syncthing_config" \
"$HOME/docker/syncthing/config-backup"
cp -a "$HOME/automation/docker-compose.yml" \
"$HOME/docker/syncthing/old-compose-backup.yml"

주의: 이 백업은 그 당시 스냅샷이다. 이후 변경된 Garden 공유 정보는 자동 포함되지 않는다. 기존 automation/을 통째로 삭제하면 Syncthing이 참조하는 현재 설정까지 지워질 수 있다.

4. Syncthing 전용 Compose [실제 확인된 전환 설정]​

당시 작성한 ~/docker/syncthing/compose.yaml의 핵심 구조를 경로만 일반화한 예:

name: syncthing
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: farm-server
user: "1000:1000"
environment:
- PUID=1000
- PGID=1000
volumes:
- /home/<USER>/automation/syncthing_config:/var/syncthing/config
- /home/<USER>/Second_Brain:/var/syncthing/Second_Brain
- /mnt/c/works/abulafium/garden:/var/syncthing/garden
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
restart: always

<USER>는 자신의 WSL2 사용자로 치환한다. 위의 Second_Brain 마운트는 실제 전환 중 기존 파일 보호를 위해 남겨둔 경로이며, 신규 설치에는 불필요하다. 새로 시작하면 해당 줄을 삭제하고 별도 Syncthing 설정 디렉터리(예: ~/docker/syncthing/config)를 준비해 마운트한다. 설정 디렉터리 변경 시 기기 ID가 새로 생성될 수 있으므로 기존 설치는 절대로 임의로 바꾸지 않는다.

5. 기존 컨테이너에서 분리한 실제 순서 [실제 검증]​

docker compose -f "$HOME/docker/syncthing/compose.yaml" config --quiet
docker stop syncthing
docker rm syncthing
cd "$HOME/docker/syncthing"
docker compose up -d
docker compose ps

docker rm은 컨테이너 삭제이며 설정이 남는 호스트 바인드 마운트 데이터를 지운 것은 아니다. 그러나 Docker named volume·익명 볼륨·상대경로 설정은 환경에 따라 다르므로 실제 docker inspect 확인 없이 따라 하지 않는다. 이 이전 후 웹 UI에서 등록 장치와 기존 Second Brain이 남아 있는 것을 확인했다.

기존 automation/docker-compose.yml에 Syncthing 정의가 남아 있다면 이후 해당 프로젝트의 docker compose up -d로 같은 컨테이너 이름 및 포트 충돌이 날 수 있다. 구 파일 정리는 백업 후 별도 수행할 것. 현재 기록에서는 완료 여부 미확인.

6. PC에 Garden 폴더 등록 [실제 검증]​

Syncthing 관리 UI http://localhost:8384에서:

설정값
Folder LabelAbulafium Garden
Folder IDabulafium-garden
Folder Path/var/syncthing/garden
Folder TypeSend & Receive

PC에 먼저 등록하고 기존 문서를 점검한 다음 공유 대상 home-notebook에 보냈다. 기존 Second Brain 공유는 UI에서 제거했지만 실제 문서 디렉터리는 삭제하지 않았다.

7. Windows 노트북에서 공유 수락 [실제 검증]​

노트북은 Windows 직접 설치 Syncthing이었다. 요청받은 Folder ID abulafium-garden을 유지한 채 Folder Path를 이미 문서가 존재하는 C:\works\abulafium\garden으로 지정했다. 새로운 빈 Vault를 임의로 만들지 않았다. 기존 데이터는 양쪽에 있으므로 사전 백업이 필요하다. 초기 동기화 전 서로 다른 버전이 있는 경우 충돌·덮어쓰기 가능성을 점검한다.

8. .obsidian 설정은 공유, 작업 영역만 제외 [실제 검증]​

처음에는 .obsidian 전체를 제외할지 검토했지만 PC 간 플러그인·테마·설정을 일치시키고 싶어서 다음 한 파일만 제외했다.

Syncthing의 두 장치 각각 폴더 편집 → 무시 양식:

.obsidian/workspace.json

무시 규칙은 장치마다 설정해야 한다. 노트북에서는 폴더 생성 후 무시 양식을 편집할 수 있었다. Git의 **/.obsidian/ 제외 규칙과는 다르다. Mac 사용 시 플러그인 설정·플랫폼별 파일 호환성에 추가 점검이 필요하다.

9. 양방향 테스트 [실제 검증]​

노트북 → PC: Obsidian의 garden/inbox/sync-test.md에 텍스트를 입력하고, PC의 WSL2 Ubuntu에서 확인:

cat /mnt/c/works/abulafium/garden/inbox/sync-test.md

PC → 노트북: 농장 Ubuntu에서 새 파일을 생성하고 노트북 Obsidian에 나타나는지 확인:

echo "farm to notebook" > /mnt/c/works/abulafium/garden/inbox/farm-sync-test.md

두 방향 모두 성공했다. 즉, Git Push 없이 파일이 이동한다.

10. 실제 시행착오: 농장 → 노트북 전송이 40초 이상 걸림​

  • 증상: 어떤 파일은 곧바로 전송되고 어떤 파일은 약 40초 뒤에 보였다.
  • 환경: Windows C: → WSL2 /mnt/c → Docker의 Syncthing.
  • 당시 설정: 변경 항목 감시 ON, 완전 재탐색 간격 3600초.
  • 변경: PC에서 완전 재탐색 간격을 60초로 조정.
  • 결과: 양방향 동기화는 안정적으로 확인됐으나 즉시 감지의 일관성은 개선되지 않았다.
  • 원인 판단: 파일 시스템 이벤트가 중간 경계에서 전달되지 않는 것으로 추정한다. 로그 기반 확정 진단을 완료한 것은 아니다.

이후 별도 컨테이너 이동이나 Windows 네이티브 Syncthing 재구성은 하지 않고 60초 검사로 운영하기로 결정했다.

11. 완료 조건과 운영 주의​

  • 두 장치에서 Garden이 ‘최신 상태’로 표시
  • 양방향 새 파일 생성 검증
  • .obsidian/workspace.json 무시 규칙 양쪽 적용
  • .git 디렉터리 미공유
  • Git 자동 Pull·Push와 Syncthing이 동시 변경을 만들지 않도록 정책 수립
  • 중요한 폴더는 Syncthing 외에도 독립 백업 수행 (동기화는 백업이 아님)