devAlice
← Multi-OS

파일 동기화 — Syncthing으로 Mac ↔ Windows 폴더 P2P 동기화

클라우드 없이 두 머신 간 폴더를 실시간 동기화. dotfiles·노트·프로젝트를 어디서든 같은 상태로.

Mac과 Windows를 양쪽에서 쓰는 사람은 결국 같은 질문에 마주친다 — "오늘 만든 그 파일, 다른 머신에는 어떻게 가져가지?" USB·Dropbox·iCloud·OneDrive·Git·SCP… 각각의 단점이 명확하다. 클라우드는 사이즈 한도와 프라이버시, Git은 바이너리·중간 결과물에 부적합, SCP는 자동화 부족.

SyncthingP2P + 오픈소스 + 무료로 이 문제를 해결한다. 중앙 서버 없이 두 머신이 직접 동기화. 인터넷이 닿지 않으면 LAN으로 fallback. 이 가이드는 Mac + Windows 11 동시 셋업과 실전 동기화 패턴까지.

TL;DR

  1. 양쪽 머신에 Syncthing 설치 — Mac은 brew, Windows는 winget
  2. 각 머신의 Device ID 교환 — 한 번만 등록
  3. 폴더 공유 — 한쪽이 폴더 광고 → 다른 쪽 수락
  4. .stignore로 의존성·시크릿 제외 — node_modules, .env 절대 동기화 금지

사전 조건

  • Mac: macOS 12+ (Homebrew 설치) — Mac 초기 셋업
  • Windows: Windows 10/11 (winget 사용 가능) — Windows 초기 셋업
  • 양쪽 머신 모두 같은 LAN에 있을 때 가장 빠름 (다른 네트워크여도 동작은 함, 단 인터넷 경유)
  • 양쪽 머신 모두 켜져 있어야 동기화 (한쪽 잠자기 시 깨어날 때 동기화)

1. 왜 Syncthing인가 — 대안 비교

도구모델사이즈 한도데이터 위치비용평가
Syncthing (선택)P2P, 오픈소스디스크만본인 머신무료M0~M2 권장
iCloud Drive클라우드5GB 무료 / 유료 200GB~Apple 서버$/월Mac만, Win 클라이언트 제한적
OneDrive클라우드5GB 무료 / 유료 100GB~MS 서버$/월Win 친화, Mac 동작은 함
Dropbox클라우드2GB 무료 / 유료 2TBDropbox 서버$/월무료 한도 작음
Resilio SyncP2P, 폐쇄소스무제한본인 머신$/월 (Pro)Syncthing 상위호환 유료
Git버전 관리repo 한도GitHub 등무료큰 바이너리·중간결과물 부적합
rsync (수동)동기화무제한본인 머신무료자동화 안 됨

Syncthing 강점: 사이즈 한도 없음, 데이터가 본인 디스크에만 있음(프라이버시), 무료, 양쪽 OS 클라이언트 동등.

약점: 양쪽 머신이 동시에 켜져 있어야 함 (백업 용도엔 부적합), 충돌 해결은 수동, GUI가 다소 투박 (브라우저 기반).

2. 설치

Mac

brew install --cask syncthing
# 또는 백그라운드 서비스로 (로그인 시 자동 시작)
brew services start syncthing

GUI: http://127.0.0.1:8384 — 브라우저로 열리는 관리 UI.

Windows 11

# winget 사용 (관리자 PowerShell 불요)
winget install -e --id Syncthing.Syncthing

또는 Syncthing Windows Setup 인스톨러 (트레이 아이콘·시작 시 자동 실행 포함).

설치 후 트레이 아이콘 우클릭 → "Open" 으로 GUI 열기 (http://127.0.0.1:8384).

Mac은 GUI 자동 오픈, Windows는 트레이 아이콘 통해 오픈. 양쪽 모두 같은 웹 UI.

3. 첫 페어링 — 두 머신 연결

3.1 각 머신의 Device ID 확인

양쪽 머신 모두 Syncthing UI에서:

  1. 우측 상단 ActionsShow ID
  2. 긴 문자열 (XXXXXXX-XXXXXXX-...) 복사

3.2 Mac에서 Windows 등록

  1. Mac Syncthing UI → Add Remote Device (우측 하단)
  2. Device ID 입력: Windows의 ID
  3. Device Name: Win11-Desktop (편의상)
  4. Save

3.3 Windows에서 수락

거의 동시에 Windows UI에 알림: Device <Mac ID> wants to connectAdd Device → 이름 MacBook-Pro → Save.

이 시점에 양쪽 UI에 서로가 Connected (녹색)로 표시.

둘 다 같은 LAN이면 5초 안에 연결. 인터넷 경유면 1~2분 (Discovery + Relay 거침).

4. 첫 폴더 공유

4.1 Mac → Windows 방향

Mac UI:

  1. Add Folder
  2. Folder Label: notes (편의상)
  3. Folder ID: notes-mac-win (고유 식별자, 양쪽 동일해야 함)
  4. Folder Path: /Users/{me}/Documents/notes
  5. Sharing 탭 → Win11-Desktop 체크
  6. Save

4.2 Windows에서 수락 + 경로 지정

Windows UI 알림: "MacBook-Pro wants to share folder 'notes-mac-win'"Add

  1. Folder Path: C:\Users\{me}\Documents\notes (Mac의 같은 폴더 구조 권장)
  2. Save

4.3 결과

양쪽 폴더가 Up to Date (녹색)이 될 때까지 대기. 처음에는 모든 파일을 한쪽에서 다른 쪽으로 복사하므로 사이즈에 비례. 이후 변경된 파일만 즉시(보통 5초 안) 동기화.

5. .stignore — 무엇을 동기화하지 않을 것인가

가장 흔한 실수는 node_modules·.git·.env까지 동기화하는 것. 의존성은 머신마다 빌드해야 하고, Git 폴더는 동기화 중 손상 위험, .env는 시크릿. 모두 ignore.

5.1 템플릿 다운로드

개발 폴더용 .stignore 템플릿:

.stignore
# Mac/Linux
curl -fsSL https://devalice.jaceclub.com/assets/multi-os/file-sync/stignore-dev.txt -o /path/to/folder/.stignore
shasum -a 256 /path/to/folder/.stignore
# 기대값: f003177e7026492848825e42c4b4845d1c68f787b923ce44854cb47e9c859827
# Windows PowerShell
Invoke-WebRequest -Uri https://devalice.jaceclub.com/assets/multi-os/file-sync/stignore-dev.txt -OutFile C:\path\to\folder\.stignore
Get-FileHash C:\path\to\folder\.stignore -Algorithm SHA256

5.2 적용

  1. 동기화 폴더 루트에 .stignore 파일 위치
  2. Syncthing UI → 해당 Folder → EditIgnore Patterns 탭 → Use .stignore 활성화
  3. Rescan 트리거 → 무시된 파일은 동기화 대상에서 즉시 제외

5.3 핵심 ignore 항목

패턴이유
node_modules, .venv, target의존성 — 각 머신에서 빌드
.git손상 위험 + Git push로 별도 동기화
dist, build, .next빌드 산출물 — 재생성 가능
.env, .env.local, *.pem, id_*시크릿 — 절대 동기화 금지
.DS_Store, Thumbs.dbOS 메타 파일
*.log, tmp로그·임시

6. 실전 동기화 패턴

6.1 dotfiles 동기화

홈 디렉토리 전체는 동기화 NG (시크릿 위험). 별도 ~/dotfiles/ 폴더에 모아두고 심볼릭 링크.

~/dotfiles/
├── .gitconfig
├── .zshrc
├── .vimrc
└── .tmux.conf
# Mac/Linux
ln -s ~/dotfiles/.zshrc ~/.zshrc
ln -s ~/dotfiles/.gitconfig ~/.gitconfig
# Windows — PowerShell profile은 별도 위치
ln -s C:\Users\me\dotfiles\Microsoft.PowerShell_profile.ps1 $PROFILE

~/dotfiles/ 폴더를 Syncthing으로 양 머신에 공유. OS별 분기는 폴더 분할(dotfiles/common, dotfiles/mac, dotfiles/windows)로 처리.

6.2 노트 동기화

Obsidian / Logseq 등의 노트 vault 폴더를 그대로 공유. iCloud·OneDrive보다 충돌 적음 (Syncthing은 파일 단위 충돌만, 라인 충돌 X — 그래도 동시 편집은 조심).

6.3 프로젝트 소스 동기화 (선택)

원칙: Git이 가능하면 Git을 우선. Syncthing은 로컬에서 직접 동기화가 필요한 부수 파일 (스크래치, 환경별 설정, 실험 노트)에만 적용.

만약 그래도 소스 폴더 자체를 동기화한다면 .stignore.git 반드시 포함. Git 폴더가 동기화 중간에 잡히면 reflog·index 손상 위험.

6.4 Send Only / Receive Only

폴더 유형 (Folder → Edit → Folder Type):

  • Send & Receive (기본) — 양방향
  • Send Only — 이 머신이 마스터. 받는 쪽 변경은 무시 + 거부
  • Receive Only — 이 머신은 받기만. 로컬 변경은 동기화 안 됨

백업 받는 머신은 Receive Only로 두면 의도치 않은 양방향 덮어쓰기 방지. 단 진짜 백업은 별도 도구(restic, Time Machine 등)와 병행.

7. 충돌 처리

동시에 양쪽에서 같은 파일을 수정하면 Syncthing은 충돌 파일을 자동 생성:

  • foo.md (마지막 사용된 버전)
  • foo.sync-conflict-20260512-153012-DEVICE.md (다른 쪽 버전)

처리 절차

  1. 둘 다 열어서 diff 확인 (VS Code의 "Compare with Active" 또는 diff foo.md foo.sync-conflict-*.md)
  2. 원하는 버전을 foo.md로 일원화
  3. sync-conflict 파일 삭제

충돌이 자주 나면 같은 폴더에 두 머신이 동시 작업하는 패턴. 노트의 경우 머신별 서브폴더(notes/mac/, notes/win/)로 분리해두면 충돌 방지.

8. 보안

디바이스 인증

  • Device ID는 공개 키 해시 (TLS). 다른 머신이 위장 불가
  • 새 디바이스 연결 요청은 양쪽 모두 명시적 승인 필요

데이터 전송

  • 모든 트래픽 TLS 1.2+ 암호화
  • LAN 직접 / 인터넷 경유 시 Relay 서버(공개) — Relay는 암호문만 중계

권장 설정

UI → Settings → GUI Authentication:

  • GUI Username + GUI Password 설정 (특히 노트북에서 외부 네트워크 자주 사용 시)
  • 이게 없으면 같은 LAN의 다른 사용자가 http://your-ip:8384로 접근 가능

UI → Settings → Connections:

  • Listen Address: 기본 default (충분)
  • NAT Traversal ✅ (방화벽 너머 자동 hole-punching)

.stignore 시크릿

  • .env, *.pem, id_*, .aws/credentials 등은 무조건 ignore
  • 본 가이드 자산 stignore-dev.txt에 모두 포함됨

검증 방법

양쪽 머신에서 다음 시나리오 통과:

  1. Mac에서 notes/test.md 생성 → 10초 안에 Windows에 출현
  2. Windows에서 notes/test.md 수정 → 10초 안에 Mac에 반영
  3. Mac에서 notes/test.md 삭제 → 10초 안에 Windows에서 사라짐
  4. 양쪽 동시 수정 → sync-conflict-... 파일 생성 확인 (충돌 처리 7장 참조)
  5. node_modules·.env 등 .stignore 항목이 한쪽에 만들어져도 다른 쪽에 안 감

트러블슈팅

두 머신이 서로 보이지 않음

  • 양쪽 모두 같은 LAN인지 확인 (인터넷 경유면 5분까지 기다림)
  • 방화벽에서 Syncthing의 22000 포트 허용
  • Mac: System Settings → Network → Firewall 끄거나 Syncthing 허용
  • Windows: PowerShell Get-NetFirewallApplicationFilter | ? { $_.Program -match 'syncthing' } 로 확인

동기화가 느림

  • 거대 폴더(수만 파일)는 첫 스캔이 오래 걸린다 — Folder → Edit → Rescan Interval 늘리기
  • 인터넷 경유 시 Relay 서버 거치면 속도 ↓. 가능하면 같은 LAN으로
  • 디스크 I/O 병목 — SSD 권장

"Out of Sync" 상태가 안 풀림

  • Folder → Override Changes (Send & Receive 모드에서) — 현재 머신을 마스터로 강제
  • 또는 Revert Local Changes (Receive 모드)
  • 둘 다 데이터 손실 위험. 백업 후 진행

.stignore가 적용 안 됨

  • Folder → Edit → Ignore Patterns 탭에 Use .stignore 체크 여부 확인
  • .stignore 파일이 폴더 루트에 있는지 (서브폴더 아님)
  • Rescan 트리거 (Folder → ⋮ → Rescan)

Windows에서 트레이 아이콘이 안 보임

  • winget install로 깐 경우 자동 시작이 아닐 수 있음
  • Syncthing Windows Setup 인스톨러는 트레이 + 자동 시작 포함
  • 또는 작업 스케줄러로 로그온 시 syncthing.exe --no-console --no-browser 자동 실행

시크릿이 실수로 동기화됨

  1. 즉시 양쪽 머신에서 해당 파일 삭제
  2. Syncthing은 휴지통 보낼 수 있음 (Folder → File Versioning)
  3. 시크릿 자체(API 키 등)는 회전 필수 — 한 번 다른 머신에 닿았다고 가정
  4. .stignore에 패턴 추가해 재발 방지

참고

변경 이력

  • 2026-05-12: 첫 작성. 대안 비교 + 셋업(Mac+Win) + 5종 실전 패턴 + 충돌 처리 + 트러블슈팅 6종 + .stignore 템플릿 자산.

댓글