TL;DR
- Claude Code의 스킬(Skill) 기능을 활용하여 작업 세션 내용을 자동으로 블로그 포스트로 변환
- 워드프레스 REST API + Application Password로 안전한 인증 구현
- 마크다운 → HTML 변환, 포스트 발행, 이미지 업로드까지 자동화
- “블로그 작성해줘” 한 마디로 기술 블로그 초안 생성 가능
배경
개발 작업을 하다 보면 배운 것들을 블로그로 정리하고 싶은 순간이 많습니다. 하지만 코딩이 끝난 후 다시 블로그 에디터를 열고, 코드를 복사하고, 설명을 작성하는 건 꽤 번거로운 일입니다.
“Claude Code가 작업하면서 알아서 블로그 포스트도 만들어주면 좋겠다”는 생각에서 이 스킬을 만들게 되었습니다.
구현 과정
1단계: 스킬 구조 설계
Claude Code 스킬은 다음 구조를 따릅니다.
wp-blog-post/
├── SKILL.md # 스킬 정의 (필수)
├── scripts/ # 실행 스크립트
│ ├── publish_post.py
│ ├── upload_media.py
│ └── md_to_html.py
└── references/ # 참조 문서
└── post-templates.md
SKILL.md의 frontmatter에서 스킬 이름과 트리거 키워드를 정의합니다.
---
name: wp-blog-post
description: |
작업 세션 내용을 워드프레스 블로그 포스트로 작성하고 발행.
"블로그 작성", "포스트 발행", "워드프레스에 올려" 요청 시 사용.
---
2단계: 워드프레스 REST API 연동
워드프레스 5.6+부터 기본 제공되는 Application Password를 사용합니다. 외부 플러그인 없이 안전하게 인증할 수 있습니다.
def make_auth_header(username: str, app_password: str) -> str:
"""Basic 인증 헤더 생성"""
credentials = f"{username}:{app_password}"
encoded = base64.b64encode(credentials.encode()).decode()
return f"Basic {encoded}"
포스트 발행은 /wp-json/wp/v2/posts 엔드포인트를 사용합니다:
post_data = {
"title": title,
"content": content,
"status": "draft", # 초안으로 저장
"categories": category_ids,
"tags": tag_ids,
}
api_url = f"{site_url}/wp-json/wp/v2/posts"
req = Request(
api_url,
data=json.dumps(post_data).encode(),
headers={
"Authorization": auth_header,
"Content-Type": "application/json",
},
method="POST",
)
3단계: 마크다운 → HTML 변환
워드프레스 Gutenberg 에디터와 호환되도록 마크다운을 HTML로 변환합니다. 특히 코드 블록은 Gutenberg 형식으로 변환해야 syntax highlighting이 제대로 동작합니다.
def convert_code_blocks(text: str) -> str:
"""코드 블록을 Gutenberg 형식으로 변환"""
pattern = r'```(\w+)?\n(.*?)```'
def replace_code(match):
lang = match.group(1) or ""
code = match.group(2).rstrip()
# HTML 이스케이프
code = code.replace("&", "&")
code = code.replace("<", "<")
code = code.replace(">", ">")
if lang:
return f'<!-- wp:code {{"language":"{lang}"}} -->\n' \
f'<pre class="wp-block-code"><code>{code}</code></pre>\n' \
f'<!-- /wp:code -->'
else:
return f'<!-- wp:code -->\n' \
f'<pre class="wp-block-code"><code>{code}</code></pre>\n' \
f'<!-- /wp:code -->'
return re.sub(pattern, replace_code, text, flags=re.DOTALL)
4단계: 이미지 업로드 기능
스크린샷 등 로컬 이미지를 워드프레스 미디어 라이브러리에 업로드할 수 있습니다.
python scripts/upload_media.py \
--file ./screenshot.png \
--alt-text "구현 결과 스크린샷"
반환된 미디어 ID를 --featured-media 옵션으로 전달하면 대표 이미지로 설정됩니다.
사용 방법
환경변수 설정
먼저 워드프레스 연동을 위한 환경변수를 설정합니다:
export WP_SITE_URL="https://your-site.com"
export WP_USERNAME="your-username"
export WP_APP_PASSWORD="xxxx xxxx xxxx xxxx"
Application Password는 워드프레스 관리자 → 사용자 → 프로필 → “애플리케이션 비밀번호” 섹션에서 생성할 수 있습니다.
Claude Code에서 사용
간단히 요청하면 됩니다:
블로그 작성해줘
또는 더 구체적으로:
오늘 작업한 내용을 기술 블로그로 정리해서 워드프레스에 올려줘
스킬이 자동으로,
- 세션 내용 분석
- 기술 블로그 형식으로 구조화
- 마크다운 → HTML 변환
- 워드프레스에 초안으로 발행
결과
- 코딩하면서 동시에 블로그 콘텐츠 생성 가능
- 코드 스니펫이 자동으로 syntax highlighting 적용
- 초안으로 저장되어 발행 전 검토 가능
- 카테고리/태그 자동 생성 및 할당
마치며
Claude Code 스킬을 만들면서 느낀 점은, 반복적인 작업을 자동화하는 것의 가치입니다. 블로그 작성이라는 “해야지 해야지” 하면서 미루던 일이 이제는 한 마디 명령으로 해결됩니다.
스킬의 핵심은 트리거 키워드를 잘 정의하는 것입니다. 사용자가 자연스럽게 말할 수 있는 표현들을 description에 포함시키면, Claude가 알아서 적절한 시점에 스킬을 활성화합니다.
전체 코드는 GitHub에서 확인할 수 있습니다: https://github.com/greeun/wp-blog-post