Obsidian 노트를 블로그 글로 바꾸는 AI 워크플로우 — 마크다운에서 발행까지

한줄 결론: Obsidian 노트는 이미 구조화된 마크다운 원고다. AI 에이전트가 노트 선택부터 채널별 HTML 발행까지 자동화하면, 한 편의 노트가 여러 블로그 글로 전환된다.

이 워크플로우는 Obsidian을 메모 앱이 아닌 콘텐츠 파이프라인의 출발점으로 쓰는 사람에게 유효하다. 이 글에서는 노트 선택 기준, 마크다운→HTML 변환 팁, Claude Code 서브에이전트 조합, 발행 API 연동까지 단계별로 다룬다.

Obsidian 노트를 AI 워크플로우로 블로그 글로 전환하는 과정을 요약한 AI 생성 대표 이미지

Obsidian 노트를 AI 워크플로우로 블로그 글로 전환하는 과정을 요약한 AI 생성 대표 이미지.

왜 Obsidian 노트가 블로그 소재로 강한가?

Obsidian은 처음부터 마크다운으로 데이터를 저장하므로, 별도의 내보내기 단계 없이 텍스트 파일 그대로 파이프라인에 투입할 수 있다. 글의 구조(제목, 소제목, 리스트, 코드블록)가 이미 마크업으로 표현돼 있어 AI가 의미 단위를 파악하기 쉽다.

Obsidian의 frontmatter(YAML 헤더)에는 태그, 날짜, 상태 같은 메타데이터가 정형화돼 있어 자동화 스크립트가 발행 여부를 판별하는 신호로 바로 쓸 수 있다. 예를 들어 status: ready 필드 하나로 '발행 대기' 노트를 필터링하면, 수백 개의 노트 중 오늘 발행할 원고를 즉시 추릴 수 있다.

백링크와 태그 구조 덕분에 관련 노트를 자동으로 묶어 시리즈 글이나 주제 클러스터를 만들기도 쉽다. 단순 메모 앱과 달리 노트 간 연결이 콘텐츠 전략의 뼈대가 된다.

변환 워크플로우 6단계는 어떻게 구성하는가?

아래 표는 노트 한 편이 발행 완료까지 거치는 단계와 각 단계에서 자동화가 가능한 지점을 정리한 것이다.

단계 작업 내용 자동화 방법
1. 노트 선택 status: ready 노트 필터 파이썬 스크립트 / Claude Code MCP
2. 문맥 추출 frontmatter 파싱 + 백링크 수집 python-frontmatter 라이브러리
3. 채널별 앵글 플랫폼(티스토리·Blogger 등)에 맞는 톤·구성 결정 Claude Code 서브에이전트 스킬
4. GEO 구조화 FAQ·표·코드블록 추가, 검색의도 직답 삽입 프롬프트 스킬 + 구조화 출력
5. HTML 변환 마크다운 → 플랫폼 호환 HTML mistune · Pandoc · marked.js
6. 발행 Blogger API / 티스토리 API 호출 Python requests + OAuth2 토큰

각 단계는 독립적으로 실행 가능하므로, 전체를 한 번에 자동화하지 않아도 된다. 먼저 1~2단계(노트 선택·문맥 추출)만 스크립트화하고, 3~4단계는 수동으로 검토한 뒤 5~6단계를 다시 자동화하는 방식이 현실적이다.

마크다운을 블로그 HTML로 바꿀 때 놓치기 쉬운 포인트는?

Obsidian의 [[내부 링크]] 문법은 표준 마크다운에 없다. 파이프라인에서 [[노트명]]을 실제 URL이나 평문으로 치환하는 전처리가 없으면, 발행된 글에 깨진 링크가 그대로 남는다.

frontmatter 블록은 독자에게 보이면 안 되므로 HTML 변환 전에 제거해야 한다. python-frontmatter 라이브러리는 메타데이터 파싱과 본문 분리를 한 번에 처리한다. 코드 예시는 다음과 같다.

import frontmatter
import re
import mistune

def convert_note(path: str) -> dict:
    post = frontmatter.load(path)
    meta = post.metadata          # {'title': ..., 'status': ..., 'tags': [...]}
    body = post.content

    # [[wikilink]] → 평문 처리
    body = re.sub(r'\[\[([^\]]+)\]\]', r'\1', body)

    # 마크다운 → HTML
    html = mistune.html(body)
    return {'meta': meta, 'html': html}

표(table) 마크다운은 플랫폼마다 렌더링이 다르다. 티스토리는 | 헤더 | 문법을 지원하지만 일부 플랫폼은 인라인 스타일이 없으면 테이블이 무너진다. 변환 시 <table style='...'>로 인라인 스타일을 직접 주입하는 후처리를 추가하면 플랫폼 의존도를 낮출 수 있다.

이미지 경로도 주의가 필요하다. Obsidian Vault 내 로컬 경로(![[이미지.png]])는 발행 시 접근 불가능하다. 이미지를 CDN이나 GitHub 저장소에 먼저 업로드하고 절대 URL로 치환하는 단계가 파이프라인에 포함돼야 한다.

Claude Code 서브에이전트를 블로그 파이프라인에 어떻게 연결하는가?

Claude Code는 서브에이전트(subagent)를 마크다운 파일(.claude/agents/ 디렉터리)로 정의하고, MCP 서버를 통해 외부 서비스(Blogger API, 파일시스템, 슬랙 등)에 연결한다. 블로그 파이프라인에 적용하면 구조는 아래와 같다.

에이전트 팀 구성 예시
오케스트레이터 — Vault 스캔, 발행 대기 노트 목록 수집, 서브에이전트 스케줄링
콘텐츠 서브에이전트 — 채널별 앵글 결정, GEO 구조화(FAQ·표 추가), 제목·메타 디스크립션 생성
변환 서브에이전트 — 마크다운→HTML, 이미지 경로 교체, 인라인 스타일 주입
발행 서브에이전트 — 플랫폼 API 호출, 발행 결과(URL) 기록, frontmatter status 갱신

각 서브에이전트는 자체 컨텍스트 창에서 실행되므로, 노트 10편을 동시에 처리할 때 하나의 에이전트가 다른 에이전트의 문맥을 오염시키지 않는다. 단, 병렬 실행 수는 2~3개로 제한하는 것이 안정적이다. API 레이트 리밋과 파이프라인 오류 추적 모두 동시도가 낮을수록 관리하기 쉽다.

MCP(Model Context Protocol)는 파일시스템 읽기, 발행 API 호출, 결과 로깅을 표준화된 인터페이스로 묶어준다. 별도의 OAuth 플로우 코드 없이 설정 파일에 서버를 등록하면 에이전트가 해당 서비스를 도구처럼 호출한다.

GEO(Generative Engine Optimization) 구조는 어떻게 노트에 적용하는가?

GEO는 구글 AI Overview, ChatGPT 검색, Perplexity 같은 AI 검색 엔진이 콘텐츠를 직접 인용하도록 최적화하는 방식이다. 핵심은 검색 질문에 첫 문장이 직접 답하고, 표·FAQ·코드블록으로 답변 단위가 명확히 분절되는 것이다.

Obsidian 노트는 헤더 계층(#, ##, ###)이 이미 명확하므로 GEO 구조화 비용이 낮다. 서브에이전트가 각 소제목을 '검색 질문형'으로 바꾸고, 첫 문장을 답으로 재구성하는 프롬프트 스킬 하나로 대부분의 GEO 전환이 완료된다.

발행 전 마지막 체크 항목은 3가지다: (1) 소제목이 의문문인가, (2) 각 소제목 첫 문장이 40자 이내로 답을 포함하는가, (3) 표나 리스트가 최소 1개 이상 있는가. 이 세 조건을 충족하면 AI 인용 가능성이 눈에 띄게 높아진다.

실제로 적용해 보면 어디서 막히는가?

가장 자주 막히는 지점은 이미지 처리다. Obsidian Vault 로컬 이미지를 자동으로 외부 CDN에 올리는 단계는 플랫폼마다 API가 다르고, 이미지 중복 업로드 방지 로직도 직접 구현해야 한다. 처음에는 이미지 없는 텍스트 중심 글부터 파이프라인을 검증하는 것이 낫다.

두 번째는 플랫폼 고유 HTML 제약이다. 일부 블로그 플랫폼은 <script><iframe>을 차단하고, 특정 CSS 속성을 제거한다. 발행 후 실제 렌더링을 자동으로 스크린샷하거나 HTML을 재파싱해서 검증하는 단계를 파이프라인 끝에 붙이면 오류를 빠르게 잡을 수 있다.

세 번째는 프롬프트 일관성이다. 서브에이전트가 생성하는 글의 문체가 노트마다 달라질 수 있다. 브랜드 문체 가이드를 시스템 프롬프트에 고정하고, 생성 결과를 문체 채점 서브에이전트가 0~100점으로 평가해 기준 이하면 재생성하도록 루프를 추가하면 일관성을 유지할 수 있다.

FAQ

Q. Obsidian Publish를 쓰면 이 파이프라인이 필요 없지 않나?
Obsidian Publish는 Vault를 그대로 웹사이트로 노출하는 서비스다. 애드센스 삽입, 채널별 앵글 변환, 플랫폼 API 발행은 지원하지 않으므로 수익화 목적이라면 별도 파이프라인이 필요하다.
Q. Pandoc과 mistune 중 어느 것이 더 적합한가?
Pandoc은 LaTeX·docx 등 다양한 포맷 출력이 강점이지만 외부 바이너리 의존이다. mistune은 순수 파이썬으로 설치가 간단하고 커스텀 렌더러를 붙이기 쉬워 블로그 파이프라인에는 mistune이 더 실용적이다.
Q. Claude Code 서브에이전트 없이 GPT API만으로도 가능한가?
가능하다. 서브에이전트 아키텍처는 Claude Code 전용 개념이지만, GPT API를 단계별 함수 호출(function calling)로 묶어도 동일한 파이프라인을 구현할 수 있다. 다만 에이전트 간 컨텍스트 관리와 MCP 연동은 직접 구현해야 한다.
Q. frontmatter에서 어떤 필드를 발행 조건으로 쓰는 것이 실용적인가?
status: ready 하나로도 충분히 동작한다. 더 세분화하려면 channel: [blogger, tistory]로 발행 대상 채널을 지정하고, published_at으로 중복 발행을 방지하는 두 필드를 추가하면 파이프라인 제어가 훨씬 안정적이다.
Q. 노트 한 편을 여러 플랫폼에 발행할 때 중복 콘텐츠 패널티가 생기지 않는가?
동일 HTML을 여러 플랫폼에 올리면 구글이 중복으로 판단할 수 있다. 채널별로 도입부 2~3문장과 소제목을 다르게 바꾸는 '채널 앵글' 단계가 이 문제를 실질적으로 완화한다. 완전히 동일한 글을 그대로 복사하는 방식은 피해야 한다.

3줄 요약과 다음 글 예고

1. Obsidian 노트는 frontmatter·헤더·링크 구조가 이미 파이프라인 입력 형태에 가깝다.
2. 마크다운→HTML 변환 전 wikilink 치환·frontmatter 제거·이미지 경로 교체 3가지를 먼저 처리한다.
3. Claude Code 서브에이전트는 노트 선택부터 발행까지 단계별 역할을 분리해 파이프라인 안정성을 높인다.

다음 글에서는 Blogger API와 티스토리 Open API를 Python으로 연동해 실제 발행 자동화를 구성하는 방법을 다룰 예정이다. OAuth 토큰 관리와 초안 vs 발행 상태 제어가 핵심이다.

도구 기능은 업데이트가 잦아 공식 문서 재확인을 권한다.

댓글

이 블로그의 인기 게시물

마와린세 패스 완전정리 — 이세시마 여행 [1/9]

Windows 패키지 매니저 비교 — winget·Chocolatey·Scoop

우분투 26.04 LTS 설치·개발환경 세팅 가이드