블로그 글쓰기가 귀찮아서 Claude한테 통째로 맡겨봤다

Claude

Claude

2026년 2월 28일3 분 소요

블로그 글쓰기가 귀찮아서 Claude한테 통째로 맡겨봤다
🌳
요구사항 정리부터 문체 분석, Notion MCP 삽질, 커버 이미지 자동화까지 — /blog-post 한 마디로 끝나는 블로그 자동화 시스템을 만든 전체 기록입니다.
"작업 끝나고 블로그 쓰려면 또 처음부터 정리해야 하나… 매번 귀찮아서 안 쓰게 된다."

라는 생각을 오랜 기간 해왔습니다.


개발자라면 누구나 공감할 겁니다. 코드를 짜고, 버그를 고치고, 인프라를 세팅하는 건 재밌는데… 그걸 글로 정리하는 건 또 다른 차원의 귀찮음입니다.


그래서 생각했습니다. Claude Code와 대화하면서 작업한 맥락이 이미 다 남아있는데, 이걸 그대로 블로그 글로 변환하면 되지 않나? Notion MCP로 DB에 직접 쓰면 되고, 커스텀 스킬로 /blog-post 한 마디면 끝나는 거 아닌가.

그렇게 바로 실행으로 옮겼습니다.


🎯발단: 요구사항을 정리하자


처음에는 막연하게 '블로그 자동으로 써주는 스킬 만들어줘'라고 했습니다.


하지만 이게 생각보다 모호했습니다. 스킬을 어떻게 호출할 건지, 글 내용은 어떻게 결정할 건지, 발행 상태는 어떻게 할 건지…


그래서 Claude Code의 /vague 스킬을 사용했습니다. 모호한 요구사항을 구체적인 스펙으로 바꿔주는 스킬인데, 질문을 던져가며 하나씩 명확하게 만들었습니다.


정리된 결과는 이랬습니다.


  • 호출 방식: /blog-post로 호출. 대화 맥락 기반으로 자유롭게
  • 입력: $ARGUMENTS로 카테고리, 태그, 키워드 등 선택적 지정
  • 발행 상태: 항상 Draft — 사람의 검수를 거친 뒤 발행
  • 메타데이터: 지정하면 그대로, 안 하면 자동 추론
  • 구현 형태: ~/.claude/commands/blog-post.md 단일 파일


이렇게 정리하고 나니 뭘 만들어야 할지가 명확해졌습니다.


🔍기존 포스트 전체 분석


스킬이 제 말투를 모방하려면 기존 글을 분석해야 합니다. 대충 몇 개만 볼까 했지만, 이왕 하는 거 8개 전체를 다 읽기로 했습니다.


Notion MCP로 Blog Posts DB를 조회하고, 각 포스트의 블록을 전부 가져왔습니다. 병렬로 두 개의 에이전트를 돌려서 4개씩 분석했습니다.


발견한 문체 패턴


분석 결과, 제 글에는 꽤 일관된 패턴이 있었습니다.


  • 합니다체 + 반말 혼용 — 존댓말이 기본이지만, 독백이나 강조에서는 '~다/~였다'로 자연스럽게 전환
  • 짧고 펀치감 있는 문장 — 한 문단이 2-3문장을 넘기지 않음
  • 유머와 자기비하 — '띨빵한 건 제가 아니라 LLM입니다', '퉁치겠습니다'
  • 말줄임표(…) — 여운이나 난감함 표현에 적극 활용


발견한 블록 패턴


블록 사용에도 뚜렷한 공식이 있었습니다.


첫 번째, 모든 글은 Callout(🌳 green_background) → Quote(이탤릭) → Paragraph 순서로 시작합니다. Callout에 핵심 메시지를 볼드로 요약하고, Quote에 동기가 된 질문을 넣고, 다음 문단으로 자연스럽게 이어지는 구조입니다.


두 번째, heading_1에는 항상 이모지 접두사가 붙습니다. ☁️, 🐧, 🪟, 💻, 🔋 등. 반면 heading_2heading_3에는 이모지가 없습니다.


세 번째, Callout이 용도별로 다른 아이콘과 색상을 썩니다. 도입부는 🌳 green, 팁은 💡 gray, 경고는 ⚠️ yellow, 중요 경고는 💡 red.


네 번째, 글 마무리에는 반드시 🤗 이모지가 들어갑니다. 시리즈물은 '다음 포스트에서는 ~을 알아보겠습니다🤗', 단독 글은 '끝입니다!' 또는 '끝났습니다🤗'.


이 패턴들을 전부 스킬 프롬프트에 규칙으로 녹여냈습니다.


🔧Notion MCP 삽질기


스킬의 핵심은 Notion에 직접 글을 쓰는 것입니다. @notionhq/notion-mcp-server를 통해 Notion API를 호출하면 되는데… 과정이 순탄하지만은 않았습니다.


children이 안 먹힌다


페이지를 만들면서 동시에 본문 블록을 넣으려고 post-pagechildren 파라미터를 사용했는데, validation error가 떴습니다.


해결법은 간단했는데요, 페이지를 먼저 만들고 → patch-block-children으로 블록을 추가하는 2단계 방식을 써야 합니다. 한 방에 되면 좋겠지만 MCP 스키마의 한계인 것 같습니다.


스키마에 없는데 동작한다?


MCP 스키마에는 paragraphbulleted_list_item만 정의되어 있습니다. 그런데 callout, quote, heading_1, code, divider, table_of_contents 등을 그냥 넣어봤더니 다 동작합니다.


스키마는 타입 검증용이라 Notion API가 실제로 지원하는 블록 타입은 훨씬 많은 거였습니다. 이걸 발견한 덕에 제 블로그의 다양한 블록 패턴을 그대로 재현할 수 있게 되었습니다.


동명의 DB 함정


Blog Posts라는 이름의 DB가 두 개였습니다.


하나는 진짜 블로그 글이 들어있는 DB, 다른 하나는 빈 DB. ID를 잘못 쓰면 텝 빈 곳에 글을 쓰게 됩니다. 실제로 처음에 그랬습니다…


⚠️
Notion MCP로 작업할 때는 DB 이름이 아닌 DB ID로 정확하게 지정해야 합니다. 동명의 DB가 있을 수 있습니다.


📝스킬 파일 완성


최종적으로 만들어진 ~/.claude/commands/blog-post.md의 구조는 이렇습니다.


plain text
blog-post.md
├── 실행 절차 (5단계)
│   ├── 1. 주제 파악
│   ├── 2. 메타데이터 결정
│   ├── 3. 글 작성
│   ├── 4. 커버 이미지 검색
│   └── 5. Notion에 저장
├── DB 스키마 규칙
│   ├── 필수 속성 (title, slug, status, date, category)
│   └── 선택 속성 (tags, series, author, summary...)
├── 문체 가이드
│   ├── 톤 & 보이스
│   ├── 말투 패턴 (실제 글에서 추출)
│   └── 글 구조 패턴
└── 노션 블록 사용 가이드
    ├── 도입부 공식
    ├── Heading / Callout / Quote 규칙
    ├── 텍스트 스타일링 (annotations)
    ├── 여백 규칙
    └── 마무리 공식


핵심은 문체 가이드입니다. 기존 포스트 8개에서 추출한 말투 패턴을 4가지 카테고리로 분류했습니다.


  • 서사적 전개 — '를 오랜 기간 고민했습니다', '라는 생각이 들어서 바로 실행으로 옮겼습니다'
  • 유머/자기비하 — '이야~ 이거 정말 큰일 난 것입니다', '그렇습니다. 생각보다 시간이 없었습니다…'
  • 기술 설명 — '해결법은 간단했는데요', '이 한 줄이면 복잡한 후처리가 필요 없습니다'
  • 열거/강조 — '첫 번째, ~. 두 번째, ~.' 볼드 서수로 열거


이런 규칙을 스킬 파일에 명시해두면, Claude가 제 말투를 자연스럽게 따라합니다.



🖼️커버 이미지 자동화


블로그 포스트에 커버 이미지가 없으면 좀 허전합니다. 근데 매번 직접 고르기는… 귀찮죠.


Unsplash에서 이미지를 자동으로 검색해서 커버로 설정하면 되지 않을까? 라는 생각이 들었습니다.


Unsplash API 없이 검색하기


처음에는 Unsplash 페이지를 직접 크롤링하려고 했는데, 클라이언트 사이드 렌더링이라 HTML만 달랑 오더군요. API 키를 발급받자니 또 번거롭고…


그런데 Unsplash 내부 API가 있었습니다. API 키도 필요 없는.


plain text
https://unsplash.com/napi/search/photos?query={키워드}&per_page=5


이 엔드포인트로 요청하면 JSON 응답이 그대로 옵니다. urls.regular에서 1080px 이미지 URL을 뽑아오면 끝.


Notion 커버로 설정


Notion API의 cover 파라미터가 external URL을 지원한다는 걸 확인했습니다.


json
{
  "cover": {
    "type": "external",
    "external": {
      "url": "https://images.unsplash.com/photo-..."
    }
  }
}


페이지 생성 시 이 파라미터를 함께 넘기면 커버 이미지가 자동으로 설정됩니다. 스킬 파일에는 글의 주제 키워드를 영문으로 변환해서 검색하도록 지시를 넣었습니다.


💡
커버 이미지 URL을 직접 지정하거나, "커버 없이"를 명시하면 검색을 건너뜁니다.



👥AI 저자 등록


글을 쓰는 건 저와 Claude가 함께 하는 건데, 저자가 저 혼자로 되어 있으면 좀 그렇잖아요.


근데 문제가 있었습니다. Notion의 people 타입 속성은 실제 워크스페이스 유저만 할당할 수 있습니다. Claude는 Notion 계정이 없으니까요.


대리 계정 방식


해결법은 간단했는데요, 제 보조 이메일 계정을 Notion 워크스페이스에 초대하고 Authors DB에 "Claude"라는 이름으로 등록했습니다. 프로필 사진도 Claude 아이콘으로 바꿔두니 블로그에서 보기에도 자연스럽습니다.


"AI가 공저자라니 좀 웃기긴 한데, 실제로 글의 절반 이상을 쓰고 있으니 당연한 크레딧이다."


스킬 파일에 두 저자의 ID를 하드코딩해두고, 모든 포스트에 자동으로 공저자가 들어가도록 설정했습니다.


json
"author": {
  "people": [
    { "id": "2333149c-..." },  // 최규민
    { "id": "0aac7614-..." }   // Claude
  ]
}



🎯최종 사용 시나리오


이 모든 걸 합치면, 실제 사용 흐름은 이렇습니다.


  1. Claude Code에서 작업을 수행합니다. (코딩, 서버 설정, 자동화 구축 등)
  2. /blog-post를 입력합니다. 필요하면 주제나 키포인트를 인자로 넘깁니다.
  3. Claude가 대화 맥락에서 주제를 파악하고, 메타데이터를 결정합니다.
  4. Unsplash에서 커버 이미지를 자동 검색합니다.
  5. Notion에 Draft 상태로 페이지를 생성하고 본문 블록을 추가합니다.
  6. 저는 Draft를 확인하고, 필요하면 수정한 뒤 상태를 Public으로 바꿉니다.


💡
항상 Draft로 저장되기 때문에 실수로 미완성 글이 발행될 일은 없습니다. 최종 발행은 사람의 못.


작업 끝나고 대화 맥락이 살아있을 때 바로 글을 뽑아내는 게 핵심입니다. 나중에 기억 더듬으며 쓰는 것과는 디테일이 다릅니다.



사실 이 글 자체가 /blog-post 스킬로 생성된 글입니다. 블로그 자동화 시스템을 만드는 과정을 기록한 글을, 그 시스템이 직접 쓰고 있는 거죠.


메타적이다 못해 좀 기분이 이상한데… 어쨌든 동작은 합니다.


요구사항 정리부터 스킬 완성까지, "딸깍" 한 번이면 글이 나오는 시스템을 만드는 여정은 이걸로 끝났습니다🤗





Claude

Claude

AI Agent

Claude for blog post automation