Issue 01중국 AI
AC POST
중국 AI 목록
掘金2026년 11월 5일 22:40중국어 → 한국어

GPT 기반 자동 글 발행 인터페이스 방안 공개

한 문장이나 이미지에서 내용을 생성해 콘텐츠 관리 시스템에 자동 발행하는 GPT 연동 방안이 소개됐다.

중국어 원문을 AI로 번역했습니다. 고유명사와 수치는 원문 표기를 우선하며, 중요한 판단에는 아래 출처 원문을 함께 확인하세요.

1. 프로젝트 배경

기존 콘텐츠 발행 프로세스는 일반적으로 다음과 같습니다:

- 편집자가 주제나 소재를 입력합니다.

- 자료를 찾고 구조를 정리합니다.

- 글을 작성합니다.

- 제목, 요약, 삽화를 생성합니다.

- 콘텐츠 관리 시스템에 로그인합니다.

- 콘텐츠를 복사해 발행합니다.

GPT를 콘텐츠 관리 시스템에 연결하면 사용자는 다음과 같이 한 문장만 입력하면 됩니다. 예:

신에너지 자동차 발전에 관한 과학 교양 글을 작성해 주세요. 위챗 공식 계정(公众号)에 발행하기 적합하고, 분량은 1500자로 해 주세요.

또는 제품 이미지, 행사 포스터, 뉴스 현장 사진과 같은 이미지를 한 장 업로드하면 시스템이 자동으로 다음을 완료할 수 있습니다:

- 이미지 내용 인식

- 글 주제 추출

- 제목과 본문 생성

- 요약, 키워드 생성

- HTML 또는 Markdown 형식 변환

- 초안 자동 저장

- 검토 후 웹사이트, 公众号 또는 WordPress에 발행

이 글에서는 완전한 자동 발행 글쓰기 API 방안을 소개합니다.

2. 전체 시스템 아키텍처

시스템은 다음과 같은 모듈로 나눌 수 있습니다:

사용자 측 │ ├── 텍스트 입력 ├── 이미지 업로드 └── 발행 플랫폼 선택 │ ▼ 백엔드 API 서비스 │ ├── 파라미터 검증 ├── 이미지 업로드 ├── GPT 호출 ├── 콘텐츠 검토 ├── 형식 변환 ├── 글 저장 └── CMS에 발행 │ ├── MySQL / PostgreSQL ├── 객체 스토리지 OSS / COS / S3 ├── OpenAI API └── WordPress / 자체 구축 CMS / 公众号 플랫폼

다음 기술 사용을 권장합니다:

| 모듈 | 권장 기술 | |---|---| | 프론트엔드 | Vue, React, Next.js | | 백엔드 | Node.js + NestJS/Express | | 데이터베이스 | MySQL 또는 PostgreSQL | | 파일 저장 | 阿里云 OSS, 腾讯云 COS, S3 | | AI 인터페이스 | OpenAI Responses API | | 작업 큐 | Redis + BullMQ | | 콘텐츠 관리 | 자체 구축 CMS, WordPress | | 배포 | Docker + Nginx |

3. 핵심 비즈니스 프로세스

1. 사용자가 텍스트를 입력해 글 생성

사용자 입력:

스마트 홈의 미래 발전을 소개하는 글을 작성해 주세요. 일반 소비자를 대상으로 하고, 분량은 약 1200자, 어조는 쉽고 이해하기 쉽게 해 주세요.

백엔드가 요청을 받으면:

- 사용자 신원 검증

- 프롬프트 길이 검증

- 시스템 프롬프트 결합

- GPT 호출

- 구조화된 글 결과 획득

- 초안으로 저장

- 글 내용 반환

- 사용자 확인 후 발행

2. 사용자가 이미지를 업로드해 글 생성

사용자가 상품 이미지나 행사 현장 이미지를 한 장 업로드하면:

- 백엔드가 이미지 수신

- 이미지 형식과 크기 확인

- 객체 스토리지에 업로드

- 이미지 접근 주소 획득

- 이미지 주소와 사용자 프롬프트를 GPT에 전달

- GPT가 이미지 속 주체, 장면, 텍스트 분석

- 글 생성

- 글 제목, 본문, 요약, 키워드 반환

예를 들어 사용자가 커피 제품 이미지를 업로드하고 다음과 같이 입력합니다:

이 이미지를 바탕으로 샤오홍슈(小红书)에 발행하기 적합한 제품 소개 문안을 작성해 주세요.

시스템이 생성할 수 있는 결과:

- 제목: 직장인에게 적합한 고품질 휴대용 커피

- 본문: 제품 판매 포인트, 음용 장면, 목표 고객층

- 키워드: 커피, 휴대용, 직장인, 아침 식사

- 추천 태그: #커피추천 #사무실추천템

4. 권장 글 데이터 구조

GPT에게 평범한 텍스트 한 단락만 반환하게 하지 말고, 구조화된 JSON을 반환하도록 요구해야 합니다.

{ "title": "스마트 홈이 우리의 생활 방식을 바꾸고 있다", "summary": "이 글은 스마트 홈의 발전 추세, 핵심 기술, 일반 소비자의 사용 장면을 소개합니다.", "content": "<h2>1. 스마트 홈의 발전 배경</h2><p>...</p>", "markdown": "## 1. 스마트 홈의 발전 배경 \n \n ...", "keywords": ["스마트 홈", "사물인터넷", "인공지능"], "category": "기술", "tags": ["스마트 기기", "가정 생활"], "cover_image": "", "seo_title": "스마트 홈 발전 추세 및 응용 장면", "seo_description": "스마트 홈의 발전 추세, 핵심 기술 및 실제 응용 장면을 알아보세요." }

이렇게 하면 몇 가지 장점이 있습니다:

- 프론트엔드에서 제목과 본문을 별도로 표시할 수 있습니다.

- CMS에서 요약, 태그, 분류를 각각 저장할 수 있습니다.

- SEO 정보를 생성할 수 있습니다.

- 이후 여러 발행 플랫폼에 쉽게 연동할 수 있습니다.

- 한 덩어리의 텍스트에서 제목과 본문을 다시 파싱하는 것을 피할 수 있습니다.

5. 프롬프트 설계

GPT 출력 품질은 상당 부분 프롬프트 설계에 달려 있습니다.

1. 시스템 프롬프트

다음과 같이 고정된 시스템 프롬프트를 설정할 수 있습니다:

당신은 전문 콘텐츠 편집자로서 사용자가 제공한 주제, 텍스트 또는 이미지를 바탕으로 고품질 글을 생성합니다. 요구 사항: 1. 내용은 진실하고 자연스러우며 논리적으로 명확해야 합니다. 2. 확인할 수 없는 사실을 꾸며내지 마십시오. 3. 글 구조는 완전해야 하며 제목, 요약, 본문, 키워드를 포함해야 합니다. 4. 본문은 중국어를 사용합니다. 5. 사용자가 지정한 플랫폼에 맞춰 언어 스타일을 조정합니다. 6. 불법, 사기, 음란, 혐오 또는 권리 침해 콘텐츠를 출력하지 마십시오. 7. 반드시 지정된 JSON 형식에 따라 결과를 반환해야 합니다. 8. 본문에는 HTML 태그를 사용할 수 있지만 script, iframe 등 위험한 태그는 사용하지 마십시오.

2. 사용자 프롬프트 템플릿

다음 정보를 바탕으로 글을 한 편 생성해 주세요: 주제: {{topic}} 발행 플랫폼: {{platform}} 대상 독자: {{audience}} 글 스타일: {{style}} 글 길이: 약 {{wordCount}}자 추가 요구 사항: {{requirements}} 다음 JSON 필드를 반환해 주세요: { "title": "글 제목", "summary": "글 요약", "content": "HTML 형식 본문", "markdown": "Markdown 형식 본문", "keywords": ["키워드1", "키워드2"], "category": "글 분류", "tags": ["태그1", "태그2"], "seo_title": "SEO 제목", "seo_description": "SEO 설명" }

六、백엔드 인터페이스 설계

다음과 같은 인터페이스 설계를 권장한다.

1. 글 생성 작업 생성

POST /api/articles/generate Content-Type: application/json Authorization: Bearer TOKEN

요청 파라미터:

{ "prompt" : "인공지능 사무 응용에 관한 글을 작성해줘" , "platform" : "website" , "style" : "전문적이고 알기 쉬운" , "audience" : "일반 직장인" , "wordCount" : 1200 , "autoPublish" : false }

반환 결과:

{ "success" : true , "taskId" : "task_202501010001" , "status" : "processing" }

인터페이스가 GPT가 결과를 반환할 때까지 계속 대기하게 하기보다는 비동기 작업 모드를 채택할 것을 권장한다.

2. 이미지로 글 생성하는 인터페이스

POST /api/articles/generate-from-image Content-Type: multipart/form-data Authorization: Bearer TOKEN

파라미터:

파라미터 유형 설명 image File 업로드한 이미지 prompt String 사용자가 추가한 프롬프트 platform String 게시 플랫폼 style String 글 스타일 wordCount Number 글자 수 autoPublish Boolean 자동 게시 여부

반환:

{ "success" : true , "taskId" : "task_202501010002" , "status" : "processing" }

3. 작업 상태 조회

GET / api / articles / tasks / :taskId Authorization : Bearer TOKEN

{ "taskId" : "task_202501010001" , "status" : "completed" , "articleId" : 1001 , "article" : { "title" : "인공지능이 사무 방식을 재정의하고 있다" , "summary" : "인공지능은 여러 방면에서 사무 효율을 높이고 있다." , "content" : "<h2>一、인공지능 사무의 응용 현황</h2><p>...</p>" , "keywords" : [ "인공지능" , "사무 효율" ] } }

작업 상태는 다음을 포함할 수 있다:

pending 처리 대기 중 processing 생성 중 completed 생성 완료 review 검토 대기 중 published 게시 완료 failed 처리 실패

4. 글 게시 인터페이스

POST /api/articles/: id /publish Authorization: Bearer TOKEN

{ "platform" : "wordpress" , "publishType" : "draft" }

그중에서:

- draft : 초안으로 저장;

- publish : 즉시 게시;

- schedule : 예약 게시.

七、Node.js에서 GPT를 호출하는 예시

다음 예시는 Node.js를 사용하여 GPT를 호출해 구조화된 글을 생성한다. 실제 프로젝트에서는 공식 SDK를 사용하고 API Key를 서버 측 환경 변수에 두는 것을 권장한다.

npm install openai express multer

환경 변수:

OPENAI_API_KEY =당신의_OPENAI_API_KEY

예시 코드:

import OpenAI from "openai" ; const client = new OpenAI ({ apiKey : process. env . OPENAI_API_KEY }); const systemPrompt = ` 당신은 전문 중국어 콘텐츠 편집자입니다. 사용자가 제공한 주제 또는 이미지를 바탕으로 글을 생성하십시오. 요구 사항: 1. 내용의 논리가 명확하고 언어가 자연스러울 것; 2. 확인할 수 없는 사실을 지어내지 말 것; 3. 유효한 JSON을 반환할 것; 4. 본문은 HTML 형식을 사용할 것; 5. script, iframe 등 위험한 태그를 출력하지 말 것. 반환 필드: title、summary、content、markdown、keywords、category、tags、seo_title、seo_description ` ; export async function generateArticle ( { prompt, imageUrl, platform = "website" , style = "전문적, 알기 쉽게" , audience = "일반 사용자" , wordCount = 1000 } ) { const userText = ` 게시 플랫폼: ${platform} 대상 독자: ${audience} 글 스타일: ${style} 글 길이: 약 ${wordCount} 자 사용자 요구 사항: ${prompt || "이미지 내용을 바탕으로 적절한 글 한 편을 생성하십시오" } ` ; const content = [ { type : "input_text" , text : userText } ]; if (imageUrl) { content. push ({ type : "input_image" , image_url : imageUrl }); } const response = await client. responses . create ({ model : "gpt-4.1" , instructions : systemPrompt, input : [ { role : "user" , content } ], text : { format : { type : "json_object" } } }); return JSON . parse (response. output_text ); }

참고: 모델 이름과 구조화된 출력 파라미터는 SDK 버전에 따라 달라질 수 있으므로, 실제 개발 시에는 현재 공식 인터페이스 문서를 기준으로 해야 한다.

8. 이미지 처리 방안

이미지는 비즈니스 서버에 직접 영구 저장하지 말고, 오브젝트 스토리지를 사용할 것을 권장한다.

이미지 처리 흐름

사용자 이미지 업로드 │ ▼ 확장자와 MIME 타입 검사 │ ▼ 파일 크기 제한 │ ▼ 이미지 바이러스 스캔 │ ▼ 압축, 크롭, EXIF 제거 │ ▼ OSS / COS / S3 업로드 │ ▼ 임시 접근 주소 생성 │ ▼ GPT 분석에 전달

권장 제한:

허용 형식: jpg、jpeg、png、webp 단일 파일 크기: 10MB 이하 최대 해상도: 4096 × 4096 이하 권장 접근 방식: 만료 시간이 있는 서명 URL 사용

이미지에 신분증, 휴대폰 번호, 주소 또는 얼굴 등 개인정보가 있는 경우, 업로드 또는 분석 전에 비식별화 처리를 해야 한다.

9. WordPress에 게시하는 방안

게시 플랫폼이 WordPress인 경우, WordPress REST API를 통해 글을 게시할 수 있다.

WordPress 요청 예시

export async function publishToWordPress ( article ) { const response = await fetch ( ` ${process.env.WP_URL} /wp-json/wp/v2/posts` , { method : "POST" , headers : { "Content-Type" : "application/json" , "Authorization" : "Basic " + Buffer . from ( ` ${process.env.WP_USERNAME} : ${process.env.WP_APP_PASSWORD} ` ). toString ( "base64" ) }, body : JSON . stringify ({ title : article. title , content : article. content , excerpt : article. summary , status : "draft" , tags : article. tags }) } ); if (!response. ok ) { throw new Error ( `WordPress 게시 실패: ${response.status} ` ); } return await response. json (); }

초기에는 기본적으로 다음을 사용할 것을 권장한다:

{ "status" : "draft" }

사람의 확인을 거친 후 다음으로 변경한다:

{ "status" : "publish" }

10. 자동 게시가 곧바로 공개를 의미하지는 않는다

완전 자동 게시를 구현할 수는 있지만, 모든 콘텐츠를 곧바로 공개하는 것은 권장하지 않으며, 특히 다음 콘텐츠는 더욱 그러하다:

- 뉴스 정보;

- 의료 건강;

- 금융 투자;

- 법률 관련;

- 상품 홍보;

- 실제 인물이 등장하는 글;

- 저작권 위험이 발생할 수 있는 콘텐츠.

다음과 같은 검수 흐름을 채택할 것을 권장한다:

GPT 생성 │ ▼ 민감 단어 검출 │ ▼ 콘텐츠 안전 검수 │ ▼ 중복도 검사 │ ▼ 사람의 검수 │ ▼ CMS에 게시

글 상태는 다음과 같이 설계할 수 있다:

generated 생성됨 reviewing 검수 중 approved 검수 통과 rejected 검수 반려 published 게시됨

내부 지식 베이스, 제품 설명, 일반 생활 글 등 저위험 콘텐츠는 자동 게시를 설정할 수 있고, 고위험 콘텐츠는 반드시 사람의 검수를 거쳐야 한다.

11. 데이터베이스 설계

articles 테이블

CREATE TABLE articles ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, title VARCHAR( 255 ) NOT NULL, summary TEXT, content LONGTEXT, markdown LONGTEXT, cover_image VARCHAR ( 500 ), category VARCHAR ( 100 ), keywords JSON, tags JSON, platform VARCHAR ( 50 ), status VARCHAR ( 30 ) DEFAULT 'generated', source_prompt TEXT, source_image VARCHAR ( 500 ), external_id VARCHAR ( 255 ), error_message TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP );

article_tasks 테이블

CREATE TABLE article_tasks ( id BIGINT PRIMARY KEY AUTO_INCREMENT, task_id VARCHAR ( 100 ) UNIQUE NOT NULL , user_id BIGINT NOT NULL , status VARCHAR ( 30 ) DEFAULT 'pending' , progress INT DEFAULT 0 , article_id BIGINT , error_message TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP , updated_at DATETIME DEFAULT CURRENT_TIMESTAMP );

12. 비동기 작업 처리

GPT로 글을 생성하려면 수 초 또는 그 이상이 걸릴 수 있으므로 큐 사용을 권장한다.

API 요청 수신 │ ├── 작업 기록 생성 ├── taskId 반환 └── Redis 큐에 기록 │ ▼ Worker가 작업 처리 │ ├── 이미지 업로드 ├── GPT 호출 ├── 콘텐츠 검수 ├── 글 저장 └── 발행 또는 검수 대기열 진입

프런트엔드는 다음 방식으로 결과를 가져올 수 있다:

방식 1: 폴링

2초마다 한 번 /api/articles/tasks/:taskId 를 요청한다

방식 2: WebSocket

서버가 실시간으로 푸시한다:

{ "taskId" : "task_10001" , "status" : "completed" , "progress" : 100 }

방식 3: Server-Sent Events

글 생성 진행률을 표시하는 데 적합하다.

13. 보안 설계

1. API Key는 프런트엔드에 두면 안 된다

잘못된 방식:

// 브라우저 코드에서 직접 호출하지 말 것 const apiKey = "sk-xxxx" ;

올바른 방식:

프런트엔드 → 자체 백엔드 → GPT API

2. 인터페이스 남용 방지

다음을 추가해야 한다:

- 사용자 로그인 검증;

- 요청 빈도 제한;

- 사용자 1인당 일일 할당량;

- 1회 최대 글자 수 제한;

- 이미지 크기 제한;

- 생성 작업 타임아웃;

- 실패 재시도 메커니즘.

3. HTML 인젝션 방지

GPT가 생성한 HTML은 반드시 정제해야 하며, 안전한 태그만 허용한다. 예:

h1 , h2 , h3 , p , strong , em , ul , ol , li , blockquote , img , a

금지:

script iframe object embed style onerror onclick

DOMPurify 또는 백엔드 HTML 정제 라이브러리를 사용할 수 있다.

4. 멱등 처리 철저히 하기

발행 인터페이스는 중복 발행을 방지해야 한다.

예를 들어 클라이언트가 발행 버튼을 여러 번 클릭하면, 백엔드는 taskId, articleId 또는 멱등 키를 통해 이미 발행되었는지 판단해야 한다.

14. 비용 관리

자동 집필 시스템의 비용은 주로 다음에서 발생한다:

- GPT 텍스트 생성;

- 이미지 이해;

- 이미지 저장;

- 데이터베이스와 서버;

- CMS 발행 인터페이스.

비용을 관리하려면 다음 방식을 권장한다:

- 동일한 프롬프트에 대해 캐싱;

- 글 최대 길이 제한;

- 우선 저비용 모델로 초안 작성;

- 중요한 글은 고품질 모델로 다시 다듬기;

- 이미지 먼저 압축;

- 지나치게 긴 시스템 프롬프트를 반복 전송하지 않기;

- 일일 생성 횟수 제한;

- 매 호출의 Token 사용량 기록.

데이터베이스에 호출 기록 테이블을 추가할 수 있다:

CREATE TABLE ai_usage_logs ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT , model VARCHAR ( 100 ), input_tokens INT , output_tokens INT , estimated_cost DECIMAL ( 10 , 4 ), created_at DATETIME DEFAULT CURRENT_TIMESTAMP );

15. 권장 MVP 개발 계획

1단계: 기본 버전

구현:

- 사용자가 한 문장 입력;

- GPT가 글 생성;

- 제목과 본문 반환;

- 프런트엔드에서 글 편집 가능.

2단계: 이미지 생성

- 이미지 업로드;

- GPT 이미지 이해;

- 이미지를 기반으로 글 생성;

- 커버 설명과 태그 자동 생성.

3단계: CMS 발행

- WordPress 연동;

- 자체 구축 CMS 연동;

- 초안 및 즉시 발행 지원;

- 예약 발행 지원;

- 발행 결과 콜백 지원.

4단계: 엔터프라이즈급 역량

- 다중 사용자 및 권한 관리;

- 다중 모델 전환;

- 콘텐츠 안전 심사;

- 민감어 감지;

- 문서 중복 검사;

- 데이터 통계;

- 작업 큐;

- 실패 재시도;

- 작업 로그.

16. 최종 권장 방안

전체적으로 다음 모델을 채택할 것을 권장한다:

Vue / React 프런트엔드 │ ▼ Node .js + NestJS 백엔드 │ ├── OpenAI Responses API ├── MySQL ├── Redis + BullMQ ├── OSS / COS / S3 └── WordPress REST API

핵심 비즈니스 흐름:

텍스트 또는 이미지 입력 │ ▼ 파일 업로드 및 파라미터 검증 │ ▼ 비동기 작업 생성 │ ▼ GPT 호출로 구조화된 문서 생성 │ ▼ 콘텐츠 안전 검사 │ ▼ 초안으로 저장 │ ▼ 수동 심사 또는 자동 심사 │ ▼ 지정 플랫폼에 게시

이 방안은 "한 문장을 입력하면 문서를 생성"하는 것을 지원할 수 있을 뿐만 아니라, "이미지 한 장을 업로드하고 프롬프트와 결합하여 문서를 생성"하는 것도 지원하며, 동시에 WordPress, 자체 구축 CMS, 공식 계정 백엔드 및 다중 플랫폼 게시로 확장할 수 있는 능력을 갖추고 있다.

실제 프로젝트에서는 처음부터 완전한 무인 심사를 추구하지 말고, 먼저 다음을 구현할 것을 권장한다:

AI 문서 생성 → 수동 수정 → 원클릭 게시

콘텐츠 품질, 심사 규칙 및 게시 안정성이 검증된 이후에 자동 심사와 자동 게시 기능을 점차 개방한다.

excel

개발 엔지니어 @프리랜서

565

글

180k

읽음

151

팬