AI 적용 사례 – Claude Code로 블로그 자동화하기
이 블로그는 Claude Code로 블로그 자동화를 해 둔 저장소에서 운영합니다. Claude Code가 원본 폴더를 읽어 초안을 쓰고, 검사 스크립트와 검증 에이전트를 거친 다음 워드프레스에 임시글로 올려 둡니다. 그 글을 제가 읽어 보고 고칠 곳을 정한 뒤 발행해요.
지금 읽고 계신 이 글도 같은 엔진으로 만들었습니다. 개념 설명은 AI 자동화 카테고리의 앞선 글에 맡기고, 여기서는 저장소에 실제로 들어 있는 파일과 코드를 보여 드릴게요.
블로그 자동화로 풀려던 일
이 블로그는 AI로 토스 미니앱을 만들고 운영하는 실제 기록입니다. 글 쓰는 절차를 적은 스킬 파일의 첫 문단에는 글의 가치가 “진짜 있었던 일과 진짜 숫자”에서 나온다고 적혀 있고, 그래서 순서를 정해 둔다는 말이 바로 이어져요.
글의 재료는 이 저장소 밖에 있습니다. 미니앱을 만드는 저장소와 오픈마켓 문서 폴더가 원본이고, 설정 파일에 그 위치를 별칭으로 적어 두었습니다. 규칙 파일에는 원본 폴더를 읽기만 하고 고치지 않는다는 줄이 있어요.
블로그 자동화 엔진의 실행기는 ./wc 하나입니다.

글 한 편이 나오는 여섯 단계

순서는 스킬 파일에 적힌 그대로입니다.
- 원본 읽기.
./wc dossier가 원본 자료를 한 파일로 모아 줍니다. 이 묶음은 출발점이고, 글에 쓸 사실은 원본 파일을 직접 열어 확인합니다. - 초안 쓰기. 문체 파일을 먼저 읽고 초안과 영상, 도식을 만듭니다.
- 기계 검사.
./wc check가 세 가지 검사를 한 번에 돌립니다. - 사실 검증. 검증 에이전트가 글을 원본과 대조해 보고합니다.
- 임시글.
./wc push가 워드프레스에 올리고 보기 주소를 출력합니다. - 발행. 제가 글을 보고 발행하라고 말합니다.
다섯 번째 단계의 올리기는 워드프레스 REST API로 합니다. 본문과 함께 카테고리와 태그가 올라가고, 검색 제목과 메타 설명, 대표 키워드는 Rank Math 쪽에 따로 적어 넣어요.

카드의 점수 83은 올린 뒤 편집 화면에서 확인해 기록해 둔 값이고, 올리는 명령이 계산해 주는 숫자는 아닙니다. 상태가 publish로 나오는 것은 이 글이 이미 발행된 뒤라서 그래요.
에이전트 스킬 – 반복 작업을 절차로 묶는 방법단계마다 맡은 장치가 다르다

제 나름대로 묶으면 이 블로그 자동화의 장치는 세 종류입니다. 절차를 적은 문서, 명령으로 실행하는 스크립트, 그리고 따로 띄우는 에이전트예요.
| 맡은 일 | 파일 | 하는 일 |
|---|---|---|
| 절차 | SKILL.md, style.md |
무엇을 쓸지 정하기부터 사용자에게 알리기까지 번호 붙인 일곱 절, 문체와 본문 문법 |
| 글감 묶음 | dossier.py |
원본 자료를 한 파일로 모으고 민감한 키의 값은 가려서 내보낸다 |
| 기계 검사 | guard.py, seo.py, tone.py |
공개하면 안 되는 값, 검색·형식, AI 티 나는 문체를 본다 |
| 사실 검증 | wolcheon-fact-checker.md |
글을 원본과 대조해 틀린 곳을 보고한다 |
| 영상과 도식 | video.py, explainer.py, diagram.py |
앱 시연 영상, 도식 영상과 대표 이미지, 본문 도식을 만든다 |
| 변환과 업로드 | render.py, wp.py |
마크다운을 HTML로 바꿔 워드프레스에 올린다 |
영상은 글의 종류에 따라 만드는 방법이 다릅니다. 앱 글은 빌드된 앱을 로컬에서 띄우고 대본에 적은 버튼을 실제로 눌러 가며 화면을 찍은 뒤 자막을 얹어요. 이 글처럼 앱 화면이 없는 글은 장면을 도식으로 그려 1/24초씩 넘기며 찍습니다.
목차, FAQ 접기, 함께 읽기 카드, 글 끝의 고지문은 본문에 쓰지 않고 render.py가 HTML로 바꾸면서 붙입니다. FAQ 문답과 함께 읽을 글은 원고 머리의 설정 칸에 적어 둡니다.
절차는 스킬 파일 하나에 적었다
에이전트 스킬은 반복하는 절차를 SKILL.md에 적어 두는 방식입니다. Claude Code 공식 문서는 여러 단계짜리 절차를 채팅에 계속 붙여 넣고 있을 때 스킬을 만들라고 안내합니다.

같은 문서는 Claude Code의 스킬이 에이전트 스킬(Agent Skills) 오픈 표준을 따른다고 적습니다. 스킬의 설명은 늘 컨텍스트에 올라가 있고 본문은 스킬이 쓰일 때만 불려 오는데, 그래서 긴 참고 자료를 넣어 둬도 쓰기 전에는 비용이 거의 들지 않는다는 설명이에요. 이 블로그 자동화에서는 글 한 편을 쓰는 절차 전체가 스킬 하나에 들어 있습니다.
다섯 번째 절은 이렇게 생겼습니다.
## 5. 사실 검증
`wolcheon-fact-checker` 에이전트에 슬러그를 넘긴다. 내가 쓴 글의 오류는 내가 잘 못 보기 때문에 이 단계는 건너뛰지 않는다. 넘길 때 내가 확신하지 못하는 주장을 구체적으로 적어 준다.
"틀림"과 "근거 없음"은 전부 고치거나 지운다. 고친 뒤 `./wc check`를 다시 돌린다.스킬 본문에는 명령과 함께 결과를 어떻게 다룰지도 적혀 있습니다. 기계 검사 절에는 오류는 전부 고치고 경고는 하나씩 판단하되 무시한다면 이유가 있어야 한다는 줄이 있어요.
여러 편을 한꺼번에 쓸 때
스킬에는 여러 서비스의 글을 한꺼번에 요청받으면 서비스마다 에이전트를 하나씩 띄워 병렬로 쓴다는 절차도 있습니다. 이때 작성 에이전트에게는 원고와 검사까지만 맡기고, 연재 목록 수정과 올리기는 맡긴 쪽이 하나씩 합니다.
오류가 있으면 올라가지 않는다
기계 검사 가운데 공개 금지 가드는 글 전체를 훑는 함수 하나입니다.
def scan_text(text: str, guard_cfg: dict, denylist: set[str] = frozenset()) -> list[Finding]:
findings: list[Finding] = []
for code, label, pattern in SECRET_PATTERNS:
for match in sorted(set(re.findall(pattern, text))):
findings.append(Finding("error", f"secret/{code}", f"{label}가 글에 있습니다: {match}"))
for value in sorted(denylist):
if re.search(rf"(?<![\w.-]){re.escape(value)}(?![\w-])", text):
findings.append(Finding("error", "secret/source-value", f"원본의 민감한 값이 글에 있습니다: {value}"))
for pattern in guard_cfg.get("banned_phrases", []):
match = re.search(pattern, text)
if match:
findings.append(Finding("error", "claim/banned", f"단정·보장 표현입니다: “{match.group(0)}”"))
return findings보는 것은 세 갈래입니다. 광고 지면 ID나 API 키처럼 미리 정해 둔 패턴, 글이 근거로 삼은 원본 JSON에서 이름이 id, key, token 같은 말로 끝나는 키에 달린 값, 설정 파일에 적어 둔 단정·보장 표현이에요. 셋 다 경고 없이 오류로만 나옵니다.
가드가 넘겨받는 글자
- 가드는 제목과 설명이 든 frontmatter, 코드박스 안의 글자까지 합친 텍스트를 받습니다.
- 원본 JSON에서 모은 값 가운데 다섯 글자가 안 되는 것은 뺍니다. 함수 설명에는 너무 짧은 값은 오탐이라 뺀다고 적혀 있어요.
- 이 파일 맨 위에는 여기서 나온 오류에 우회 옵션이 없고 글을 고쳐야 한다는 설명이 있습니다.
검사를 통과하지 않은 글은 올리는 명령에서 한 번 더 걸립니다.
def cmd_push(args) -> int:
site, state = config.load_site(), config.load_state()
post = postmod.load(args.slug)
print(f"\n{post.slug}")
if not _report(_check(post, site)):
print("\n오류를 고친 뒤 다시 올리세요.")
return 1_check는 ./wc check가 부르는 것과 같은 함수이고, 워드프레스에 접속하는 코드는 이 일곱 줄 아래에 있습니다.
나머지 두 검사는 성격이 다릅니다. 검색·형식 점검은 대체 텍스트 없는 이미지, 없는 글로 가는 내부 링크, 25줄을 넘는 코드박스를 오류로 잡고 키워드 위치는 경고로 알려 줍니다. 문체 점검은 같은 종결어미가 네 문장 이어지는 곳 같은 것을 찾는데, 전부 경고라서 고칠지는 글쓴이가 판단합니다.
쓴 쪽과 검증하는 쪽을 나눴다
이 블로그 자동화에서 사실 검증은 서브에이전트가 맡습니다. 공식 문서에 따르면 서브에이전트는 자기 컨텍스트 창에서 따로 정한 시스템 프롬프트와 도구로 일하고, 프로젝트용은 .claude/agents/ 폴더에 파일로 둡니다.

이 저장소의 검증 에이전트 파일에는 도구로 Read, Grep, Glob, Bash 네 가지가 적혀 있고, 지침 첫 문단에는 “글을 고치지 않는다. 틀린 곳을 찾아 보고만 한다.”가 있습니다. 글쓴이는 방금 글을 썼기 때문에 자기 글의 오류를 잘 못 보니 처음 보는 눈으로 확인하라는 문장도 들어 있어요.
확인 항목은 수치, 코드, 서술, 스크린샷 설명, 공개 금지 값, 과장입니다. 글에서 계산한 합계나 비율은 직접 다시 계산하고, 코드박스는 원본 파일의 실제 코드와 일치하는지 봅니다. 마지막 메시지는 정해 둔 형식으로만 쓰게 했습니다.
판정: 통과 | 수정 필요
틀림 (반드시 고칠 것)
- "글의 문장" → 원본은 이렇다 (파일 경로:줄)
근거 없음 (원본에서 못 찾음)
- "글의 문장" → 찾아본 곳
애매함 (글쓴이가 판단할 것)
- "글의 문장" → 이유
확인한 수치 N개 중 일치 M개형식 바로 아래에는 찾지 못한 것을 맞다고 치지 않고, 확인하지 못했으면 “근거 없음”에 적으라는 줄이 붙어 있습니다.
발행은 사람이 말했을 때만
블로그 자동화라고 해도 끝까지 자동으로 가지는 않습니다. 규칙 파일(CLAUDE.md)의 “지킬 것” 앞 세 줄이에요.
- 글의 수치·사실은 원본에서 확인한 것만 쓴다. 확인 못 하면 뺀다.
- `./wc push`는 임시글로 올린다. `--publish`는 사용자가 발행하라고 했을 때만.
- 가드 오류는 우회하지 않고 글을 고친다.코드도 같은 쪽으로 짜여 있습니다. 올릴 때의 상태는 status = "publish" if args.publish else existing.get("status", "draft") 한 줄로 정해져서, --publish 없이 올리면 처음 올리는 글은 임시글이 되고 이미 올라가 있는 글은 지난번 올릴 때의 상태가 그대로 유지됩니다. 스킬 파일은 발행을 사람에게 남긴 이유를 공개된 글은 검색엔진에 수집되므로 되돌리기 어렵다고 적고 있어요.
제가 정하는 것
- 어떤 서비스의 글을 쓸지, 새 서비스로 무엇을 추가할지
- 글에 실린 수치를 공개할지
- 언제 발행할지
Claude Code가 하는 것
- 원본을 읽고 원고, 영상, 도식을 만든다
- 기계 검사와 사실 검증을 거쳐 임시글로 올린다
- 임시글 주소와 미리보기 파일, 확인하지 못해 뺀 내용을 알린다
이 사례에서 가져갈 만한 것
공식 자료의 분류는 아니고, 블로그 자동화를 해 보려는 분께 참고가 될 만한 것을 이 저장소를 놓고 제가 정리했습니다.
- 절차는 스킬에, 막아야 하는 것은 스크립트에 둔다. 순서와 판단 기준은
SKILL.md에 글로 적었고, 공개하면 안 되는 값처럼 한 번도 새면 안 되는 것은 검사 코드가 오류로 막습니다. 올리는 명령이 그 검사를 먼저 돌려요. - 쓴 쪽이 검증하지 않는다. 검증은 다른 에이전트에게 넘기고, 넘길 때 확신이 약한 주장을 적어 줍니다. 보고 형식을 정해 두면 “틀림”과 “근거 없음”을 바로 고칠 목록으로 쓰게 됩니다.
- 되돌리기 어려운 일은 사람 몫으로 남긴다. 기본값을 임시글로 두고 발행은 옵션으로 뺐습니다.
- 한도와 금지 표현은 설정 파일에 모은다. 코드박스 줄 수, 제목 길이, 금지 표현 같은 기준이
site.yaml한 곳에 있어서, 이 값들은 검사 코드를 건드리지 않고 바꿉니다.
미니앱 제작 쪽에서 검사 스크립트를 어떻게 짰는지는 AI 하네스 글에 정리해 두었습니다.
블로그 자동화 자주 묻는 질문
Claude Code로 블로그 자동화를 하면 글이 바로 발행되나요?
아닙니다. 올리는 명령은 발행 옵션 없이 돌리면 처음 올리는 글을 임시글로 만듭니다. 발행 옵션은 제가 글을 보고 발행하라고 말했을 때만 붙이도록 규칙 파일에 적어 두었습니다.
AI가 쓴 초안의 사실은 어떻게 확인하나요?
두 번 확인합니다. 먼저 검사 명령이 공개하면 안 되는 값과 형식, 문체를 기계로 보고, 그다음 글을 쓰지 않은 검증 에이전트가 원본 파일과 대조해 틀림, 근거 없음, 애매함으로 나눠 보고합니다.
기계 검사에서 오류가 나오면 어떻게 되나요?
올리는 명령이 같은 검사를 먼저 돌리고, 오류가 하나라도 있으면 워드프레스에 올리지 않고 끝납니다. 공개 금지 가드의 오류에는 우회 옵션이 없어서 글을 고쳐야 합니다.
글에 나온 규칙 파일과 에이전트는 Claude Code에서 쓰는 방식이고, 공식 안내는 Claude Code 공식 문서에 있습니다.
이 글은 직접 만들고 운영하며 남긴 기록입니다. 적힌 수치는 작성 시점의 제 계정 기준이며, 같은 결과나 수익을 보장하지 않습니다.

6 Comments