옵시디언(Obsidian)을 사용하다 보면 필연적으로 ‘기기 간 동기화’ 문제에 봉착하게 된다. 유료 서비스인 ‘Obsidian Sync’는 훌륭하지만 비용이 발생하고, iCloud나 구글 드라이브 같은 클라우드 스토리지는 리눅스 환경에서의 호환성 문제나 가끔 발생하는 충돌 이슈가 있다.
집이나 연구실에 **개인 워크스테이션(Linux Server)**이 있다면, 이를 중앙 Git 서버로 활용하여 데이터 주권을 100% 내가 가지는 동기화 환경을 구축할 수 있다.
이번 포스팅에서는 Git Bare Repository를 활용한 동기화 설정 방법과, 실제 진행 과정에서 겪었던 에러(Troubleshooting) 해결법, 그리고 자동 백업 스크립트까지 정리해 본다.
1. 전체 구조 및 준비물
- Server (중앙 저장소): Linux Workstation (Ubuntu)
- 역할: 데이터가 모이는 허브 (Bare Repository)
- 경로 예시:
/mnt/ssd/git/obsidian-vault.git
- Client (작업 기기): MacBook Air (macOS)
- 역할: 실제 옵시디언 필기 및 데이터 전송 (Push/Pull)
- 연결 방식: SSH 프로토콜
2. 서버 설정 (Linux Workstation)
워크스테이션은 우리가 흔히 작업하는 공간이 아니라, Git 데이터베이스 역할만 수행해야 하므로 --bare 옵션을 사용하여 저장소를 만든다.
# 1. 저장소 폴더 생성
mkdir -p ~/git/obsidian-vault.git
# 2. 폴더 이동 후 Bare 저장소 초기화
cd ~/git/obsidian-vault.git
git init --bare
Note: Bare Repository란? 작업 디렉토리(실제 파일) 없이 Git의 변경 이력(History)만 저장하는 저장소다. 서버용으로 가볍고 충돌 위험이 적다.
3. 클라이언트 설정 (MacBook)
이제 로컬의 옵시디언 볼트를 워크스테이션과 연결한다.
# 옵시디언 폴더로 이동
cd ~/Obsidian
# Git 초기화
git init
# 전체 파일 스테이징 및 첫 커밋 (중요!)
git add .
git commit -m "Initial commit"
# 브랜치명을 main으로 강제 설정 (master/main 혼동 방지)
git branch -M main
# 워크스테이션을 원격 저장소(origin)로 등록
# 형식: ssh://[계정]@[IP주소]:[경로]
git remote add origin ssh://userid@serverip/obsidian-vault.git
# 서버로 전송 (Push)
git push -u origin main
4. 트러블슈팅 (시행착오)
설정 과정에서 몇 가지 에러가 발생했는데, 해결 방법은 다음과 같다.
상황 1: src refspec main does not match any
- 원인:
git commit을 한 번도 하지 않은 상태에서push를 시도했거나, 로컬 브랜치 이름이master인데main으로 보내려 했을 때 발생한다. - 해결: 반드시
git commit을 먼저 수행하고,git branch -M main으로 브랜치 이름을 통일해 준다.
상황 2: fatal: remote origin already exists
- 원인: 이미
origin이라는 이름으로 주소가 등록되어 있는 경우다. - 해결:
remote add대신remote set-url을 사용한다.
git remote set-url origin ssh://계정@IP주소/경로
상황 3: 서버에서 git log 확인 시 에러
- 원인: 서버는 기본적으로
master브랜치를 찾는데, 클라이언트에서main으로 보냈기 때문에 HEAD가 갈 곳을 잃은 경우다. - 해결: 서버의 HEAD가
main을 가리키도록 수정한다. (워크스테이션 터미널에서 실행)
git symbolic-ref HEAD refs/heads/main
5. 데이터 검증 (서버 확인)
서버 저장소가 Bare 모드라서 ls를 입력해도 파일이 보이지 않는다. 데이터가 잘 들어왔는지 확인하려면 다음 명령어를 사용한다.
# 저장된 파일 리스트 확인
git ls-tree -r main --name-only
# 최근 변경 내역 통계 확인
git log -1 --stat
6. 자동화 스크립트 작성
매번 터미널을 열어 git add, commit, push를 입력하는 것은 비효율적이다. 쉘 스크립트로 자동화했다.
(1) 클라이언트용: 원클릭 업로드 (sync_obsidian.sh)
맥북에서 실행하면 변경 사항을 감지하여 자동으로 워크스테이션에 백업한다.
#!/bin/bash
# 파일 위치: ~/sync_obsidian.sh
# 본인 경로로 수정
VAULT_PATH="/Obsidian"
cd "$VAULT_PATH" || exit 1
if [ -n "$(git status --porcelain)" ]; then
echo "[Info] 변경 사항 감지. 동기화 시작..."
git add .
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
git commit -m "Laptop Sync: $TIMESTAMP"
echo "[Push] 워크스테이션으로 전송 중..."
git push origin main
echo "[Success] 완료: $TIMESTAMP"
else
echo "[Info] 변경 사항 없음."
fi
(2) 서버용: 백업 파일 추출 (deploy.sh)
워크스테이션에서 백업된 내용을 실제 파일 형태로 꺼내보고 싶을 때 사용한다. git archive를 사용하면 .git 폴더 없이 깔끔하게 파일만 추출된다.
#!/bin/bash
# 파일 위치: ~/deploy_obsidian.sh
GIT_REPO="~/git/obsidian-vault.git"
DEPLOY_DIR="~/obsidian_view"
mkdir -p "$DEPLOY_DIR"
# main 브랜치의 내용을 타겟 폴더에 압축 해제
git --git-dir="$GIT_REPO" archive main | tar -x -C "$DEPLOY_DIR"
echo "배포 완료: $DEPLOY_DIR"
7. 마무리
이제 터미널에서 obsync (alias 설정) 명령어 하나만 입력하면 내 모든 연구 노트와 아이디어가 안전한 개인 서버로 백업된다.
추가 팁:
- SSH Key 설정: 비밀번호 입력 없이 스크립트를 실행하려면
ssh-keygen과ssh-copy-id를 통해 키 기반 인증을 설정하는 것이 필수적이다. - .gitignore 설정:
.obsidian/workspace같은 설정 파일은 기기마다 화면 배치가 다르므로 동기화에서 제외하는 것이 좋다.
이로써 데이터 프라이버시를 지키면서도 강력한 버전 관리 기능을 가진 나만의 옵시디언 클라우드가 완성되었다.