프로젝트로 돌아가기
Obsidian 활용 가이드30 min

옵시디언 자체 동기화 서버 구축 가이드

CouchDB + Caddy + Self-hosted LiveSync로 매월 구독료 없이 본인 서버에 옵시디언 동기화 환경을 30분 만에 구축하는 방법. SSL 자동화부터 모바일 연결, 트러블슈팅까지 한 번에 정리합니다.

왜 자체 구축인가?

옵시디언은 본질적으로 로컬 마크다운 파일을 다루는 도구다. 그런데 PC와 모바일을 오가며 쓰기 시작하는 순간, "어떻게 동기화할 것인가"라는 문제가 생긴다. 공식 Obsidian Sync는 깔끔하지만 매월 $5~$10이 나가고, 한때 인기였던 Remotely Save는 2025년 7월 유료화 예정이라 무료 대안의 자리도 좁아졌다.

이 글에서 만드는 환경은 다르다. 본인의 PC나 NAS에 CouchDB + Caddy 조합으로 동기화 서버를 직접 띄우고, 옵시디언 커뮤니티 플러그인 Self-hosted LiveSync로 연결한다. 데이터는 외부 클라우드를 거치지 않고 본인 서버에만 머문다. 비용은 0원이다.

Obsidian Sync 공식

월 $5~$10 · 1~10GB 제한 · 외부 서버 경유

Remotely Save

2025.07 유료화 예정 · 클라우드 의존

자체 구축 (이 가이드)

무료 · 무제한 · 완전 통제 · E2E 암호화


시스템 구성도

전체 구조는 단순하다. 옵시디언 클라이언트(PC·모바일)가 HTTPS로 Caddy에 접속하면, Caddy가 SSL을 처리하고 내부의 CouchDB로 요청을 전달한다.

┌─────────────┐    HTTPS (443)    ┌──────────────┐
│   옵시디언   │ ─────────────────►│    Caddy     │
│ (PC·모바일) │                    │ 리버스 프록시│
│             │                    │  + SSL 자동  │
└─────────────┘                    └───────┬──────┘
                                           │ localhost:5984
                                           ▼
                                   ┌──────────────┐
                                   │   CouchDB    │
                                   │  데이터베이스 │
                                   └──────────────┘

사용 기술 스택

| 기술 | 역할 | 비용 | |---|---|---| | CouchDB | NoSQL DB · 실시간 동기화 백엔드 | 무료 (오픈소스) | | Caddy | 리버스 프록시 · SSL 자동 발급/갱신 | 무료 (오픈소스) | | Self-hosted LiveSync | 옵시디언 커뮤니티 플러그인 | 무료 (오픈소스) | | Let's Encrypt | SSL 인증서 | 무료 |

기존 서버를 활용한다면 총 구축 비용은 0원이다. CouchDB는 아이들 상태에서 RAM 50~100MB만 쓰고 CPU는 거의 0%다. NAS나 파일서버에 얹어도 부담이 없다.


1단계. 사전 준비

필수 체크리스트

  • 24시간 가동되는 PC 또는 서버 (Windows / Linux / macOS)
  • 고정 IP 또는 DDNS 설정
  • 도메인 보유 (SSL 인증서 발급에 필수)
  • 공유기 관리자 접근 권한 (포트포워딩용)

권장 서버 사양

| 항목 | 최소 | 권장 | |---|---|---| | CPU | 1코어 | 2코어 이상 | | RAM | 512MB | 1GB 이상 | | 디스크 | 1GB | 10GB 이상 | | OS | Windows 10+ | Windows 10/11, Ubuntu 22.04+ |

💡 이 가이드는 Windows 기준으로 작성됐다. Linux/macOS도 명령어만 다를 뿐 흐름은 동일하다.


2단계. CouchDB 설치

CouchDB 공식 페이지에서 Windows 인스톨러를 다운로드한다.

📥 https://couchdb.apache.org/#download

설치 도중 관리자 계정(사용자명·비밀번호) 을 설정하라는 화면이 나온다. 이 정보는 이후 옵시디언 연결과 모든 명령어에서 계속 쓰이므로 반드시 메모해둔다.

설치 확인

PowerShell을 열고 다음 명령어를 실행한다.

curl.exe http://localhost:5984/

정상 응답:

{"couchdb":"Welcome","version":"3.5.1",...}

브라우저에서 http://localhost:5984/_utils 에 접속하면 CouchDB 웹 관리 화면(Fauxton)도 사용할 수 있다. 데이터베이스를 GUI로 둘러보기 좋은 도구다.


3단계. 데이터베이스 초기화

시스템 DB 3개 생성

CouchDB는 첫 실행 시 시스템 데이터베이스 3개를 직접 만들어줘야 한다.

curl.exe -X PUT http://localhost:5984/_users -u "계정:비밀번호"
curl.exe -X PUT http://localhost:5984/_replicator -u "계정:비밀번호"
curl.exe -X PUT http://localhost:5984/_global_changes -u "계정:비밀번호"

옵시디언 전용 DB 생성

curl.exe -X PUT http://localhost:5984/obsidian-vault -u "계정:비밀번호"

각 명령어 실행 시 {"ok":true} 응답이 나오면 성공이다.

PowerShell curl 함정: PowerShell에서 curlInvoke-WebRequest의 별칭이다. 반드시 curl.exe로 실행해야 한다. 그렇지 않으면 "매개 변수 이름 'X'과(와) 일치하는 매개 변수를 찾을 수 없습니다" 오류가 난다.

⚠️ 비밀번호 특수문자: !, ), @ 같은 특수문자가 포함된 경우 작은따옴표로 감싼다.

curl.exe -X PUT http://localhost:5984/_users -u 'admin:p@ss!word'


4단계. CORS 설정

옵시디언 LiveSync 플러그인은 브라우저 환경에서 동작하기 때문에 CouchDB가 CORS를 허용해야 한다.

local.ini 파일 위치 찾기

Get-ChildItem -Path "C:\" -Recurse -Filter "local.ini" -ErrorAction SilentlyContinue 2>$null

보통 C:\Program Files\Apache CouchDB\etc\local.ini 에 있다.

CORS 설정 추가

local.ini 파일을 열고 맨 아래에 다음 내용을 추가한다.

[chttpd]
enable_cors = true

[cors]
origins = app://obsidian.md, capacitor://localhost, http://localhost
credentials = true
headers = accept, authorization, content-type, origin, referer
methods = GET, PUT, POST, HEAD, DELETE
max_age = 3600

CouchDB 서비스 재시작

net stop "Apache CouchDB"
net start "Apache CouchDB"

5단계. Caddy 설치 및 SSL 자동 설정

Caddy는 리버스 프록시와 SSL 인증서 자동 관리를 한 번에 해결해주는 웹 서버다. nginx + certbot 조합을 한 줄짜리 설정 파일로 대체한다.

Caddy 다운로드

mkdir C:\caddy
curl.exe -o C:\caddy\caddy.exe -L "https://caddyserver.com/api/download?os=windows&arch=amd64"

Caddyfile 생성

Set-Content -Path "C:\caddy\Caddyfile" -Value @"
obsidian.your-domain.com {
    reverse_proxy localhost:5984
}
"@

obsidian.your-domain.com 부분은 본인이 사용할 실제 서브도메인으로 바꾼다. Caddy는 이 도메인에 대해 Let's Encrypt에서 SSL 인증서를 자동으로 발급해준다.

Caddy 실행 (테스트)

cd C:\caddy
.\caddy.exe run --config Caddyfile

로그에 certificate obtained successfully 메시지가 나타나면 SSL 인증서 발급이 끝난 것이다. 이때 Ctrl+C로 종료해도 인증서는 캐시되어 있으니 다시 실행할 때 즉시 사용된다.


6단계. 공유기 포트포워딩

공유기 관리자 페이지에 접속해서 두 개의 포트를 열어준다.

| 외부 포트 | 내부 IP | 내부 포트 | 용도 | |---|---|---|---| | 80 | 서버 내부 IP | 80 | Let's Encrypt 인증서 발급/갱신 | | 443 | 서버 내부 IP | 443 | HTTPS 동기화 트래픽 |

서버 내부 IP 확인

ipconfig

IPv4 주소 항목을 확인한다 (예: 192.168.0.100).

⚠️ 5984 포트(CouchDB)는 절대 외부로 열지 않는다. 모든 외부 접근은 Caddy(443)를 통해서만 들어와야 한다.


7단계. DNS 설정

도메인 DNS 관리 페이지에서 A 레코드를 추가한다.

| 타입 | 이름 | 값 | |---|---|---| | A | obsidian | 서버의 고정 공인 IP |

정상 동작 확인

브라우저에서 https://obsidian.your-domain.com 으로 접속한다.

{"couchdb":"Welcome","version":"3.5.1",...}

이 응답이 나오면 DNS + SSL + 리버스 프록시가 모두 정상이라는 뜻이다. 여기까지 왔다면 서버 쪽 작업은 사실상 끝난 것이다.


8단계. 옵시디언 플러그인 설정 (첫 번째 기기)

플러그인 설치

옵시디언 → 설정 → 커뮤니티 플러그인 → Browse → "Self-hosted LiveSync" 검색 → 설치 → 활성화

초기 설정 순서

  1. "I am setting this up for the first time" 선택
  2. "Yes, I want to set up a new synchronisation" 클릭
  3. "Enter the server information manually" 선택
  4. E2E 암호화: 체크 + passphrase 입력 (기억 필수)
  5. 서버 타입: "CouchDB" 선택

서버 정보 입력

| 항목 | 입력값 | |---|---| | URL | https://obsidian.your-domain.com | | Username | CouchDB 사용자명 | | Password | CouchDB 비밀번호 | | Database Name | obsidian-vault |

CouchDB 이슈 자동 감지 및 수정

플러그인이 서버 설정을 점검하고 부족한 부분을 자동으로 수정해준다.

  1. "Detect and Fix CouchDB Issues" → 표시되는 모든 Fix 버튼 클릭
  2. "All checks passed successfully!" 확인
  3. "Test Settings and Continue" 클릭
  4. "Restart and Initialise Server" 클릭
  5. 확인 체크박스 3개를 모두 체크 → "I Understand, Overwrite Server"
  6. "Replication completed" 메시지 확인

E2E Passphrase 분실 주의: E2E 암호화 passphrase를 분실하면 다른 기기에서 데이터를 복호화할 수 없다. 한 번 설정한 passphrase는 비밀번호 관리자 등 안전한 곳에 반드시 기록해둔다.


9단계. 추가 기기 연결

이제 두 번째, 세 번째 기기를 같은 동기화 환경에 추가한다. 핵심은 빈 볼트로 시작해서 서버에 있는 데이터를 끌어오는 흐름이다.

설정 순서

  1. 새 기기에서 옵시디언 실행 → 빈 볼트 새로 생성
  2. Self-hosted LiveSync 플러그인 설치 / 활성화
  3. "I am adding a device to an existing synchronisation setup" 선택
  4. "Enter the server information manually" 선택
  5. E2E passphrase: 첫 번째 기기와 정확히 동일하게 입력
  6. 서버 정보: 첫 번째 기기와 동일하게 입력
  7. Vault 상태: "This Vault is empty..." 선택
  8. "Reset and Resume Synchronisation" 클릭

✅ 서버에 저장된 노트가 자동으로 다운로드된다. 이후 양쪽 기기에서 편집한 내용이 실시간으로 동기화된다. 모바일도 동일한 순서로 추가한다.


10단계. Caddy 서비스 등록

PowerShell 창에서 caddy.exe run으로 띄우면 그 창을 닫는 순간 Caddy가 종료되어 동기화가 끊긴다. Windows 서비스로 등록해서 백그라운드에서 항상 실행되도록 만든다.

cd C:\caddy
.\caddy.exe stop
.\caddy.exe install --config C:\caddy\Caddyfile
.\caddy.exe start

이제 PC를 재부팅해도 Caddy는 자동으로 다시 실행된다. CouchDB도 설치 시 기본적으로 Windows 서비스로 등록되어 있어 둘 다 백그라운드에서 영구적으로 동작한다.


11단계. 트러블슈팅

실제로 셋업할 때 만나게 되는 문제들과 해결법이다.

PowerShell curl 오류

증상: 매개 변수 이름 'X'과(와) 일치하는 매개 변수를 찾을 수 없습니다

해결: curlcurl.exe로 변경. PowerShell의 curlInvoke-WebRequest의 별칭이라 리눅스 curl과 문법이 완전히 다르다.

CouchDB 인증 실패

증상: {"error":"unauthorized"}

해결: Fauxton(http://localhost:5984/_utils)에서 직접 로그인을 시도해본다. 비밀번호에 특수문자가 있으면 작은따옴표로 감싼다.

SSL 인증서 발급 실패

확인할 것은 세 가지다.

  • DNS A 레코드가 서버 공인 IP를 정확히 가리키는지
  • 포트 80, 443이 외부에서 접근 가능한지
  • Windows 방화벽에서 해당 포트가 허용되어 있는지

방화벽 규칙 추가:

netsh advfirewall firewall add rule name="Caddy HTTP" dir=in action=allow protocol=tcp localport=80
netsh advfirewall firewall add rule name="Caddy HTTPS" dir=in action=allow protocol=tcp localport=443

보안 권장사항: CouchDB 외부 접근 차단

CouchDB의 5984 포트는 외부에서 직접 접근하지 못하도록 명시적으로 차단한다. 모든 외부 트래픽은 Caddy 리버스 프록시(443)를 통해서만 들어오게 만든다.

netsh advfirewall firewall add rule name="Block CouchDB External" dir=in action=block protocol=tcp localport=5984 remoteip=any
netsh advfirewall firewall add rule name="Allow CouchDB Local" dir=in action=allow protocol=tcp localport=5984 remoteip=127.0.0.1

마무리

여기까지 따라왔다면 매월 $5~$10 구독료 없이 본인 서버에서 옵시디언 노트를 실시간으로 동기화하는 환경이 완성된 것이다. 데이터는 본인 서버에만 저장되고, SSL로 암호화된 채널로 전송되며, E2E 암호화로 한 번 더 보호된다.

이 가이드의 핵심은 세 가지 오픈소스를 조립하는 것이다. CouchDB(저장), Caddy(SSL·프록시), Self-hosted LiveSync(클라이언트). 각각은 단순하지만 조합하면 상용 서비스급의 동기화 환경이 된다.

다음 글에서는 이 환경을 더 안정적으로 운영하기 위한 백업 자동화, 모바일 동기화 최적화, 다중 볼트 분리 운영 같은 고급 주제를 다룬다.

리도 프로필

리도 인사이트

기술을 현장 언어로 다시 풀어 쓰는 사람

3D 설계, 광통신 인프라 장비 개발, 글로벌 현장 교육을 19년 넘게 다뤄왔고, 요즘은 AI 자동화, 꿈꾸는 카메라, 실무 채널 운영을 연결해 복잡한 일을 더 쉽게 만드는 방법을 기록하고 있습니다.

다음 대화

읽고 끝내지 말고, 실제 문제로 이어가도 좋습니다.

자동화, 설계, 교육, 콘텐츠 중 무엇이든 지금 필요한 문제부터 같이 정리해볼 수 있습니다.

편하게 문의하기