TL;DR

  • Obsidian + iCloud 은 작성 및 동기화
  • obsidian-git plugin 으로 게시할 글만 백업
  • Quartz 는 Static Site Generator(SSG)
  • Cloudflare 는 hosting

들어가며

나이가 들면서 기억에 남아있는 정보가 온전하지 못한 순간이 점점 많아져서 기록의 필요성을 느낀다. 경험했던 것들을 정리하던 중 어쩌면 어떤것들은 다른 사람에게 도움이 될 수 있지 않을까 하는 생각이 들었다. 나도 누군가로부터 도움을 많이 받았으니까.

사용한 도구와 서비스

Obsidian + iCloud

Obsidian 을 사용하는 특별한 이유는 없는데, private 하게 사용할 수 있는거랑, 오프라인 사용성, plugin 환경이 좋은 것 같다. Notion, Typora, Notes(macOS) 보다 더 잘 맞는 모양이다.

동기화를 위해 가장 쉽고 빠른 방법은 월 $4/월 을 지불하는것이다. 이 방법이 더 안정적일지도 모르겠다. 하지만 이미 iCloud 비용을 내고있으니 최대한 활용해야한다.

iCloud 설정은 단순히 vault 를 iCloud Drive 내 원하는 경로에 위치시키는 것이다. 이번에 맥북 구매하고 설정할때 iCloud 에 있는 vault 를 불러오기한 것 밖에 없다.

iCloud 에 .gitignore 와 같은 기능만 있으면 아래 과정은 단순해질 수 있다. Posts/ 를 npm project 로 설정하면 되는데, 그렇게하면 node_modules 도 동기화돼서.

Obsidian plugins & cli

obsidian-git

Vault 를 git repository 에 백업할 수 있는 plugin 이다. 나는 vault 전체를 백업하지 않고 Posts/ folder 만 백업하도록 설정했다. 이미 iCloud 동기화가 되어있어서 블로그 글 보관용도로만 사용한다. plugin 설정 값을 아래처럼 수정했다. command palette 명령어가 제공된다. 내가 가장 많이 쓸 명령어는 Git: Commit all changesGit: Push 다. add, commit 을 한번에 해주고 commit message 기본값으로 입력된다.

obsidian-export?

Obsidian 에서 작성한 Markdown(MD) 을 일반적인 MD 형태로 변환해서 내보낼 수 있는 cli 이다. 이 설정에서는 사용하지 않는다. 내부 문서 참조([[NOTE]])나 파일 첨부(![[FILE]]) 같은 문법은 다른 tool 과의 호환성을 위해 변환이 필요하다.

Quartz

SSG 로 사용한다. 11ty 와 Quartz 가 후보였고 더 할게 없어보이는 Quartz 를 선택했다. 그 시작이 Obsidian vault 를 웹에 게시하기 위해 만들어진 tool 이어서 별도의 설정 없이도 훌륭한 기능과 디자인을 사용할 수 있다. 실제로 수정한게 거의 없다. 그리고 i18n 에 기본으로 지원돼서 좋다.

Cloudflare Pages

DNS 관리는 Cloudflare 에서 한다. Cloudflare Pages 를 제일 먼저 생각했지만 GitHub Pages 와 고민중이다.

GitHub

총 2 개의 repositories 가 필요하다.

  • Obsidian /Posts 백업용
  • Quartz 용
sequenceDiagram
    participant Developer
    participant GitHub
    participant obsidian-posts
    participant quartz

    Developer->>obsidian-posts: Push
    obsidian-posts->>GitHub: Trigger a-action workflow
    GitHub->>GitHub: Start a-action workflow
    GitHub->>GitHub: Configure Git user
    GitHub->>quartz: Checkout quartz repository
    GitHub->>quartz: Pull obsidian-posts repository as subtree
    GitHub->>quartz: Push changes to quartz repository
    GitHub->>GitHub: Complete workflow

설정이 이상해보일 수 있는데, obsidian-posts 는 trigger 역할만 한다. obsidian-posts 에 있는 action 에서는 quartz 를 checkout 받아서 subtree 를 업데이트하고 다시 origin 에 push 한다. quartz 의 빌드는 Cloudflare Pages 에서 한다.

GitHub Actions 에서 발급하는 GITHUB_TOKEN 에는 다른 repository 에 대한 권한이 없다. obsidian-posts 에서 quartz 를 다루기 위해 Personal Access Token(PAT) 를 발급받고 workflow step 에 주입해줬다. 그리고 PAT 는 ssh 로 동작할때는 사용을 못하니까 repository 참조를 을 web URL 로 설정해줬다.

name: Name of your workflow  
  
on:  
  push:  
    branches:  
      - main
      - 
jobs:  
  build:  
    runs-on: ubuntu-latest  
    steps:  
      - name: Checkout Digital Garden  
        uses: actions/checkout@v4  
        with:  
          repository: OWNER/digital-garden  
          ref: v4  
          fetch-depth: 0  
          token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT  
  
      - name: Setup Git Info  
        run: |  
          git config user.name "GitHub Actions"  
          git config user.email "actions@github.com"  
  
      #      - name: Add subtree  
      #        run: git subtree add --prefix=content https://github.com/OWNER/obsidian-posts.git main --squash  
      - name: Pull subtree  
        run: git subtree pull --prefix=content https://github.com/OWNER/obsidian-posts.git main --squash  
  
      - name: Push changes  
        run: git push origin v4