블로그 글쓰기가 귀찮아서 Claude한테 통째로 맡겨봤다
Claude
2026년 2월 28일3 분 소요
/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_2와 heading_3에는 이모지가 없습니다.
세 번째, Callout이 용도별로 다른 아이콘과 색상을 썩니다. 도입부는 🌳 green, 팁은 💡 gray, 경고는 ⚠️ yellow, 중요 경고는 💡 red.
네 번째, 글 마무리에는 반드시 🤗 이모지가 들어갑니다. 시리즈물은 '다음 포스트에서는 ~을 알아보겠습니다🤗', 단독 글은 '끝입니다!' 또는 '끝났습니다🤗'.
이 패턴들을 전부 스킬 프롬프트에 규칙으로 녹여냈습니다.
🔧Notion MCP 삽질기
스킬의 핵심은 Notion에 직접 글을 쓰는 것입니다. @notionhq/notion-mcp-server를 통해 Notion API를 호출하면 되는데… 과정이 순탄하지만은 않았습니다.
children이 안 먹힌다
페이지를 만들면서 동시에 본문 블록을 넣으려고 post-page의 children 파라미터를 사용했는데, validation error가 떴습니다.
해결법은 간단했는데요, 페이지를 먼저 만들고 → patch-block-children으로 블록을 추가하는 2단계 방식을 써야 합니다. 한 방에 되면 좋겠지만 MCP 스키마의 한계인 것 같습니다.
스키마에 없는데 동작한다?
MCP 스키마에는 paragraph와 bulleted_list_item만 정의되어 있습니다. 그런데 callout, quote, heading_1, code, divider, table_of_contents 등을 그냥 넣어봤더니 다 동작합니다.
스키마는 타입 검증용이라 Notion API가 실제로 지원하는 블록 타입은 훨씬 많은 거였습니다. 이걸 발견한 덕에 제 블로그의 다양한 블록 패턴을 그대로 재현할 수 있게 되었습니다.
동명의 DB 함정
Blog Posts라는 이름의 DB가 두 개였습니다.
하나는 진짜 블로그 글이 들어있는 DB, 다른 하나는 빈 DB. ID를 잘못 쓰면 텝 빈 곳에 글을 쓰게 됩니다. 실제로 처음에 그랬습니다…
📝스킬 파일 완성
최종적으로 만들어진 ~/.claude/commands/blog-post.md의 구조는 이렇습니다.
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 키도 필요 없는.
https://unsplash.com/napi/search/photos?query={키워드}&per_page=5이 엔드포인트로 요청하면 JSON 응답이 그대로 옵니다. urls.regular에서 1080px 이미지 URL을 뽑아오면 끝.
Notion 커버로 설정
Notion API의 cover 파라미터가 external URL을 지원한다는 걸 확인했습니다.
{
"cover": {
"type": "external",
"external": {
"url": "https://images.unsplash.com/photo-..."
}
}
}페이지 생성 시 이 파라미터를 함께 넘기면 커버 이미지가 자동으로 설정됩니다. 스킬 파일에는 글의 주제 키워드를 영문으로 변환해서 검색하도록 지시를 넣었습니다.
👥AI 저자 등록
글을 쓰는 건 저와 Claude가 함께 하는 건데, 저자가 저 혼자로 되어 있으면 좀 그렇잖아요.
근데 문제가 있었습니다. Notion의 people 타입 속성은 실제 워크스페이스 유저만 할당할 수 있습니다. Claude는 Notion 계정이 없으니까요.
대리 계정 방식
해결법은 간단했는데요, 제 보조 이메일 계정을 Notion 워크스페이스에 초대하고 Authors DB에 "Claude"라는 이름으로 등록했습니다. 프로필 사진도 Claude 아이콘으로 바꿔두니 블로그에서 보기에도 자연스럽습니다.
"AI가 공저자라니 좀 웃기긴 한데, 실제로 글의 절반 이상을 쓰고 있으니 당연한 크레딧이다."
스킬 파일에 두 저자의 ID를 하드코딩해두고, 모든 포스트에 자동으로 공저자가 들어가도록 설정했습니다.
"author": {
"people": [
{ "id": "2333149c-..." }, // 최규민
{ "id": "0aac7614-..." } // Claude
]
}🎯최종 사용 시나리오
이 모든 걸 합치면, 실제 사용 흐름은 이렇습니다.
- Claude Code에서 작업을 수행합니다. (코딩, 서버 설정, 자동화 구축 등)
/blog-post를 입력합니다. 필요하면 주제나 키포인트를 인자로 넘깁니다.- Claude가 대화 맥락에서 주제를 파악하고, 메타데이터를 결정합니다.
- Unsplash에서 커버 이미지를 자동 검색합니다.
- Notion에 Draft 상태로 페이지를 생성하고 본문 블록을 추가합니다.
- 저는 Draft를 확인하고, 필요하면 수정한 뒤 상태를 Public으로 바꿉니다.
작업 끝나고 대화 맥락이 살아있을 때 바로 글을 뽑아내는 게 핵심입니다. 나중에 기억 더듬으며 쓰는 것과는 디테일이 다릅니다.
사실 이 글 자체가 /blog-post 스킬로 생성된 글입니다. 블로그 자동화 시스템을 만드는 과정을 기록한 글을, 그 시스템이 직접 쓰고 있는 거죠.
메타적이다 못해 좀 기분이 이상한데… 어쨌든 동작은 합니다.
요구사항 정리부터 스킬 완성까지, "딸깍" 한 번이면 글이 나오는 시스템을 만드는 여정은 이걸로 끝났습니다🤗