Obsidian 동기화의 완성: Syncthing을 활용한 P2P 구축 가이드

옵시디언(Obsidian)을 여러 기기에서 사용하다 보면 가장 먼저 마주하는 난관이 바로 **’동기화(Sync)’**입니다. 공식 유료 서비스인 Obsidian Sync나 iCloud, Google Drive 같은 클라우드 방식이 존재하지만, 보안과 비용, 그리고 제어권 측면에서 아쉬움을 느끼는 사용자들에게 Syncthing은 가장 완벽한 대안이 될 수 있습니다.

1. 왜 Syncthing인가?

Syncthing은 중앙 서버를 거치지 않고 기기 간에 직접 데이터를 교환하는 오픈소스 P2P 동기화 도구입니다. 이는 데이터가 제3자의 서버에 저장되지 않아 보안성이 뛰어나며, 로컬 네트워크를 활용할 수 있어 속도 또한 매우 빠릅니다.

주요 서비스 비교

비교 항목클라우드 (iCloud/Drive)Obsidian Sync (공식)Syncthing
작동 원리중앙 서버 저장 후 동기화전용 서버 경유기기 간 직접 전송 (P2P)
비용용량에 따른 월 구독료월 $4 ~ $10무료 (Open Source)
데이터 소유권서비스 제공자에게 의존암호화되나 서버에 저장오직 본인 기기에만 저장
네트워크인터넷 연결 필수인터넷 연결 필수로컬 네트워크(Wi-Fi) 활용 가능

2. 동기화 프로세스 및 아키텍처

Syncthing의 핵심은 기기 간의 **’Handshake’**와 **’Delta Update’**입니다. 전체 파일을 매번 전송하는 대신, 변경된 블록(Block) 데이터만 선별적으로 동기화하여 효율성을 극대화합니다.

  1. ID 교환: 각 기기의 고유 ID를 서로 등록하여 신뢰 관계 형성.
  2. 폴더 공유: 동기화할 보관소(Vault) 경로 지정 및 권한 설정.
  3. 실시간 모니터링: 파일 변경 감지 시 즉각적으로 연결된 기기에 전파.

3. 단계별 설정 방법

Step 1. 기기 상호 등록 (Device Pairing)

먼저 동기화할 두 기기(예: PC와 안드로이드 스마트폰)를 연결해야 합니다. 각 기기는 고유한 Device ID를 가지고 있습니다.

  • PC 환경: 웹 GUI를 열고 내 ID 보기를 통해 QR 코드 또는 문자열 ID를 확인합니다.
  • 모바일 환경: Syncthing 앱에서 기기 추가를 선택한 후 PC의 ID를 스캔합니다.
  • 승인: PC 측에서 연결 요청 팝업이 뜨면 승인 버튼을 눌러 페어링을 완료합니다.

Step 2. 보관소(Vault) 폴더 공유

연결된 기기 간에 실제 Obsidian 데이터가 담긴 폴더를 공유하는 단계입니다.

  • 폴더 ID 설정: 두 기기가 동일한 폴더임을 인식할 수 있도록 고유한 폴더 ID를 지정합니다.
  • 경로 지정: 각 기기의 로컬 환경에 맞는 실제 경로를 선택합니다.
  • 전송 모드: 일반적으로 양방향 수정을 위해 송수신(Send & Receive) 모드를 사용합니다.

Step 3. 안정적인 동기화를 위한 최적화 (Android)

안드로이드 환경은 OS의 배터리 최적화 기능이 동기화를 방해할 수 있습니다. 따라서 Syncthing 앱에 대한 배터리 최적화를 해제하고, 필요한 경우 Wi-Fi에서만 작동하도록 설정하여 데이터 소모를 줄일 수 있습니다.

4. 고급 활용 팁 (Technical Tips)

.stignore 파일을 통한 충돌 방지

Obsidian의 설정 파일 중 일부(.obsidian/workspace.json 등)는 기기마다 다른 화면 레이아웃 정보를 담고 있어 충돌을 일으키기 쉽습니다. 보관소 루트에 .stignore 파일을 생성하고 아래 내용을 추가하는 것을 권장합니다.

Plaintext

// .stignore 예시
.obsidian/workspace.json
.obsidian/graph.json

② 데이터 보호를 위한 버전 관리

Syncthing의 ‘파일 버전 관리’ 기능을 활성화하면, 실수로 파일을 삭제하거나 덮어썼을 때 이전 상태로 복구할 수 있는 휴지통 기능을 로컬에 구축할 수 있습니다.

③ 원격 동기화(Relay) 설정

같은 Wi-Fi 환경이 아닌 외부망에서도 동기화가 필요하다면, UPnP를 활성화하거나 **포트 포워딩(22000번)**을 설정하여 릴레이 서버를 거치지 않는 다이렉트 연결 속도를 확보할 수 있습니다.


결론

Syncthing을 이용한 Obsidian 동기화는 초기 설정이 다소 복잡해 보일 수 있으나, 한 번 구축하면 비용, 속도, 개인정보 보호라는 세 마리 토끼를 모두 잡을 수 있는 최상의 솔루션입니다. 나만의 프라이빗한 지식 저장소를 구축하고 싶은 사용자라면 반드시 시도해 보시길 권장합니다.

ubuntu 22.04 docker latest 버전 설치 하는 방법

Ubuntu 22.04에 Docker 엔진을 설치해 봅시다. 이전 버전들과 다른 배포판에서도 설치 방법은 크게 다르지 않습니다.
Docker 엔진은 stable 버전과 test버전이 있는데 저는 얼리(?)어댑터 성향이 있지만 굳이 어떤 오류가 있을지 알 수 없는 개발 중인 테스트 버전은 쓰지 않겠습니다.

도커 공식 홈페이지에서 아래의 우분투 64bit 버전이 필요하다고 합니다. (다들 사용하고 있죠? 🙄)

  • Ubuntu Mantic 23.10
  • Ubuntu Lunar 23.04
  • Ubuntu Jammy 22.04 (LTS)
  • Ubuntu Focal 20.04 (LTS)
# Add Docker's official GPG key:
sudo apt update

sudo apt install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

우선 야무지게 apt 저장소를 업데이트 할 준비를 해봅시다. 우선 apt update를 한번 해주고
도커 설치에 필요한 레포지토리를 등록하는데 필요한 패키지들을 설치해주고 차례대로 진행해서 GPG키를 받아옵니다

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

GPG키를 받아왔으면 키를 이용(?)해서 레포지토리를 등록합니다. 이렇게 하면 도커에서 제공하는 최신(?) 도커엔진을 받아올 수가 있습니다.

 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose

이제 본격적으로 도커를 설치해봅시다. 저는 docker-compose를 좋아하니깐 함께 설치하겠습니다.

설치가 모두 끝났으면 커맨드창에 docker –version 이라고 입력해 봅시다.

이렇게 나오면 성공!!

이제 도커로 뭘 해보려고 하면 root 계정이 아닌 이상 자꾸 권한이 없다고 나옵니다. 한글자라도 타이핑을 줄이는 것이 리눅서의 덕목이니 sudo를 붙이지 않고 docker를 실행해 봅시다

sudo usermod -aG docker $USER

이렇게 입력하고 패스워드를 한번만 입력하면 끝입니다. 명령어 실행 후 반드시 로그아웃 후 다시 로그인 해줍니다.
user modfies -append -Group docker $USER 의 줄임입니다. 유저를 수정하는 명령으로 docker 그룹에 $USER(현재 로그인 되어있는 유저)를 추가(append)하라 하는 정도로 알고 계시면 됩니다. 현재 내가 속하지 않았던 group이었던 docker 그룹에 매번 sudo로 인증(?)을 받고 그룹에 접근했어야 되었는데 이제 그룹에 가입해 버렸기 때문에 따로 인증을 받지 않아도 그룹활동(?)을 할 수 있게 되었습니다.

이상으로 도커 최신버전 설치에 대해 알아보았습니다.

ubuntu 22.04 설치 후 제일 먼저 하는 일

APT로 필요한(?) 패키지들 설치하기 – zsh, oh-my-zsh 설치

몇 해 전 우분투로 시작해서 아는 형님의 꼬임으로 민트, 아치, 만자로, 엔데버, 센트… 아주 그냥 의미없이 비주기적으로 배포판만 설치하고 있습니다. 처음엔 아주 어색했지만 이젠 어디에 무엇을 설치하던 공통적으로 배포판 설치 후 마음의 평온을 찾아주는 패키지들을 정리(?)해 보았습니다. 제가 쓸려고 만든 블로그이지만 혹시 궁금한 것이 있으면 성실히 답변 드리도록 하겠습니다.

sudo apt install update && sudo apt upgrade -y && sudo apt autoremove

우선 배포판 설치가 금방 끝났으면 제일 먼저 역시 update를 해줍니다.

sudo apt install curl wget dpkg git zip net-tools \
  btop neofetch cpufetch mlocate zsh \
  nnn exa duf tldr bat neovim

배포판 설치 다음은 필요한(?) 패키지들을 설치해 줄 거에요. 설치한 패키지들이 어디에 쓰이는 지는 따로 포스팅 하겠습니다. 언젠가 어디선가 반드시(?) 필요한 패키지들이니 우선 무지성으로 설치해 줍시다.

패키지 설치가 끝났으면 oh-my-zsh를 설치하고 주로 사용하는 powerlevel10k 테마를 적용 후 각종 alias 설정까지 마치면 리눅스를 쓸 준비(?)가 될 것입니다. 플러그인은 syntax-highlighting 과 autosuggestions 두개만 우선 설치하겠습니다. (사실 나머지는 뭐가 좋은게 있는지 잘 모릅니다 😇) 플로그인이나 패키지들을 하나하나 설치하는 맛도 있지만 vi ~/.zshrc와 source 명령어는 가능한한 적게 치기 위해 우선 모두 준비를 해두고 설정은 마지막에 한번에 하도록 하겠습니다.

▶️ oh-my-zsh는 zsh에 테마나 플러그인등을 사용하기 위한 프레임워크입니다. 이게 없으면 그냥 bash를 쓰는 것도 나쁘지 않습니다.
▶️ 설치는 wget으로 설치 파일을 다운로드 받아서 사용하는 방식입니다. 이후 업데이트가 있을 때에는 로그인 할 때 업데이트 할 것인지를 물어보니 자연스럽게 [엔터]로 진행 하시면 됩니다.
▶️ powerlevel10k 테마는 개인적으로 좋아하는 테마입니다. 혹시 다른 테마가 궁금 하시면 여기로(Themes · ohmyzsh/ohmyzsh Wiki · GitHub) 가셔서 구경하시고 맘에 드는 것으로 설치하셔서 설정하시면 됩니다.

# oh-my-zsh 설치
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# powerlevel10k 테마 설치
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k

# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

모두 다운로드 받아버립시다!! (github 만세!!!)

nvim ~/.zshrc

설정파일(.zshrc)을 조져봅시다. 저는 nvim을 좋아해서 nvim을 썼습니다.

.zshrc 전문을 다 보여 드리고 싶지만 주석 부분은 삭제하고 설정 부분만 쓰겠습니다. 필요하신 분은 그냥 다 지우고 복사해서 쓰셔도 됩니다. (수정한 부분은 하이라이트해 두었습니다)

# powerlevel10k를 잘 설치하면 나오는 것
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

export ZSH="$HOME/.oh-my-zsh"

# 테마의 경로를 입력해 줍니다
ZSH_THEME="powerlevel10k/powerlevel10k"

# 플러그인도 추가해 줍니다
plugins=(
  git
  zsh-syntax-highlighting
  zsh-autosuggestions
)

source $ZSH/oh-my-zsh.sh

# alias 명령어 입니다 필요한 부분만 추가해 줍시다
alias ls="exa"
alias ll="exa -lhg -F"
alias lt="exa --tree"
alias cc="clear"
alias vim="nvim"
alias vi="nvim"
alias uu="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y"
alias wt="curl wttr.in/busan\?lang=ko"
alias cat="batcat"
alias man="tldr"

# sudo vi 를 사용하기 위한 함수
function sudo() {
  if [[ $1 == "vi" ]]; then
    command sudo nvim "${@:2}"
  else
    command sudo "$@"
  fi
}

# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh

.zshrc 파일을 적용하기 위한 준비가 끝났습니다.

다 하셨으면 :wq 로 저장하고 나오시면 됩니다. (복붙하지 않으셨다면 오타에 주의합시다)

source ~/.zshrc

저장하고 나와도 이걸 해주기 전엔 이전과 같습니다. 왜냐하면 source 명령어로 설정 값을 zsh에 적용해줘야 하기 때문이죠. source명령어가 귀찮다 하시는 분은 logout 했다가 다시 로그인 하셔도 되고, 혹시 시간이 많으시면 재부팅을 하셔도 됩니다. 돈이 많으시다면 저한테 메로나 하나만…

모든 것이 한번에 적용 되었습니다. 감격스럽네요
ls 명령어도 ll 명령어도 lt 명령어도 한번 입력해보세요 🙂 아래처럼 아름(?)답게 나오면 성공입니다.

출처: 내컴퓨터, 해내고야 말았지 않겠습니까?

이후 포스팅은 두번째, 세번째 하는 일들도 준비해보겠습니다. 🙏

cheapest tech log.