파일 동기화 — Syncthing으로 Mac ↔ Windows 폴더 P2P 동기화
클라우드 없이 두 머신 간 폴더를 실시간 동기화. dotfiles·노트·프로젝트를 어디서든 같은 상태로.
Mac과 Windows를 양쪽에서 쓰는 사람은 결국 같은 질문에 마주친다 — "오늘 만든 그 파일, 다른 머신에는 어떻게 가져가지?" USB·Dropbox·iCloud·OneDrive·Git·SCP… 각각의 단점이 명확하다. 클라우드는 사이즈 한도와 프라이버시, Git은 바이너리·중간 결과물에 부적합, SCP는 자동화 부족.
Syncthing은 P2P + 오픈소스 + 무료로 이 문제를 해결한다. 중앙 서버 없이 두 머신이 직접 동기화. 인터넷이 닿지 않으면 LAN으로 fallback. 이 가이드는 Mac + Windows 11 동시 셋업과 실전 동기화 패턴까지.
TL;DR
- 양쪽 머신에 Syncthing 설치 — Mac은 brew, Windows는 winget
- 각 머신의 Device ID 교환 — 한 번만 등록
- 폴더 공유 — 한쪽이 폴더 광고 → 다른 쪽 수락
.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 무료 / 유료 2TB | Dropbox 서버 | $/월 | 무료 한도 작음 |
| Resilio Sync | P2P, 폐쇄소스 | 무제한 | 본인 머신 | $/월 (Pro) | Syncthing 상위호환 유료 |
| Git | 버전 관리 | repo 한도 | GitHub 등 | 무료 | 큰 바이너리·중간결과물 부적합 |
| rsync (수동) | 동기화 | 무제한 | 본인 머신 | 무료 | 자동화 안 됨 |
Syncthing 강점: 사이즈 한도 없음, 데이터가 본인 디스크에만 있음(프라이버시), 무료, 양쪽 OS 클라이언트 동등.
약점: 양쪽 머신이 동시에 켜져 있어야 함 (백업 용도엔 부적합), 충돌 해결은 수동, GUI가 다소 투박 (브라우저 기반).
2. 설치
Mac
brew install --cask syncthing
# 또는 백그라운드 서비스로 (로그인 시 자동 시작)
brew services start syncthingGUI: 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에서:
- 우측 상단 Actions → Show ID
- 긴 문자열 (
XXXXXXX-XXXXXXX-...) 복사
3.2 Mac에서 Windows 등록
- Mac Syncthing UI → Add Remote Device (우측 하단)
- Device ID 입력: Windows의 ID
- Device Name:
Win11-Desktop(편의상) - Save
3.3 Windows에서 수락
거의 동시에 Windows UI에 알림: Device <Mac ID> wants to connect → Add Device → 이름 MacBook-Pro → Save.
이 시점에 양쪽 UI에 서로가 Connected (녹색)로 표시.
둘 다 같은 LAN이면 5초 안에 연결. 인터넷 경유면 1~2분 (Discovery + Relay 거침).
4. 첫 폴더 공유
4.1 Mac → Windows 방향
Mac UI:
- Add Folder
- Folder Label:
notes(편의상) - Folder ID:
notes-mac-win(고유 식별자, 양쪽 동일해야 함) - Folder Path:
/Users/{me}/Documents/notes - Sharing 탭 →
Win11-Desktop체크 - Save
4.2 Windows에서 수락 + 경로 지정
Windows UI 알림: "MacBook-Pro wants to share folder 'notes-mac-win'" → Add
- Folder Path:
C:\Users\{me}\Documents\notes(Mac의 같은 폴더 구조 권장) - Save
4.3 결과
양쪽 폴더가 Up to Date (녹색)이 될 때까지 대기. 처음에는 모든 파일을 한쪽에서 다른 쪽으로 복사하므로 사이즈에 비례. 이후 변경된 파일만 즉시(보통 5초 안) 동기화.
5. .stignore — 무엇을 동기화하지 않을 것인가
가장 흔한 실수는 node_modules·.git·.env까지 동기화하는 것. 의존성은 머신마다 빌드해야 하고, Git 폴더는 동기화 중 손상 위험, .env는 시크릿. 모두 ignore.
5.1 템플릿 다운로드
개발 폴더용 .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 SHA2565.2 적용
- 동기화 폴더 루트에
.stignore파일 위치 - Syncthing UI → 해당 Folder → Edit → Ignore Patterns 탭 → Use .stignore 활성화
- Rescan 트리거 → 무시된 파일은 동기화 대상에서 즉시 제외
5.3 핵심 ignore 항목
| 패턴 | 이유 |
|---|---|
node_modules, .venv, target | 의존성 — 각 머신에서 빌드 |
.git | 손상 위험 + Git push로 별도 동기화 |
dist, build, .next | 빌드 산출물 — 재생성 가능 |
.env, .env.local, *.pem, id_* | 시크릿 — 절대 동기화 금지 |
.DS_Store, Thumbs.db | OS 메타 파일 |
*.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(다른 쪽 버전)
처리 절차
- 둘 다 열어서 diff 확인 (VS Code의 "Compare with Active" 또는
diff foo.md foo.sync-conflict-*.md) - 원하는 버전을
foo.md로 일원화 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에 모두 포함됨
검증 방법
양쪽 머신에서 다음 시나리오 통과:
- Mac에서
notes/test.md생성 → 10초 안에 Windows에 출현 - Windows에서
notes/test.md수정 → 10초 안에 Mac에 반영 - Mac에서
notes/test.md삭제 → 10초 안에 Windows에서 사라짐 - 양쪽 동시 수정 →
sync-conflict-...파일 생성 확인 (충돌 처리 7장 참조) 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자동 실행
시크릿이 실수로 동기화됨
- 즉시 양쪽 머신에서 해당 파일 삭제
- Syncthing은 휴지통 보낼 수 있음 (Folder → File Versioning)
- 시크릿 자체(API 키 등)는 회전 필수 — 한 번 다른 머신에 닿았다고 가정
.stignore에 패턴 추가해 재발 방지
참고
- Mac 초기 셋업 / Windows 초기 셋업 — Homebrew·winget 사전 조건
- Mac ↔ Windows 입력 공유 — 같은 듀얼-OS 환경의 자매편
- Syncthing 공식 문서 — Folder Types, Versioning, API
.stignore문법
변경 이력
- 2026-05-12: 첫 작성. 대안 비교 + 셋업(Mac+Win) + 5종 실전 패턴 + 충돌 처리 + 트러블슈팅 6종 +
.stignore템플릿 자산.