반응형
방법 A) 노코드/로코드(빠르게 구축)
구성: Notion(목차/진행관리) → Zapier/Make(자동화) → OpenAI API(생성) → Google Docs(합본) → 최종 HTML 복사/업로드
- Notion DB 설계(목차 관리)
- 컬럼 예시: book_title, chapter_no, chapter_title, outline(요약 Bullet), keywords, target_length, status(Queued/Writing/Done), doc_url.
- 한 챕터(절)당 한 행으로 만들어요.
- 자동화 시나리오(Zapier 또는 Make)
- 트리거: Notion에서 status=Queued 로 바뀌면 시작. (Zapier/Make로 Notion 연결) (Zapier, Make)
- 액션1(생성): OpenAI “Responses API”로 챕터 초안 생성. 프롬프트는 아래 템플릿 참고. (OpenAI 플랫폼)
- 액션2(합본): Google Docs 문서(책 단위 1개)에 장/절 헤더 규칙(H2/H3)으로 Append.
- 액션3(상태 업데이트): Notion의 해당 행을 Done으로, doc_url에 합본 문서 링크 기록.
- (옵션) 표/이미지 보강: 동일 플로우에서 표 생성(HTML/Markdown) → Docs에 삽입.
- 포스팅
- Google Docs → “웹용 HTML”로 복사 붙여넣기.
- 워드프레스 사용 시엔 REST API로 바로 발행 가능(티스토리 대안).
- 티스토리는 API 종료로 직접 로그인 업로드(혹은 브라우저 자동화) 권장 — 아래 “중요” 참고.
장점: 빠른 구축/유지보수 용이.
단점: 최종 포스팅 단계는 반자동(티스토리).
방법 B) 코드 기반(완전 자동+맞춤)
구성: YAML/CSV 목차 → Python 스크립트 → OpenAI API로 각 절 생성 → Markdown/HTML 합본 → (워드프레스 REST 게시 or 티스토리 수동/브라우저 자동)
1) 프롬프트 템플릿
- 시스템 프롬프트(고정):
당신은 출판용 글감 개발 에디터입니다.
요구사항: (1) 사실 정확성, (2) 분량 준수, (3) 한국어 가독성, (4) 블로그/전자책 친화적 H2/H3 구조, (5) 저작권 안전(직접 서술), (6) 표/목록/예시 적극 활용.
톤: 전문가+친절. 플래그: [근거확인필요] 항목은 각주로 표시.
- 유저 프롬프트(각 절):
[책 제목] = "{book_title}"
[챕터 번호] = {chapter_no}
[챕터 제목] = "{chapter_title}"
[키워드] = {keywords}
[요약 아웃라인] =
{outline}
요청:
1) H2로 챕터 제목, H3 소제목 3~6개 구성
2) 분량 {target_length}자 내외
3) 서론-본론-핵심 체크리스트-간단 요약 구조
4) 표가 적합하면 Markdown 표 포함
5) 전자책 편집을 고려해 문단 길이 균형화
2) 예시 Python 스크립트 (요지)
아래 코드는 CSV/YAML 목차를 돌면서 Responses API로 초안을 만들고 하나의 Markdown/HTML로 합칩니다. (OpenAI 최신 “Responses API” 참조) (OpenAI 플랫폼)
# requirements: openai>=1.* , pyyaml, pandas, markdown
import os, yaml, pandas as pd
from openai import OpenAI
from datetime import datetime
from markdown import markdown
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
BOOK_TITLE = "전자책 제목 예시"
MODEL = "gpt-4.1-mini" # 최신 가용 모델로 교체 가능
def gen_section(ch):
system_prompt = """당신은 출판용 글감 개발 에디터입니다.
요구사항: (1) 사실 정확성, (2) 분량 준수, (3) 한국어 가독성, (4) 블로그/전자책 친화적 H2/H3 구조, (5) 저작권 안전(직접 서술), (6) 표/목록/예시 적극 활용.
톤: 전문가+친절. 플래그: [근거확인필요] 항목은 각주로 표시."""
user_prompt = f"""[책 제목] = "{BOOK_TITLE}"
[챕터 번호] = {ch['chapter_no']}
[챕터 제목] = "{ch['chapter_title']}"
[키워드] = {ch.get('keywords', '')}
[요약 아웃라인] =
{ch.get('outline','')}
요청:
1) H2로 챕터 제목, H3 소제목 3~6개 구성
2) 분량 {ch.get('target_length', 1200)}자 내외
3) 서론-본론-핵심 체크리스트-간단 요약 구조
4) 표가 적합하면 Markdown 표 포함
5) 전자책 편집을 고려해 문단 길이 균형화
"""
resp = client.responses.create(
model=MODEL,
input=[{"role":"system","content":system_prompt},
{"role":"user","content":user_prompt}]
)
# 텍스트 추출 (Responses API 포맷에 맞춰 content 파싱)
out = resp.output_text
return out
def compile_book(chapters):
md_parts = [f"# {BOOK_TITLE}\n\n생성일: {datetime.now():%Y-%m-%d}\n"]
for ch in chapters:
md_parts.append(gen_section(ch))
md_parts.append("\n---\n")
md = "\n".join(md_parts)
html = markdown(md, extensions=["tables","fenced_code"])
return md, html
if __name__ == "__main__":
# 예: chapters.yaml 로드
with open("chapters.yaml","r",encoding="utf-8") as f:
chapters = yaml.safe_load(f)
md, html = compile_book(chapters)
with open("ebook.md","w",encoding="utf-8") as f: f.write(md)
with open("ebook.html","w",encoding="utf-8") as f: f.write(html)
print("done: ebook.md / ebook.html")
참고: Assistants → Responses API로 마이그레이션 권장. (Assistants는 2026년 상반기 중단 예정 공지) (OpenAI 플랫폼)
3) 게시 자동화(워드프레스 권장)
- WordPress는 REST API로 곧바로 게시/업데이트가 쉬워서 완전 자동화에 적합.
- 티스토리는 API 종료 이슈 때문에 아래 대안을 검토하세요.
티스토리 사용자라면: 중요한 점 & 대안
- 티스토리 Open API가 2024년 2월까지 순차 종료되었습니다. 공식 문서/공지에 종료 안내가 명시되어 있어 프로그램으로 글 작성/업로드가 공식적으로 막혔습니다. (tistory.github.io, GitHub)
가능한 대안
- 반자동 업로드: 위 루트 A/B로 만든 ebook.html을 티스토리 에디터에 붙여넣기/이미지 수동 첨부.
- 브라우저 자동화(Playwright/Puppeteer): 로그인 후 에디터에 HTML/이미지 업로드를 스크립트로 수행.
- 장점: 사실상 “자동 게시” 가능
- 단점: 로그인/보안정책/에디터 변경에 민감, 이용약관 위반 소지가 있을 수 있어 책임하에 사용 권장.
- 플랫폼 병행: 워드프레스(자동) + 티스토리(요약본 수동 싱디케이션).
- 워드프레스에 완전 자동으로 올리고, 티스토리엔 요약본+원문 링크를 수동으로 등록.
- 콘텐츠 허브 전략: Notion/Docs를 원본 저장소로, 티스토리·전자책·워드프레스에 각각 파생 배포.
품질/운영 체크리스트
- SEO 일관성: H2/H3, 키워드·메타디스크립션, 표준 요약문.
- 사실 검증: [근거확인필요] 플래그가 나오면 출처 확인 후 문서에 각주/링크 반영.
- 저작권/중복: 재작성(Paraphrasing) 지향, 이미지/표는 저작권 확인.
- 톤·브랜드 가이드: 도입부 카피/CTA/요약 박스(“이 절의 핵심 3줄”) 템플릿화.
- 버전 관리: Google Docs나 Git으로 버전·리뷰·주석 워크플로 확보.
- 프롬프트 튜닝: 전자책-블로그 겸용이면 “문단 길이/표/요약 박스”를 강제하는 규칙을 Prompt에 명시.
바로 써먹는 일정/자동화 제안(권장)
- Day 1~2: Notion DB/필드 정의 → Zapier/Make 기본 흐름(Queued → 생성 → Docs Append). (Zapier, Make)
- Day 3: 프롬프트 튜닝(샘플 3장) → 표준 H2/H3 스타일 가이드 확정.
- Day 4: 책 1권(8~12절) 자동작성 테스트 → ebook.html 생성 → 티스토리 수동 업로드.
- Day 5: 워드프레스 REST 게시 자동화(사용 시) + 이미지 처리 보강(캡션/alt 텍스트 자동화).
이 코드, 한 줄 요약
chapters.yaml에 적어둔 **목차(절 단위 메타데이터)**를 읽고 → OpenAI Responses API로 각 절의 초안을 생성 → ebook.md / ebook.html 두 파일로 합쳐서 출력합니다.
전체 흐름
- 환경 준비
- OPENAI_API_KEY 환경변수 필요
- 의존성: openai>=1.*, PyYAML, pandas, markdown (테이블용 확장 포함)
- 목차 로딩
- chapters.yaml을 읽어 파이썬 dict(list)로 가져옴.
- 절 단위 원고 생성
- 각 절에 대해 gen_section()이 시스템 프롬프트 + 유저 프롬프트를 만들어 Responses API에 요청 → resp.output_text로 본문을 받음.
- 합본 제작
- compile_book()이 머리말(제목/생성일) + 각 절 콘텐츠를 이어 Markdown으로 합치고, 이를 HTML로도 변환.
- 파일 저장
- 최종 ebook.md, ebook.html 생성.
주요 함수별 설명
1) gen_section(ch)
- 고정 시스템 프롬프트: 글 품질 가이드(정확성/분량/가독성/H2·H3 구조/저작권/표·목록 활용 등).
- 유저 프롬프트: book_title, chapter_no, chapter_title, keywords, outline, target_length를 채워서 “H2/H3 구조, 분량, 표, 체크리스트, 요약”을 강제.
- 요청: client.responses.create(...)
→ resp.output_text로 모델의 최종 텍스트만 꺼냄.
2) compile_book(chapters)
- 머리말(# {BOOK_TITLE} + 생성일) → 각 절을 순회하며 gen_section() 결과를 추가 → 절 사이에 구분선(---).
- markdown()으로 HTML 변환(테이블·펜스 코드 확장 활성화).
3) __main__
- chapters.yaml 열기 → compile_book() 호출 → ebook.md/html 저장 후 종료.
chapters.yaml 예시
- chapter_no: 1
chapter_title: "전자책 기획의 핵심"
keywords: ["타깃독자","문제정의","콘셉트"]
outline: |
- 독자 페르소나
- 해결하려는 문제
- 차별화 포인트
target_length: 1200
- chapter_no: 2
chapter_title: "목차 설계와 스토리라인"
keywords: ["목차구조","서사흐름","전개"]
outline: |
- 3막 구조
- 장/절 배치
- 회고 포인트
target_length: 1200
리스트 항목(절)마다 같은 키를 넣으면 됩니다. target_length는 없으면 기본 1200자로 처리.
실행 방법 (로컬)
# 1) 패키지 설치
pip install "openai>=1.0.0" pyyaml pandas markdown
# 2) 키 설정 (맥/리눅스)
export OPENAI_API_KEY="sk-xxxx"
# 3) 실행
python your_script.py
# => ebook.md, ebook.html 생성
커스터마이즈 포인트
- BOOK_TITLE: 책 제목
- MODEL: 예시로 "gpt-4.1-mini" 사용. 계정/요금/품질 균형에 맞춰 변경.
- 프롬프트: H2/H3 개수, 체크리스트/요약 박스 형식, 금칙어, 톤/스타일 등 조직 가이드에 맞게 강화.
- target_length: 절별 분량 조절.
- 출력 형식:
- Markdown 그대로 사용(티스토리/워드프레스 편집기와 잘 맞음)
- HTML 커스터마이즈(클래스/스타일 추가)도 가능.
실무 팁(바로 개선 가능)
- 재시도·속도
- 네트워크/속도 이슈 대비 간단한 재시도 로직, 절 단위 캐시 저장(실패 시 이어서 재생성).
- 동시 요청은 과금·레이트리밋 고려하여 제한.
- 로그/검수
- logging으로 어떤 절이 생성됐는지 기록.
- 생성물 중 “[근거확인필요]” 플래그 찾아 자동 요약표를 맨 끝에 덧붙이기.
- 템플릿 일관성
- H2/H3 규칙, 요약 박스, CTA(예: “다음 절로 이동”)를 프롬프트에 명시해 변동 최소화.
- 메타데이터
- Markdown 맨 위에 YAML front matter 추가(제목/설명/키워드/작성일) → 정적 블로그나 CMS 연동 시 편리.
- 이미지/표
- 표는 Markdown 표를 우선 권장(HTML 에디터 호환).
- 이미지 캡션·alt 자동 생성 루틴을 별도 추가 가능.
- 플랫폼 업로드
- 워드프레스: REST API로 ebook.html 자동 게시가 간단.
- 티스토리: (공식 API 종료) HTML 붙여넣기 수동 업로드 또는 브라우저 자동화 스크립트로 대체.
흔한 에러와 해결
- OPENAI_API_KEY 미설정 → 401/키 관련 에러. 환경변수 확인.
- chapters.yaml 인코딩 → UTF-8로 저장(윈도우 메모장 기본 인코딩 주의).
- 마크다운 테이블이 안 보임 → markdown(..., extensions=["tables","fenced_code"]) 유지.
- 응답 포맷 파싱 이슈 → resp.output_text 사용(클라이언트 버전에 따라 필드명/포맷이 다를 수 있으니 최신 버전 유지).
- 긴 글 잘림 → 모델/정책에 따라 토큰 한도. 절을 더 쪼개거나 모델 변경.
반응형
'IT와 보안 그 어디 쯤' 카테고리의 다른 글
| 업비트 자동매매 프로그램, 1년간 가격및 거래량 모음 (3) | 2025.08.30 |
|---|---|
| 부동산 뉴스 요약해주는 파이썬 코드 (0) | 2024.09.03 |
| 프롬프트의 구성요소 (0) | 2024.07.20 |
| 프롬프트 엔지니어링 #1 (0) | 2024.07.05 |