WordPress + Claude API Day 1 세팅 기록 | devYul

📚 이 글은 “개발자가 AI 자동화로 부업하는 실전 기록” 시리즈입니다.

  • 📌 1편: AI 자동화 부업 시작 — 실패 3번과 방향 전환
  • 📌 2편: WordPress + Claude API Day 1 세팅 기록 (현재 글)
  • 📌 3편: Slack 봇으로 블로그 자동화 트리거 만들기 (예정)
  • 📌 4편: Threads API 연동 — SNS 자동 배포 (예정)
  • 📌 5편: 구글 애드센스 승인 도전기 (예정)

1편: AI 자동화 부업 시작 — 실패 3번과 방향 전환

1편에서 왜 티스토리·네이버를 포기하고 WordPress로 왔는지 정리했다. 이번 편은 그 다음 이야기다 — 실제로 세팅을 어떻게 했는지, Hostinger에 WordPress를 올리고 Claude API와 연결해서 첫 글을 자동 발행하기까지. 완성된 시스템이 아니라 Day 1의 날것 그대로를 기록한다.

 


왜 또 새로운 걸 시작했냐면

 

나는 원래 티스토리랑 네이버 블로그로 자동화 부업을 시도했었다. 결과는 처참했다.

티스토리는 2023년부터 오픈 API가 사실상 막혔다. 예전에 카카오 계정 연동으로 외부 앱을 붙일 수 있었는데, 지금은 그 창구가 닫혀 있다. 억지로 셀레니움으로 브라우저 자동화를 해봤는데, 로그인 자체가 카카오 OAuth라 봇 차단이 너무 빠르게 걸렸다.

네이버 블로그는 더 심했다. 정책 자체가 자동화를 금지하고 있고, 조금만 이상한 패턴이 감지되면 계정이 바로 제재된다. 공들여 만든 스크립트가 첫날 실행하자마자 경고 받은 날, 진짜 허탈했다.

  그때 든 생각이 “왜 나는 막힌 벽에 계속 머리를 들이밀고 있지?”였다.

그래서 방향을 바꿨다. REST API가 공식으로 열려 있는 WordPress로. 자동화하려면 플랫폼이 허용하는 방식으로 해야 오래 간다. 이건 당연한 말인데, 막상 시작할 때는 익숙한 플랫폼에 집착하다 보니 늦게 깨달았다.

자동화 부업의 첫 번째 조건 — 플랫폼이 허용하는 방식 안에서만 움직여야 지속 가능하다.


플랫폼 삽질 비교 — 왜 WordPress였나

세 플랫폼을 직접 써보면서 느낀 걸 정리하면 이렇다.

항목 티스토리 네이버 블로그 WordPress
공식 API ❌ 사실상 종료 ❌ 없음 ✅ REST API 완전 개방
자동화 허용 여부 ⚠️ 회색지대 ❌ 정책 금지 ✅ 명시적 허용
Python 연동 난이도 🔴 높음 (우회 필요) 🔴 매우 높음 🟢 낮음 (requests로 바로)
초기 비용 무료 무료 Hostinger 비즈니스 플랜 $4.99/월 (도메인 무료)
SEO 커스터마이징 제한적 제한적 ✅ 자유롭게 가능

비용이 생기는 건 솔직히 부담이었다. 호스팅비를 내면서 부업을 시작하는 게 맞나 싶었는데, 생각해보면 자동화로 수익이 나기 전까지는 이게 일종의 “툴 투자”다. 매달 커피 두세 잔 값으로 자동화 인프라를 쓴다고 생각하기로 했다.

무료 플랫폼의 자유로움은 착각이다 — 정말 중요한 건 API가 열려 있냐는 거다.


Claude Code, 왜 이걸 골랐나

처음엔 ChatGPT API를 쓰려고 했다. 더 유명하고 레퍼런스도 많으니까. 근데 며칠 써보면서 느낀 게 있었다. Claude Code는 코드 생성 맥락 유지가 유독 잘 됐다. 긴 대화 흐름에서 앞에서 정의한 변수나 함수 구조를 끝까지 기억하고 반영하는 느낌이랄까.

블로그 자동화 파이프라인을 만들려면 여러 단계가 연결된다. 주제 선정 → 초안 작성 → HTML 포맷팅 → WordPress API 업로드. 이 흐름을 하나의 대화 맥락에서 이어가면서 코드를 짤 때, Claude가 훨씬 자연스럽게 따라왔다.

물론 비용 걱정은 있다. Claude API 크레딧은 충전해서 쓰는 방식인데, 글 하나 생성할 때 얼마나 나가는지 아직 정확히 파악 중이다. 이건 다음 편에서 데이터 뽑아서 공유할 예정이다.

💡 팁: Claude API를 처음 쓴다면 claude-3-haiku 모델로 먼저 테스트하는 걸 추천한다. 속도도 빠르고 비용이 확연히 낮아서 파이프라인 구조를 잡는 초반 실험에 적합하다. 품질을 올리고 싶을 때 sonnet이나 opus로 올리면 된다.

Claude Code를 고른 이유는 단순하다 — 긴 파이프라인 맥락에서 코드 일관성이 가장 좋았다.


Day 1 세팅 — 실제로 한 것들

오늘 실제로 진행한 내용을 체크리스트로 정리해봤다.

  • ✅ Hostinger 비즈니스 플랜 가입 → hPanel에서 WordPress 원클릭 설치 및 도메인 연결
  • ✅ WordPress REST API 활성화 확인 (/wp-json/wp/v2/posts 엔드포인트 응답 테스트)
  • ✅ JWT Authentication for WP REST API 플러그인 설치 및 활성화
  • ✅ Python 가상환경 세팅 및 필요 라이브러리 설치
  • ✅ Claude API 키 발급 및 환경변수 등록
  • ✅ 기본 포스트 업로드 스크립트 작성 및 테스트 글 1건 업로드 성공

사실 “세팅”이라고 하면 거창하게 들리는데, 실제로는 반나절이면 충분했다. 가장 오래 걸린 건 WordPress 애플리케이션 비밀번호 발급 위치를 찾는 거였다. (경로: 워드프레스 관리자 → 플러그인 → 새 플러그인 추가 → “JWT Authentication” 검색)

Python으로 WordPress에 포스트 올리는 핵심 코드

전체 자동화 파이프라인은 아직 완성이 안 됐고, 오늘은 일단 “Python으로 WordPress에 글이 올라가는가”를 확인하는 게 목표였다. 아래가 그 핵심 코드다.

⚙️ 사전 준비: WordPress REST API 인증에 JWT Authentication for WP REST API 플러그인이 필요합니다. WordPress 플러그인 마켓에서 설치 후 활성화하세요.

import requests
import os
from dotenv import load_dotenv

load_dotenv()

WP_URL = os.getenv("WP_URL")       # 예: https://yourdomain.com
WP_USER = os.getenv("WP_USERNAME") # WordPress 사용자명
WP_PASS = os.getenv("WP_PASSWORD") # WordPress 로그인 비밀번호

def get_jwt_token() -> str:
    """JWT 토큰 발급 — JWT Authentication 플러그인 필요"""
    response = requests.post(
        f"{WP_URL}/wp-json/jwt-auth/v1/token",
        json={"username": WP_USER, "password": WP_PASS},
    )
    response.raise_for_status()
    return response.json()["token"]

def upload_post(title: str, content: str, status: str = "draft") -> dict:
    token = get_jwt_token()
    endpoint = f"{WP_URL}/wp-json/wp/v2/posts"
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    }
    payload = {
        "title": title,
        "content": content,
        "status": status,  # "draft" 또는 "publish"
    }
    response = requests.post(endpoint, json=payload, headers=headers)
    response.raise_for_status()
    return response.json()

# 테스트 실행
result = upload_post(
    title="Day 1 테스트 포스트",
    content="<p>자동화 파이프라인 연동 테스트입니다.</p>",
    status="draft"
)
print(f"업로드 성공 | 포스트 ID: {result['id']} | URL: {result['link']}")

실행하고 WordPress 대시보드를 열었을 때 임시글이 생성돼 있는 걸 보니까, 생각보다 더 뿌듯했다. 별거 아닌 것 같아도, 코드 한 줄이 실제 웹사이트에 글을 만들어냈다는 게 자동화의 재미다.

💡 팁: status를 처음엔 반드시 “draft”(임시저장)으로 설정하길 강력 추천한다. 자동화 코드가 실수로 루프를 돌면 글이 수십 개가 한꺼번에 발행될 수 있다. 파이프라인이 완전히 검증된 후에 “publish”로 바꾸는 게 안전하다.

Day 1의 목표는 완벽한 시스템이 아니라 “연결이 되는가” 확인하는 것 — 그것만으로 충분하다.


현재 상태 솔직 평가

오늘 만든 건 아직 자동화라고 부르기도 민망한 수준이다. Claude가 글을 생성하는 부분은 아직 붙이지도 않았고, 지금은 그냥 Python으로 WordPress에 텍스트를 밀어 넣는 것만 됐다.

그런데 솔직히, 이 정도가 맞다고 생각한다. 예전의 나였으면 “Claude 연동도 되고, 스케줄러도 붙이고, SEO 최적화 로직도 다 만들어야 시작이지”라고 생각하다가 결국 아무것도 안 했을 거다. 지금은 일단 파이프라인의 가장 끝 부분 — 업로드 — 이 된다는 걸 확인했다. 거기서부터 앞으로 붙여나가면 된다.

비용 면에서는 아직 Claude API를 실제로 많이 쓴 게 아니라 정확히 파악이 안 됐다. 다음 주에 실제로 글 10개짜리 배치를 돌려보고 크레딧 소모량을 측정할 예정이다.

다음 편 예고 — 3편: Slack 봇으로 자동화 트리거 만들기

WordPress + Claude API 파이프라인이 됐으니, 이제 트리거가 필요하다. 매번 터미널에서 스크립트를 직접 실행하는 건 자동화가 아니다. 다음 편에서는 Slack 슬래시 커맨드로 글 생성부터 발행까지 한 번에 트리거하는 봇을 만든다.

📌 3편: Slack 봇으로 블로그 자동화 트리거 만들기

  • slack-bolt + Socket Mode로 슬래시 커맨드 수신
  • /blog 주제 입력 → Claude API 글 생성 → WordPress draft 자동 발행
  • 발행 완료 후 Slack으로 제목 + URL 결과 메시지 전송

완성된 시스템이 아니라 삽질 과정 그대로를 기록할 테니, 같이 만들어가는 느낌으로 봐주시면 좋겠다. 혹시 WordPress REST API 연동하다 막힌 부분 있으면 댓글로 남겨주세요.

1 thought on “WordPress + Claude API Day 1 세팅 기록 | devYul”

  1. Pingback: Slack 봇으로 블로그 자동 발행 트리거 만들기 — 개발자 부업 Day 2 - devyul.com

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top