작동 방식
Devsync의 동작 원리와 내부 구조
Devsync의 핵심 철학은 하나예요: 진실의 원천은 항상 로컬 파일이에요. 저장소는 동기화 사본일 뿐, 정본(canonical version)이 아니에요.
이 문서에서는 개념 모델, 데이터 흐름, 내부 구조를 설명해요.
개념 모델
섹션 제목: “개념 모델”대부분의 dotfile 도구는 저장소를 정본으로 취급해요. 도구를 통해 파일을 편집하면, 도구가 저장소와 로컬 파일 시스템 모두에 반영해요.
Devsync는 반대예요. ~/.zshrc를 그냥 편집기로 열어서 수정하면 돼요 — 특별한 명령이 필요 없어요. 동기화할 준비가 되면 devsync push를 실행하면 현재 로컬 파일을 읽어 저장소에 미러링해요.
편집기 → 로컬 파일 → devsync push → sync 저장소 → git push → 원격 ↓다른 기기 ← devsync pull ← sync 저장소 ← git pull ← 원격이 방식의 장점은 파일 편집 방식을 전혀 바꾸지 않아도 된다는 거예요. 트레이드오프는 저장소 상태가 마지막 push를 기준으로 한다는 점이에요 — 현재 로컬 파일의 최신 상태가 아닐 수 있어요.
데이터 흐름
섹션 제목: “데이터 흐름”Push
섹션 제목: “Push”devsync push를 실행하면 다음 순서로 동작해요.
manifest.json을 읽어 활성 프로파일을 결정해요- 각 추적 경로의 로컬 파일 트리를 탐색해요
- 로컬 파일과 sync 디렉터리의 기존 파일을 비교해요
secret모드 파일을 age로 암호화해요- 미러링된 파일을 sync 디렉터리에 저장해요
- 변경 사항을 출력해요
Pull
섹션 제목: “Pull”devsync pull을 실행하면 다음 순서로 동작해요.
manifest.json을 읽어 활성 프로파일을 결정해요- sync 디렉터리의 파일을 읽어요
secret파일을 age 개인키로 복호화해요- 필요한 상위 디렉터리를 생성하고 파일을 로컬 경로에 저장해요
- 파일 권한을 적용해요
- 변경 사항을 출력해요
디렉터리 구조
섹션 제목: “디렉터리 구조”Devsync의 모든 상태는 ~/.config/devsync/ 아래에 저장돼요.
디렉터리~/.config/devsync/
디렉터리sync/ Git 저장소 (동기화된 파일이 저장되는 곳)
디렉터리.git/
- …
- manifest.json 설정 및 추적 레지스트리
디렉터리default/ 기본(전역) 프로파일 파일
- .gitconfig ~/.gitconfig 미러
디렉터리.config/
디렉터리nvim/ ~/.config/nvim 미러
- …
디렉터리work/ “work” 프로파일 파일
- …
디렉터리age/
- keys.txt age 개인키 (시크릿 파일 복호화에 사용)
- settings.json 전역 설정 (활성 프로파일 등)
manifest.json
섹션 제목: “manifest.json”매니페스트는 중앙 레지스트리예요. 추적 경로마다 소스 경로, 동기화 모드, 프로파일 지정 정보가 담긴 항목이 들어있어요.
{ "entries": [ { "localPath": ".gitconfig", "mode": "normal", "profiles": [] }, { "localPath": ".ssh/config", "mode": "secret", "profiles": [] }, { "localPath": { "default": ".config/nvim", "win": "AppData/Local/nvim" }, "mode": "normal", "profiles": ["linux", "mac"] } ]}localPath의 경로는 홈 디렉터리(~)를 기준으로 한 상대 경로예요.
stow, chezmoi와의 차이
섹션 제목: “stow, chezmoi와의 차이”| Devsync | chezmoi | stow | |
|---|---|---|---|
| 진실의 원천 | 로컬 파일 | 저장소 | 저장소 |
| 파일 편집 방식 | 파일 직접 열기 | chezmoi edit | 저장소에서 편집 |
| 홈 디렉터리 | 변경 없음 | 변경 없음 | 심볼릭 링크 |
| 템플릿 지원 | 없음 | 있음 | 없음 |
| 기기별 내용 분기 | 프로파일 / 플랫폼 경로 | 템플릿 | 오버레이 |
Devsync는 기존 편집 흐름을 최대한 유지하는 것을 우선으로 해요. 이미 편한 설정이 있고, 그것을 여러 기기에 그대로 복제하고 싶다면 Devsync가 잘 맞아요.