# Obsidian + LLM + Git + Quartz: 노트가 공개 지식이 되는 자동화 스택
Canonical: https://social-archive.org/yena/lQouEqVHVE
Original URL: https://wikidocs.net/blog/@Allen/20309/
Author: wikidocs.net
Platform: web
## Content
> **한 줄 결론:** Obsidian으로 쌓고, LLM으로 연결하고, Git으로 보존하고, Quartz로 공개하는 이 네 단계 파이프라인은 개인 지식관리를 "나만 보는 메모"에서 "세상과 나누는 살아있는 지식 기반"으로 바꿉니다. 쌓을수록 복리로 자산이 됩니다. --- ### 아무도 제대로 말하지 않는 두 번째 문제 첫 번째 문제는 이미 알고 있습니다. LLM은 무상태(stateless)입니다. 세션이 끝나면 모든 것을 잊습니다. Obsidian + Claude Code + Git 스택은 그 문제를 해결합니다. 이전 글에서 다뤘습니다. 그런데 두 번째 문제가 있습니다. 열심히 관리한 지식이 내 컴퓨터 안에만 갇혀 있다는 것입니다. 3년 동안 Obsidian vault를 관리했습니다. AI 연구 노트, 프로젝트 아키텍처 결정, 읽은 논문 요약, 시행착오 기록. LLM이 접근할 수 있는 수준으로 구조화된, 그리고 실제로 복리로 증가하는 지식 기반입니다. 그 안에는 누군가에게 분명히 도움이 될 내용이 있습니다. 그런데 공개하려면? 복사-붙여넣기, 포맷 변환, 이미지 업로드, 플랫폼 이식. 마찰이 너무 커서 결국 draft 폴더에 쌓였습니다. **Quartz** 가 그 마찰을 없앱니다. Quartz는 Obsidian vault를 있는 그대로 — `[[링크]]`, 태그, 폴더 구조 그대로 — 정적 웹사이트로 변환하는 도구입니다. 추가 플랫폼도, 포맷 변환도 없습니다. 노트가 곧 웹페이지입니다. 그리고 `is_public: true` 가 붙은 노트만 선택적으로 공개할 수 있습니다. 이 네 번째 레이어가 추가되면 파이프라인이 완성됩니다. --- ### 처리 흐름: 5단계, 하나의 방향 ``` 노트 작성 → LLM 컴파일 → Git 버전관리 → Quartz 빌드 → 웹 공개 ``` ![Obsidian + LLM + Git + Quartz 처리 흐름 전체 파이프라인](https://static.wikidocs.net/images/blog/20309/obsidian-quartz-flow.png) 원본을 넣으면 Claude가 구조화하고, Markdown에 저장되며, Obsidian이 연결하고, Git이 보존하고, Quartz가 배포합니다. 각 단계는 다음 단계를 위한 조건이 됩니다. 어느 한 단계도 뺄 수 없습니다. 이전 스택(Obsidian + LLM + Git)은 "나를 위한 지식관리"였습니다. Quartz가 더해지면 "세상과 함께하는 지식관리"가 됩니다. --- ### 4+1 툴이 각각 반드시 필요한 이유 ![Obsidian, LLM, Git, Quartz 4스택 개념 관계도](https://static.wikidocs.net/images/blog/20309/obsidian-quartz-stack-concept.png) #### Obsidian: 지식의 컨테이너 모든 것이 평문 텍스트입니다. 독점 데이터베이스도, 클라우드 종속도 없습니다. `.md` 파일이 폴더 안에 있을 뿐입니다. 그래서 Claude Code가 vault 전체를 직접 읽을 수 있고, Quartz가 그대로 정적 사이트로 변환할 수 있습니다. `[[위키링크]]` 는 Obsidian 안에서는 노드 그래프를 만들고, Quartz 안에서는 하이퍼링크가 됩니다. 내 vault 안의 연결이 그대로 웹의 연결이 됩니다. 별도 작업 없이. 저는 vault를 4개 상위 폴더로 운영합니다: `inbox/` (미처리 입력), `concepts/` (개념 노트), `projects/` (진행 중 작업), `public/` (공개 예정). 이 구조가 Quartz 공개 범위 설정과 자연스럽게 연결됩니다. **Obsidian이 제공하는 것:** LLM이 읽고 Quartz가 빌드할 수 있는 단일 진실 원천. --- #### Claude Code: AI 컴파일러 입력 자료를 받아 vault 구조에 통합하는 역할입니다. 새 아티클을 읽거나 미팅이 끝나면, 원본 메모를 `inbox/` 에 넣고 Claude에게 처리를 요청합니다. Claude가 하는 일: - 기존 `concepts/` 노트와 겹치는 내용 확인 - 새 개념이면 파일 생성, 기존 개념이면 업데이트 - 연관 노트에 `[[링크]]` 추가 - 공개 가치가 있는 내용에 `is_public: true` 태그 제안 - 커밋 메시지 작성 실제 사용하는 프롬프트 패턴: ``` 사용자: "어제 읽은 Andrej Karpathy의 LLM OS 에세이 요약이에요. vault에 통합해 주세요. 공개할 만한 내용이면 is_public 표시도 해주세요." Claude Code: → /vault/concepts/llm-os.md 없음 → 새 파일 생성 → /vault/concepts/에이전틱-AI.md 읽기 → 관련 내용 발견 → llm-os.md에 [[에이전틱-AI]] 링크 추가 → is_public: true 설정 (공개 가치 있음) → 커밋: "add: LLM OS 개념 노트 (Karpathy 에세이 기반)" ``` **Claude Code가 제공하는 것:** 수동 분류 없이 vault를 유지하는 자율 큐레이터. --- #### Markdown + frontmatter: 이중 기계 읽기 Markdown 자체는 이전 글에서 다뤘습니다. 여기서는 frontmatter가 추가로 중요합니다. ``` --- is_public: true tags: [AI, 생산성, LLM] date: 2026-06-14 --- ``` 이 세 줄이 Quartz의 동작을 제어합니다. `is_public: false` 인 노트는 빌드에서 제외됩니다. 태그는 Quartz 태그 페이지로 자동 생성됩니다. date는 최신 글 정렬에 쓰입니다. Claude가 새 노트를 만들 때 적절한 frontmatter를 함께 생성하도록 `CLAUDE.md` 에 지시할 수 있습니다. 그러면 매번 수동으로 설정할 필요가 없습니다. **Markdown이 제공하는 것:** LLM이 파싱하고 Quartz가 렌더링하는 범용 포맷. --- #### Git: 기억의 뼈대이자 배포 트리거 Git은 이 스택에서 두 가지 역할을 합니다. 첫 번째 역할은 이전 글에서 다뤘습니다 — 버전 히스토리, 실험 브랜칭, 기기 간 동기화. 두 번째 역할이 Quartz와 함께 생깁니다: **배포 트리거**. GitHub 저장소에 push하면 GitHub Actions가 Quartz 빌드를 실행하고, GitHub Pages 또는 Vercel에 자동 배포됩니다. 커밋 하나가 노트 저장이면서 동시에 배포입니다. ``` # 일반적인 작업 세션 마무리 cd ~/vault git add . git commit -m "update: LLM OS 개념 노트 추가, 에이전틱-AI 연결" git push origin main # → GitHub Actions 자동 실행 → Quartz 빌드 → 웹 배포 완료 ``` push 하나로 vault 동기화와 웹 업데이트가 동시에 이루어집니다. **Git이 제공하는 것:** 버전관리이자 무중단 배포 파이프라인. --- #### Quartz: 지식의 공개 레이어 이게 새로 추가되는 부분입니다. Quartz는 Hugo 기반의 정적 사이트 생성기인데, Obsidian vault를 위해 설계되어 있습니다. 설치하면 vault 폴더를 그대로 인식합니다. `[[위키링크]]` 를 하이퍼링크로 변환하고, 그래프 뷰를 웹으로 렌더링하고, 태그 페이지를 자동 생성합니다. 설정 파일 핵심 부분: ``` // quartz.config.ts const config: QuartzConfig = { configuration: { pageTitle: "Allen's Notes", baseUrl: "notes.allenminded.com", ignorePatterns: ["private", "templates", ".obsidian", "inbox"], defaultDateType: "modified", }, plugins: { filters: [Plugin.RemoveDrafts()], // is_public: false 제외 emitters: [ Plugin.AliasRedirects(), Plugin.ComponentResources(), Plugin.ContentPage(), Plugin.TagPage(), Plugin.ContentIndex({ enableSiteMap: true, enableRSS: true }), ], }, } ``` `Plugin.RemoveDrafts()` 가 핵심입니다. frontmatter에 `is_public: false` 이거나 `draft: true` 인 노트를 자동으로 빌드에서 제외합니다. 내 개인 메모는 vault 안에 있지만 웹에는 나타나지 않습니다. 노트에서 공개 여부를 제어하는 방식: ``` --- # 이 파일은 웹에 공개됩니다 is_public: true tags: [AI, 생산성] --- # 이 파일은 로컬에만 있습니다 draft: true ``` **Quartz가 제공하는 것:** vault를 웹사이트로 변환하는 마찰 없는 퍼블리싱 레이어. --- ### Quartz 배포 파이프라인 상세 ![Quartz 배포 파이프라인: 노트 → 빌드 → 정적 사이트 → 웹 공개](https://static.wikidocs.net/images/blog/20309/obsidian-quartz-publish-pipeline.png) 처음 설정 이후 반복 작업은 단순합니다: **최초 설정 (한 번만)** ``` # 1. Quartz 설치 git clone https://github.com/jackyzha0/quartz.git cd quartz npm install # 2. vault 연결 (quartz.config.ts에서 contentFolderPath 지정) # 또는 vault 폴더를 quartz/content/로 심볼릭 링크 # 3. 로컬 프리뷰 npx quartz build --serve # → http://localhost:8080 에서 확인 # 4. GitHub 저장소에 push → GitHub Actions 자동 배포 ``` **반복 작업 (매 세션)** ``` # Claude가 vault 업데이트 후 커밋 git add . git commit -m "update: 새 개념 노트 3개, 기존 노트 2개 연결" git push origin main # → 자동 빌드·배포 완료 (보통 2분 이내) ``` GitHub Actions 설정도 Quartz 공식 문서의 템플릿 하나로 끝납니다. CI 설정에 따로 시간을 쓸 필요가 없습니다. 로컬에서 `npx quartz build --serve` 로 먼저 확인하고 push하는 습관이 중요합니다. 렌더링 결과를 브라우저로 직접 확인한 후 배포하면 의도치 않은 노트가 공개되는 일을 방지할 수 있습니다. --- ### 복리 효과: 지식이 자산이 되는 시점 ![도입 전/후 비교: 고립된 노트 vs 연결된 공개 지식 기반](https://static.wikidocs.net/images/blog/20309/obsidian-quartz-before-after.png) 이 스택을 6개월 운영하면 세 가지가 동시에 복리로 증가합니다. **첫째, LLM이 접근하는 컨텍스트 품질.** vault가 쌓일수록 Claude가 내 질문에 내 맥락으로 답합니다. "AI 에이전트 아키텍처에 대해 설명해 줘"가 아니라 "내 프로젝트에서 지난 달 결정한 아키텍처와 새로 읽은 논문을 연결해서 정리해 줘"가 됩니다. **둘째, 공개된 지식이 새 연결을 만듭니다.** 내 Quartz 사이트에서 읽은 사람이 피드백을 주거나, 같은 주제를 연구하는 사람을 발견하거나, 내가 놓친 관점을 제안합니다. 닫힌 vault에서는 절대 일어나지 않는 일입니다. **셋째, 쓰기 습관이 생깁니다.** 어차피 공개될 것을 알면 처음부터 더 명확하게 씁니다. 더 명확하게 쓰면 Claude가 더 정확하게 연결합니다. 더 정확한 연결은 더 좋은 공개 콘텐츠가 됩니다. 이 루프가 돌기 시작하면 멈추기 어렵습니다. 제가 이 스택을 도입하기 전에는 매달 0~1개 글을 공개했습니다. 3개월이 지난 시점에는 vault의 글 15개가 자동으로 웹에 올라가 있었고, 특별히 "글을 써야겠다"는 결심을 한 기억이 없었습니다. 노트 관리 습관이 그대로 퍼블리싱 습관이 된 것입니다. --- ### 실전 설정 방법 추가되는 것은 Quartz 설정 하나뿐입니다. 기존 Obsidian + Claude Code + Git 스택 위에 얹으면 됩니다. **1. Obsidian vault** — 폴더 구조 권장안: ``` vault/ ├── inbox/ # 미처리 입력 (Quartz 빌드 제외) ├── concepts/ # 개념 노트 (선택 공개) ├── projects/ # 진행 중 작업 (비공개) ├── public/ # 공개 확정 노트 └── CLAUDE.md # AI 지시 파일 ``` **2. CLAUDE.md** — Quartz 인식 추가: ``` # CLAUDE.md 이것은 지식 vault입니다. 새 정보를 처리할 때: - 기존 파일 먼저 확인, 중복 생성 금지 - 관련 개념에 [[링크]] 추가 - 원자적 노트: 파일당 하나의 개념 - frontmatter 필수 포함: - 공개 가치 있으면: is_public: true - 미완성이면: draft: true - tags: 관련 개념 2~4개 - 각 업데이트 후 커밋 (메시지에 변경 이유 포함) ``` **3. Quartz 설정** — 최소 설정으로 시작: ``` // quartz.config.ts 핵심 부분 configuration: { pageTitle: "내 지식 노트", baseUrl: "your-username.github.io/quartz", // 또는 커스텀 도메인 ignorePatterns: ["private", "templates", ".obsidian", "inbox", "projects"], }, plugins: { filters: [Plugin.RemoveDrafts()], } ``` **4. GitHub Actions** — Quartz 공식 템플릿 그대로 사용: ``` # .github/workflows/deploy.yml (Quartz 문서 제공 템플릿) name: Deploy Quartz site to Pages on: push: branches: ["main"] jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npm ci && npx quartz build - uses: actions/upload-pages-artifact@v3 with: path: public deploy: needs: build runs-on: ubuntu-latest permissions: pages: write id-token: write environment: name: github-pages steps: - uses: actions/deploy-pages@v4 ``` **5. 일상 워크플로우:** ``` # 작업 세션 마무리 (Claude가 vault 업데이트 후) git add . git commit -m "update: [변경 내용 요약]" git push origin main # 2분 후 자동 배포 완료 ``` 복잡한 것은 없습니다. 기존 스택에 `quartz.config.ts` 하나와 GitHub Actions 파일 하나가 추가될 뿐입니다. --- ### 왜 이 흐름이 앞으로 더 강해질까 세 가지 방향이 이 스택을 점점 더 가치 있게 만듭니다. **에이전틱 AI가 배포까지 자동화할 것입니다.** 지금은 Claude가 vault를 업데이트하고 나서 제가 직접 커밋하고 push합니다. 가까운 시일 안에 Claude Code가 "업데이트 완료, 커밋하고 배포할까요?"를 물어보는 것이 표준이 될 것입니다. vault 관리에서 사람이 할 일은 더 줄어듭니다. **정적 사이트가 AI 크롤링에 최적입니다.** 동적 웹앱, 로그인 필요 플랫폼, 클라이언트 사이드 렌더링 — 이것들은 AI 에이전트가 접근하기 어렵습니다. 평문 HTML로 이루어진 Quartz 정적 사이트는 반대입니다. 내 지식이 다른 사람의 AI 에이전트에게도 발견 가능한 형태로 존재하게 됩니다. **로컬 LLM이 현실이 되면 이 스택의 프라이버시 모델이 완성됩니다.** 지금은 Claude가 내 vault를 처리하면 Anthropic 서버를 거칩니다. 로컬 LLM(Ollama, LM Studio)이 충분히 좋아지면, 내 vault 전체가 인터넷에 나가지 않고도 처리됩니다. 같은 스택, 같은 워크플로우, 완전한 개인정보 보호. Obsidian + LLM + Git + Quartz가 작동하는 이유는 각 레이어가 표준을 지키기 때문입니다. 평문 텍스트, 오픈 포맷, 버전 컨트롤, 정적 파일. 어떤 툴이 바뀌어도 교체 가능합니다. --- ### 결론 기존 스택(Obsidian + LLM + Git)은 "나를 위한 AI 기억 장치"였습니다. Quartz를 더하면 "세상과 나누는 AI 지식 기반"이 됩니다. 핵심 변화는 이것입니다: ``` 기존: 노트 작성 → LLM 처리 → Git 저장 → 내 컴퓨터 안에 있음 신규: 노트 작성 → LLM 처리 → Git 저장 → Quartz 배포 → 웹에 있음 ``` 추가되는 마찰은 거의 없습니다. 최초 설정 이후에는 `git push` 하나입니다. 그 대신 얻는 것은 — 내 지식이 나만이 아니라 그것이 필요한 사람에게도 닿을 수 있다는 것입니다. AI 도구를 정말로 장기적으로 활용하고 싶다면, 지식 기반이 내 머릿속이나 잠긴 앱 안에만 있어서는 안 됩니다. 읽을 수 있고, 연결되어 있고, 공개될 수 있어야 합니다. 그게 지식이 자산이 되는 방식입니다. 이 스택이 그것을 가능하게 합니다. --- *Quartz 초기 설정 과정이 궁금하시거나, vault 폴더 구조 예시가 필요하시면 댓글로 알려주세요. 실제 제 vault 구조와 CLAUDE.md 전문을 공유하는 후속 글을 준비하겠습니다.*
