본문으로 이동
PLUTUS INSIGHTS

AI 개발 일지 2편|글은 올라갔는데 이미지가 반만 보였다 — MCP 이미지 업로드·자동 발행 완성기

AI 개발 일지 2편|글은 올라갔는데 이미지가 반만 보였다 — MCP 이미지 업로드·자동 발행 완성기
AI 개발 일지 2편|글은 올라갔는데 이미지가 반만 보였다 — MCP 이미지 업로드·자동 발행 완성기

AI DEVELOPMENT JOURNAL · EPISODE 02 · 2026.10.09

AI가 블로그 글을 올리는 데 성공했다. 그런데 막상 공개된 화면을 열어보니 같은 이미지가 두 번 나오고, 마지막 그림은 반만 보였다.

MCP WordPress PNG 업로드 실제 디버깅

1편에서는 ChatGPT가 PLUTUS MCP를 통해 WordPress 초안을 만들고 수정하는 데 성공했다. 이제 파일을 올리고 공개까지 하면 끝날 줄 알았다. 하지만 진짜 어려운 일은 그다음부터 시작됐다.

HTTP 202도 성공, 미디어 업로드도 성공, 공개 상태도 성공. 그렇다면 왜 독자 화면은 실패했을까?

2편에서는 새로운 기능을 나열하기보다 실제로 마주친 문제를 따라가 보려 한다. 하나의 이미지가 제작돼 WordPress에서 독자에게 보일 때까지 얼마나 많은 단계를 통과해야 하는지, 그리고 API의 성공이 왜 개발의 끝이 아닌지를 이야기한다.

01같은 사진이 두 번 나온 이유

WordPress에는 대표 이미지와 본문 이미지라는 서로 다른 개념이 있다. 글 목록과 테마 상단에서 쓰이는 대표 이미지가 있고, 본문 안에서 설명을 보조하는 이미지가 있다. 처음에는 이를 구분하지 않고 둘 다 넣어버렸다.

WordPress 테마가 대표 이미지를 이미 화면 상단에 보여주고 있는데 HTML 본문에 똑같은 이미지 태그를 다시 넣었다. 결과는 뻔했다. 이미지가 두 번 나왔다. 제목도 마찬가지였다. 테마가 글 제목을 보여주는데 본문에도 큰 H1 제목을 별도로 작성해 헤드라인이 반복됐다.

디자인 규칙 1

WordPress의 게시글 제목은 테마가 한 번만 출력하게 하고, 대표 이미지는 미디어 메타데이터에 연결한다. 본문에 넣는 그림은 독립적인 정보가 있을 때만 추가한다.

02이미지를 올리는 MCP 도구를 만들다

기존 MCP에는 리포트 접수와 기존 초안 수정 도구가 있었다. 그러나 이미 만든 PNG 파일을 WordPress 미디어 라이브러리에 넣는 기능이 빠져 있었다. 이를 해결하기 위해 upload_media 도구와 attach_media_to_draft 도구를 추가했다.

앞의 도구는 PNG·JPG·WEBP 이미지 데이터를 받아 업로드한 뒤 WordPress 미디어 ID와 URL을 돌려준다. 뒤의 도구는 그 미디어 ID를 사용해 초안 본문의 지정 위치에 이미지를 붙이거나 대표 이미지로 설정할 수 있다. 각 단계의 결과를 조회할 수 있으니 오류가 나도 원인을 좁힐 수 있다.

실제 테스트에서는 시스템 구조도 PNG를 올려 미디어 ID 1654를 얻었다. 본문 HTML을 다시 조회해 새 이미지 URL이 저장된 것도 확인했다. 이제 ChatGPT가 문장뿐 아니라 이미지까지 전달한 셈이다.

03공개 발행까지 성공했는데 그림이 잘렸다

게시글 1653번을 공개하는 publish_post 도구도 추가했다. WordPress API에 글 상태를 변경하도록 요청하고, 다시 get_post로 조회했더니 실제로 publish였다. 여기에 대표 이미지와 본문 이미지의 존재까지 확인했다.

하지만 공개 페이지와 편집기를 캡처해 보니 문제가 있었다. 하단에 배치한 인포그래픽의 위쪽 일부만 나타나고 나머지는 하얗게 비어 보였다. 실제 저장 HTML에서는 그림이 article 본문이 닫힌 다음 별도의 이미지 블록으로 붙어 있었다. 파일 자체의 표시 이상 가능성까지 함께 확인해야 했다.

컴퓨터는 ‘저장했다’고 말했다. 사람의 눈은 ‘다 보이지 않는다’고 말했다. 둘 다 사실일 수 있다는 점이 문제였다.

04수정하려는데 또 401 Unauthorized

이번에는 공개된 글을 고치려 했더니 다른 장벽이 등장했다. 기존 update_post는 의도적으로 비공개 초안에만 허용돼 있었다. 공개 글을 마음대로 바꾸지 않도록 한 안전장치가 실전 수정 작업에서는 제약이 된 것이다.

임시로 서버 보정 스크립트를 작성했지만 WordPress 인증정보를 읽는 방식 때문에 401 오류가 나왔다. 환경파일을 Bash의 source로 읽다가 실패했고, systemd로 환경을 전달했는데 스크립트가 권한이 없는 보호 파일을 다시 읽으려 했다. 수정 스크립트 파일 자체의 쓰기 권한 문제도 있었다.

중요한 교훈은 기존 로그인 정보나 OAuth 설정을 함부로 변경하지 않는 것이었다. 평소 자동 발행은 잘 동작하고 있었기 때문이다. 문제는 인증정보를 사용하는 방식과 실행 계정 사이의 불일치였다.

05그림은 지우는 게 아니라 제자리로

중복된 본문 제목과 대표 이미지 태그를 제거하고, 문제의 인포그래픽은 새로운 PNG로 교체했다. 설명이 끝난 맨 아래가 아니라 시스템 아키텍처를 소개하는 본문 섹션 근처로 옮겨 배치했다.

WordPress에 저장된 결과를 다시 조회하니 본문에는 새 인포그래픽 URL이 하나 남았고 대표 이미지는 별도로 유지되고 있었다. 글 하단에서 이미지가 보이지 않게 된 것은 모두 삭제한 것이 아니라 **읽는 흐름에 맞는 위치로 옮겼기 때문**이었다.

디자인 규칙 2

이미지는 반드시 설명하는 문단 근처에 배치한다. 파일 업로드와 본문 HTML 저장을 확인한 뒤, 실제 브라우저에서 전체 높이와 모바일 폭을 점검하는 절차를 별도로 둔다.

06두 번 실패하지 않기 위한 이미지 처리 절차

IMAGE AUTOMATION · PIPELINE

이미지 업로드 성공과 화면 표시 성공은 다르다

01

이미지 생성

본문용과 대표 이미지의 역할부터 구분
02

파일 검증

형식·크기·손상 여부 확인
03

WordPress 업로드

미디어 ID와 파일 URL 확보
04

본문 배치

설명 섹션 내부에 단 한 번 삽입
05

저장 결과 조회

실제 HTML·URL·공개 상태 확인
06

브라우저 검수

모바일·PC에서 이미지 잘림과 중복 여부 확인

REST API의 성공 응답만으로 브라우저 렌더링을 보장하지는 않습니다.

이 흐름에서 가장 중요한 것은 맨 마지막 단계다. WordPress REST API는 데이터가 저장됐는지 알려줄 수 있지만, 사이트의 CSS나 편집기 때문에 실제로 그림이 잘려 보이는지까지 자동으로 보장하지 않는다. 앞으로는 파일 유효성 검사와 브라우저 렌더링 확인을 하나의 검증 체크리스트로 운영하려 한다.

07지금 구현된 기능과 아직 남은 작업

기능 상태 검증 내용
리포트 초안 등록 완료 submit_report
미디어 PNG 업로드 완료 upload_media → 미디어 ID 확인
초안 본문 이미지 삽입 완료 attach_media_to_draft → HTML 재조회
공개 발행 완료 publish_post → 상태 재조회
기존 초안 수정 완료 update_post
공개 글 직접 수정 미구현 MCP 도구 미제공
브라우저 이미지 전체 검증 개선 필요 실제 화면 확인은 별도 단계

여기서 ‘완료’는 실제로 도구를 호출해 API 결과까지 확인한 기능을 뜻한다. 공개된 게시글을 MCP에서 직접 편집하거나, 이미지 렌더링을 자동 스크린샷으로 검증하는 기능은 아직 완성되지 않았다. 동작한 것과 앞으로 구현할 것을 분명히 나누는 것이 시스템을 신뢰할 수 있게 만든다.

08다음 목표는 AI 출판 시스템의 품질

처음에는 ChatGPT에서 복사한 글을 사람이 직접 WordPress에 붙여넣지 않아도 되는 것만으로 충분하다고 생각했다. 지금은 기준이 달라졌다. 저장 성공뿐 아니라 제목 중복 여부, 이미지 개수, 본문 내 정확한 위치, 모바일 표시, 링크의 유효성까지 봐야 제대로 된 자동화라고 생각한다.

앞으로 PLUTUS는 금융 리포트 중심으로 운영하고, 개발 중인 에이젝트 홈페이지에서는 기술 개발 일지와 소프트웨어 프로젝트를 소개할 계획이다. 두 브랜드는 독립된 디자인과 공개 주소를 가지되, 콘텐츠 관리와 MCP 자동화 시스템을 공유하는 방향을 구상하고 있다.

첫 번째 이야기가 AI에게 ‘글을 올리는 버튼’을 만들어 준 날이라면, 두 번째 이야기는 그 버튼 뒤에 ‘품질 검사’가 필요하다는 사실을 배운 날이다.

AI 자동화는 버튼 하나를 눌러 끝나는 마술이 아니다. 결과를 확인하고, 오류를 찾아 고치고, 다음에는 같은 문제가 반복되지 않도록 만드는 소프트웨어 공학에 가깝다. 그 과정이 번거롭지만, 직접 만들기 때문에 더 재미있다.

다음 편 예고

공개 글 수정 기능, 안전한 백업과 버전 관리, 예약 발행, 그리고 에이젝트와 PLUTUS의 브랜드별 콘텐츠 관리를 어떻게 하나의 MCP로 통합할까?
개발 기록

2026년 10월 9일 · Ubuntu · Python · FastMCP · Google OAuth · WordPress REST API
실제 작업과 검증 결과를 토대로 작성했습니다. 미완료 기능은 별도로 구분했습니다.