⬇ Word로 저장 ⬇ PDF로 저장

AI 콘텐츠 엔진 — 완전 설계도 + 구현 가이드

1인 사업가가 매일 글 안 쥐어짜고, AI가 차려주면 고르기만 하는 시스템

@junyoung.ai 무료 배포 리드 마그넷. 이 문서를 AI(Claude 등)에 주면 이 시스템을 그대로 설계·구현할 수 있도록 아키텍처·코드 스켈레톤·프롬프트 전문까지 넣었습니다.
우리가 실제로 설계해 만들고 있는 구조 그대로(2026-05). 크롤링 부분은 자매 가이드(social-crawling-guide, 같은 무료 배포)의 코드를 그대로 씁니다.

0. 왜 만드나

청중을 키우려면 꾸준히 발행해야 하는데, 혼자 사업하면 매일 좋은 글을 짜낼 에너지가 없습니다. 그래서 매일 쓰는 대신, 잘 터진 글을 자동으로 찾아 → 내 색으로 다시 쓰고 → 검증해 → '후보'로 차려주는 시스템을 만듭니다. 사람은 마지막에 택1 → 손수정 → 발행 만 합니다.

1. 핵심 원칙 5

1. AI는 발행하지 않는다, 차린다. 모방이 아니라 "검증된 골격 + 내 알맹이". 최종 선택·수정·발행은 사람.

2. "내가 실제로 해봤다"로 거짓 제거. 인기 프롬프트는 직접 실행해 진짜 결과를 낸다.

3. 유형 분기 — 못 만들 건 먼저 버린다. ①재현형 ②정보성 ③경험의존형(안 한 개인 일화 필요) → ③은 컷.

4. 검증을 시스템에 넣는다. 자기판정 금지. 별도 게이트 통과만 큐 진입.

5. 좋아요 말고 반응률(ER) 로 고른다.

2. 아키텍처 (5단계 / 6컴포넌트)

[collect] 수집 → [select] 선정·유형분류·중복컷 → [recreate] 내 톤으로 재생성
   → [verify] 독립 검증 게이트 → [queue] 후보 카드 + 영구저장 → (사람: 택1·수정·발행)
컴포넌트입력 → 출력핵심
collector계정·키워드 → raw.jsonApify(Threads 글·댓글) / BrightData(타 플랫폼)
selectorraw.json → 후보 5ER 랭킹 + 유형(A/B/C) + 중복/충돌 컷
recreator후보 → 초안(+레시피)LLM 프롬프트(아래 전문)
verifier초안 → PASS/FAIL원칙 체크리스트 게이트
archiver큐 → 영구저장원본+재생성 페어, 원본 링크 동반
notifier큐 → 알림후보 카드(원본·ER·유형·초안)

3. 구현 — 단계별 코드

3-1. collect (수집)

자매 가이드의 명령을 그대로 사용. 산출: raw.json(본문·ER 필드·post_url·미디어).

# Threads 키워드 검색 (social-crawling-guide 3-2 참조)
#   futurizerush/meta-threads-scraper, mode=search → threads_posts.json
# 소스 계정 풀은 별도 파일(dream100.txt 등)로 관리

3-2. select (선정 — ER 랭킹 + 유형분류 + 중복컷)

import json, re
raw = json.load(open("threads_posts.json", encoding="utf-8"))
USED = set(open("used_sources.txt").read().split()) if __import__("os").path.exists("used_sources.txt") else set()

def er(p):
    f=p.get("followers_count") or 1
    return (p.get("like_count",0)+2*p.get("reply_count",0)+3*p.get("repost_count",0))/f

def ctype(p):
    t=(p.get("text_content") or "").lower()
    if any(k in t for k in ["프롬프트","this prompt","써봤","결과물"]): return "A"   # 재현형
    # 경험의존형(개인 일화 단정) 신호 → C(컷)
    if re.search(r"(제가|내가).*(만들었|벌었|성공|했더니)", t): return "C"
    return "B"   # 정보성

cands=[]
for p in raw:
    t=p.get("text_content") or ""
    if len(t)<30 or not re.search(r"[가-힣]",t): continue
    if p.get("post_url") in USED: continue          # 이미 재생성한 원본 컷
    c=ctype(p)
    if c=="C": continue                              # 경험의존형 = 날조 게이트
    cands.append((er(p), c, p))
cands.sort(key=lambda x:-x[0])
top5=cands[:5]
json.dump([{"er":round(e,3),"type":c,"src":p.get("post_url"),"text":p.get("text_content")} for e,c,p in top5],
          open("candidates.json","w",encoding="utf-8"), ensure_ascii=False, indent=2)

3-3. recreate (재생성) — LLM 프롬프트 전문

각 후보를 이 프롬프트로 AI에 던져 초안 생성:

너는 '@내브랜드'의 콘텐츠 작가다. 아래 '잘 터진 원본'의 *구조(hook·전개·완결 방식)만* 빌리고,
내용은 전부 내 맥락으로 바꿔 새 글을 써라. 원본 문장 복붙 금지(표절·ban).

[원본]
{원본 본문 + (있으면) 작성자 댓글체인}

[내 정보]
- 브랜드/포지셔닝: [여기에 내 포지셔닝 — 예: AI로 1인기업 운영·자동화. ≠코드 자랑, 비즈니스 결과 중심]
- 톤: 존댓말, 단정(~입니다), 마크다운 강조 금지(플랫폼에서 깨짐)
- 사실 규칙: 내가 실제로 안 한 개인 경험/결과는 쓰지 마라. 불확실하면 그 각도 버려라.

[출력]
- 본문(첫 줄=스크롤 멈추는 hook) + (Threads면) 자기 댓글 체인.
- 프롬프트/방법을 줄 거면: 역할+제약+출력형식+채운 예시까지(범용 템플릿 금지).
- 내용/리스트면: 약속한 개수만큼 다, 각 항목에 근거.
- 인사이트면: 통념을 깨는 한 줄 + 독자 현 상황을 지목하는 진단.
- 마지막: 탈세일즈 마무리 + (있으면) 리드마그넷 요청형 CTA.
유형 A(재현형)는 추가로 "이 프롬프트를 직접 실행해 결과물 캡처" 레시피를 붙인다.

3-4. verify (검증 게이트)

자기판정 금지. 아래를 통과한 것만 큐로.

체크리스트(통과 못 하면 리젝):
□ 사실: 안 한 개인 경험/결과 단정 없음
□ 가치: 이 글 하나로 가져갈 구체 가치(프롬프트/단계/숫자) 있음
□ Hook: 첫 줄이 스크롤 멈춤
□ 포지셔닝: 내 색/맥락 유지(단순 모방 아님)
□ 카피: 마크다운 강조·영문 남발·논리 비약 없음
□ 표절: 원본 문장 복붙 없음

(전용 검증 에이전트/세션을 따로 두면 자동화 가능.)

3-5. queue + archive (후보 차림 + 영구저장)

queue/<date>/index.md  ← 후보 5건: [원본링크 · ER · 유형 · 재생성 초안 · (A면)실행레시피]
used_sources.txt       ← 채택 무관, 재생성한 원본 URL 누적(중복 방지)
모든 산출물(원본+재생성 페어) 영구 저장. 미디어는 공개 버킷(예: Cloudflare R2)에.

4. 고려사항

5. 채널 확장

같은 5단계, 수집 도구·완결장치만 교체: IG/YT=BrightData, 완결=IG 캐러셀(슬라이드당 1요점)·YT 챕터.

6. 수동 버전 (도구 없이 당장)

주 1회 ①내 분야 계정 5~10개의 반응률 높은 글 5개 모으기 ②내가 진짜 말할 수 있는 것만 고르기 ③골격만 빌리고 알맹이는 내 경험·사업으로 ④발행 전 체크(거짓·내 색·hook).

한 줄 요약

매일 쓰지 말고, 시스템이 차려주고 나는 고른다. 검증된 골격 + 내 알맹이 + 내가 실제로 한 것.

— 막히면 @junyoung.ai. 같이 봅니다.

© @junyoung.ai