심화 11단계 ★ 종합 프로젝트 — 블로그 운영 자동화
MCP · 스킬 · 서브에이전트 · 훅 · 예약 작업 · 플러그인을 하나로 엮어, 바로 이 블로그의 글 작성 파이프라인을 만듭니다
· 블로그 전용 프로젝트 폴더와
CLAUDE.md· 글쓰기 스킬 + 사실 확인·스타일 검수 서브에이전트 2명
· 저장할 때마다 HTML을 자동 검사하는 훅, 주간 초안 예약 작업
· 이 모든 걸 담은 플러그인 — 그리고 발행은 사람이
지금까지 배운 기능들은 따로 보면 "있으면 편한 도구"입니다. 하지만 엮어 놓으면 작은 편집부가 됩니다. 자료 조사 담당, 작가, 교정 담당, 편집장 알람까지 — 그리고 편집장(나)은 마지막에 원고를 읽고 발행 버튼만 누르면 됩니다. 주제는 일부러 이 블로그 자체로 골랐습니다. 매주 Claude에 대한 가이드 글을 샘플 HTML 스타일로 쓰는 일, 바로 그 과정을 자동화합니다.
1 완성 그림 — 파이프라인 한눈에
자료 수집(웹 검색·MCP) → 초안(블로그 스킬) → 검수(리뷰 서브에이전트) → 정기 실행(예약 작업) → 포장(플러그인) → 사람이 발행
웹 검색 · 커넥터(MCP)로 최신 소식 모으기 · 3·4단계
tistory-guide-writer 스킬 · 6단계
fact-checker · style-reviewer · 9단계
PostToolUse 훅 · 8단계
주간 예약 작업 · 10단계
플러그인 · 7단계
2 준비 — 프로젝트 폴더 구조
claude.ai 프로젝트로 쓰던 작업을 이번엔 내 컴퓨터 폴더로 옮깁니다. 폴더가 있어야 훅·서브에이전트·파일 저장까지 다 쓸 수 있기 때문입니다.
modulebit-blog/
├── CLAUDE.md # 블로그 운영 원칙 (항상 읽힘)
├── .claude/
│ ├── settings.json # 훅 등록
│ ├── hooks/
│ │ └── check_html.py # HTML 검사 스크립트
│ ├── skills/
│ │ └── tistory-guide-writer/
│ │ ├── SKILL.md # 글쓰기 매뉴얼
│ │ └── references/
│ │ └── sample.html # 스타일 기준 샘플
│ └── agents/
│ ├── fact-checker.md # 사실 확인 담당
│ └── style-reviewer.md # 스타일·맞춤법 담당
├── drafts/ # AI가 쓴 초안 (검토 대기)
└── published/ # 내가 발행한 최종본
# 터미널에서 뼈대 만들기 (맥·리눅스 기준)
mkdir -p modulebit-blog/.claude/{hooks,skills/tistory-guide-writer,agents} modulebit-blog/{drafts,published}
cd modulebit-blog
claude
git init) Claude가 파일을 망가뜨려도 언제든 되돌릴 수 있습니다. 자동화 프로젝트에서는 사실상 필수 안전장치입니다.3 1주차 — 뼈대 만들기 Day 1~5
Day 1~2 · CLAUDE.md 작성
CLAUDE.md는 "이 폴더에서 일할 때 항상 지킬 규칙"입니다. 스킬이 글 쓰는 방법이라면, CLAUDE.md는 이 블로그의 운영 원칙입니다. 짧고 단단하게 씁니다.
# 모듈비트 티스토리 블로그 작업 폴더
## 이 폴더는
- 모듈비트 티스토리에 올릴 Claude AI 가이드 글을 만드는 곳이다.
- 모든 글은 .cckr 스타일 HTML이며, 규칙은 tistory-guide-writer 스킬을 따른다.
## 폴더 규칙
- 새 초안은 반드시 drafts/ 에 저장한다. 파일명: YYYY-MM-DD-주제.html
- published/ 는 사람이 직접 옮기는 곳이다. 이 폴더의 파일은 절대 수정·삭제하지 않는다.
## 사실 원칙
- 명령어·메뉴 이름·요금·요금제별 지원 여부는 공식 문서나 출처로 확인한 것만 쓴다.
- 확인하지 못한 내용은 "설정 화면에서"처럼 일반적으로 쓰고, 초안 끝 메모에 남긴다.
- 가격·기능은 "2026년 9월 기준, 변동 가능"처럼 기준 시점을 적는다.
## 작업 순서
1. 초안 작성 후 fact-checker 로 사실 확인, style-reviewer 로 스타일 확인
2. 지적 사항을 반영해 다시 저장
3. 초안 맨 끝 HTML 주석에 "검수 요약"(확인한 출처, 남은 의문점)을 남긴다
## 하지 말 것
- 티스토리에 직접 발행하거나 로그인 시도하지 않는다.
- 실제 회사·고객 데이터를 예시에 넣지 않는다.
Day 3~4 · 글쓰기 스킬 가져오기
6단계에서 만든 블로그 스킬을 그대로 재사용합니다. 폴더째 .claude/skills/tistory-guide-writer/ 로 복사합니다(sample.html은 6단계처럼 references/ 안에). 아직 없다면 핵심만 이렇게 요약해 시작해도 됩니다.
---
name: tistory-guide-writer
description: 모듈비트 티스토리용 Claude 가이드 글을 .cckr 스타일 HTML로 작성할 때 사용
---
# 작성 순서
1. references/sample.html 의 상단 주석과 <style> 블록을 그대로 복사한다 (CSS 수정 금지)
2. 본문은 <div class="cckr"> 로 감싸고, 정의된 클래스만 사용한다
3. 모든 <p> 에 data-ke-size="size16", <h2> 에 data-ke-size="size26"
4. 구성: 머리말(cc-head) → 번호 붙은 h2 섹션 5~8개 → 체크리스트 → cc-foot
5. 말투: 존댓말, 일상 비유, 짧은 문장. 이모지는 ⏱ ★ ☐ 만
# 참고 파일
- 스타일 기준: ${CLAUDE_SKILL_DIR}/references/sample.html
Day 5 · 검수 서브에이전트 2명
검수를 작가와 같은 대화에서 하면 "자기 글에 관대한" 문제가 생깁니다. 별도의 컨텍스트를 가진 서브에이전트에게 맡기면 처음 보는 눈으로 읽어 줍니다. 두 파일을 .claude/agents/ 에 저장합니다.
.claude/agents/fact-checker.md
---
name: fact-checker
description: 블로그 초안 속 명령어·메뉴·요금·기능 설명이 사실인지 확인할 때 사용. 초안 작성 직후 반드시 사용.
tools: Read, Grep, Glob, WebSearch, WebFetch
model: sonnet
---
너는 IT 기술 블로그의 사실 확인 담당이다. 글을 고치지 말고 보고만 한다.
## 확인 대상
- 명령어, 옵션(플래그), 파일 경로, 메뉴 이름
- 요금제별 지원 여부, 가격, 제한(횟수·용량)
- "최근", "새로" 같은 시점 표현
## 방법
1. 초안에서 확인할 문장을 목록으로 뽑는다
2. 공식 문서(code.claude.com, support.claude.com, anthropic.com)를 우선 확인한다
3. 공식 출처가 없으면 "미확인"으로 둔다. 추측으로 "맞음" 처리하지 않는다
## 보고 형식
| 문장 | 판정(맞음/틀림/미확인) | 근거 URL | 수정 제안 |
마지막에 "반드시 고칠 것" 3개 이내로 요약.
.claude/agents/style-reviewer.md
---
name: style-reviewer
description: 블로그 초안이 모듈비트 .cckr 스타일 규칙과 말투를 지키는지 검토할 때 사용
tools: Read, Grep, Glob
model: haiku
---
너는 블로그 편집자다. 글을 고치지 말고 지적 목록만 돌려준다.
## 점검 항목
1. 상단 주석과 <style> 블록이 sample.html 과 동일한가
2. 정의되지 않은 클래스나 인라인 style 을 쓰지 않았는가
3. 모든 <p> 에 size16, <h2> 에 size26 이 있는가
4. 존댓말이 일관적인가, 문장이 너무 길지 않은가(한 문장 80자 안팎)
5. 맞춤법·띄어쓰기, 이모지 사용 규칙(⏱ ★ ☐ 외 금지)
6. 체크리스트와 cc-foot(이전 글·다음 글·공식 문서)이 있는가
## 보고 형식
심각도(높음/보통/낮음) · 위치(섹션 번호) · 문제 · 제안
따라해 보기 — 초안을 하나 만든 뒤 이렇게 부탁합니다.
drafts/2026-09-24-memory-guide.html 을
fact-checker 와 style-reviewer 에이전트로 각각 검토하고,
두 보고서를 합쳐 "고칠 것 목록"을 만들어줘. 아직 파일은 고치지 마.
4 2주차 Day 1~2 — 훅으로 HTML 자동 검사
"태그 닫았어?"를 매번 부탁하지 말고 규칙으로 걸어 둡니다. Claude가 HTML 파일을 저장(Write/Edit)할 때마다 검사 스크립트가 돌고, 문제가 있으면 Claude에게 되돌려 보내 스스로 고치게 합니다.
.claude/hooks/check_html.py
#!/usr/bin/env python3
import sys, json
from html.parser import HTMLParser
data = json.load(sys.stdin) # 훅 입력은 stdin 의 JSON
path = data.get("tool_input", {}).get("file_path", "")
if not path.endswith(".html"):
sys.exit(0) # HTML 이 아니면 통과
VOID = {"br", "img", "hr", "meta", "link", "input"}
class Checker(HTMLParser):
def __init__(self):
super().__init__()
self.stack, self.errors = [], []
def handle_starttag(self, tag, attrs):
a = dict(attrs)
line = self.getpos()[0]
if tag == "p" and a.get("data-ke-size") != "size16":
self.errors.append(f"{line}행: <p> 에 data-ke-size=\"size16\" 없음")
if tag == "h2" and a.get("data-ke-size") != "size26":
self.errors.append(f"{line}행: <h2> 에 data-ke-size=\"size26\" 없음")
if tag not in VOID:
self.stack.append((tag, line))
def handle_endtag(self, tag):
if tag in VOID:
return
if self.stack and self.stack[-1][0] == tag:
self.stack.pop()
else:
self.errors.append(f"{self.getpos()[0]}행: </{tag}> 짝이 맞지 않음")
c = Checker()
with open(path, encoding="utf-8") as f:
c.feed(f.read())
for tag, line in c.stack:
c.errors.append(f"{line}행: <{tag}> 가 닫히지 않음")
if c.errors:
print("HTML 검사 실패:\n" + "\n".join(c.errors[:20]), file=sys.stderr)
sys.exit(2) # 2 = Claude 에게 이유 전달
sys.exit(0)
.claude/settings.json — 파일 저장 직후 검사 실행
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command",
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check_html.py" }
]
}
]
}
}
/hooks 로 등록 상태를 봅니다(보기 전용, 수정은 JSON 파일에서).0 = 통과, 2 = 문제 있음(stderr 내용이 Claude에게 전달), 그 밖의 값 = 막지 않는 오류. 훅이 말썽이면 설정에 "disableAllHooks": true 로 잠시 꺼 둘 수 있습니다.5 2주차 Day 3 — 주간 초안 예약 작업 ★
이제 매주 "이번 주 Claude 업데이트 정리" 초안이 알아서 drafts 폴더에 쌓이게 합니다. Cowork(데스크톱 앱)에서 /schedule 을 입력하고 아래 프롬프트를 붙여 넣으세요.
매주 금요일 오후 3시에 실행해줘.
[목표]
이번 주(지난 7일) Claude 관련 업데이트를 정리한
모듈비트 티스토리용 초안 HTML을 만든다.
[자료 수집]
- 웹 검색으로 Anthropic 공식 발표, Claude 공식 문서 변경, 릴리스 노트를 찾는다.
- 공식 출처가 아닌 기사·커뮤니티 글은 "참고"로만 쓰고 단정하지 않는다.
- 주제는 최대 5개. 일반 사용자에게 영향이 큰 것부터.
[작성]
- tistory-guide-writer 스킬의 규칙과 sample.html 스타일을 그대로 따른다.
- 제목: "이번 주 Claude 업데이트 정리 (YYYY년 M월 D일)"
- 항목마다: 무엇이 바뀌었나 / 누구에게 해당되나(요금제) / 따라해 보기 한 줄 / 출처 링크
[검수]
- 저장 전에 fact-checker 기준으로 스스로 점검하고,
확인 못 한 내용은 본문에서 빼거나 "확인 필요"로 표시한다.
- 초안 맨 끝 HTML 주석에 확인한 출처 목록과 남은 의문점을 적는다.
[저장]
- 연결된 modulebit-blog 폴더의 drafts/ 에
YYYY-MM-DD-claude-weekly.html 로 저장한다.
[하지 말 것]
- 티스토리 발행, 로그인, 메일 발송은 하지 않는다.
- published/ 폴더는 건드리지 않는다.
- 새 소식이 없으면 "이번 주 주요 업데이트 없음" 메모 파일만 남긴다.
/schedule)이나 claude -p + cron으로도 만들 수 있습니다. 어떤 도구든 핵심은 같습니다 — 결과는 drafts에 파일로, 발행은 사람이.6 2주차 Day 4~5 — 플러그인 포장과 회고
Day 4 · 플러그인으로 포장하기
스킬·에이전트·훅이 폴더 여기저기 흩어져 있으면 다른 컴퓨터로 옮기거나 동료에게 주기 어렵습니다. 플러그인으로 묶으면 설치 한 번으로 끝납니다. 7단계에서 만든 modulebit-blog 플러그인에 에이전트·훅을 더해도 되지만, 여기서는 프로젝트 폴더 이름(modulebit-blog)과 헷갈리지 않도록 tistory-blog 라는 새 이름으로 묶습니다.
tistory-blog/
├── .claude-plugin/
│ └── plugin.json
├── skills/
│ └── tistory-guide-writer/
│ ├── SKILL.md
│ └── references/
│ └── sample.html
├── agents/
│ ├── fact-checker.md
│ └── style-reviewer.md
└── hooks/
└── hooks.json
.claude-plugin/plugin.json
{
"name": "tistory-blog",
"description": "모듈비트 티스토리 Claude 가이드 글 작성·검수 도구 세트",
"version": "1.0.0",
"author": { "name": "모듈비트" }
}
# 로컬에서 시험 → 검증
claude --plugin-dir ./tistory-blog
claude plugin validate ./tistory-blog
# 세션 안에서 수정 사항 반영
/reload-plugins
# 이름공간이 붙어 호출됨
/tistory-blog:tistory-guide-writer 프로젝트 기능 가이드
Day 5 · 회고 — 사람 검토 체크리스트
drafts에 초안이 쌓였다면, 발행 전 이 목록으로 직접 확인합니다. 이 과정은 자동화하지 않는 것이 핵심입니다.
7 확장 아이디어 — 어디까지 자동화할까
8 정리 & 체크리스트
심화 과정 1~10단계가 한 폴더 안에서 전부 돌아가면 종합 프로젝트 완성입니다.
claude plugin validate 를 통과했고, 이름공간 명령어로 불러진다.공식 문서: 스킬 · 서브에이전트 · 훅 · 플러그인 · CLAUDE.md(메모리)
'AI Claude > Part 2. 심화과정' 카테고리의 다른 글
| Claude 심화 12단계 고수의 운영법 — 컨텍스트 · 비용 · 보안 (0) | 2026.09.24 |
|---|---|
| Claude 심화 10단계 자동화 — 내가 없어도 일하는 Claude (0) | 2026.09.24 |
| Claude 심화 9단계 서브에이전트 — AI 팀 꾸리기 (0) | 2026.09.24 |
| Claude 심화 8단계 커스텀 명령어와 훅(Hook) (0) | 2026.09.24 |
| Claude 심화 7단계 플러그인과 마켓플레이스 (0) | 2026.09.24 |