SELFISH AAA

결과물

만든 것: 인스타그램 카드뉴스 자동 제작 시스템

매주 월/목 12:38에 자동 실행되는 인스타그램 카드뉴스 파이프라인을 구축했다.

계정: @aisellerguide (온라인 셀러를 위한 AI 정보)

crontab 트리거 1개 (매주 월/목 12:38 자동 실행)

채널자동 생성물발송 방식
인스타그램카드뉴스 5장 (1080×1080 PNG) + 캡션 + 해시태그instagrapi 자동 업로드
crontab 트리거 (월/목 12:38)


┌─ Step 1: 리서치 ───────────────────────────────────┐
│  Claude API + 웹 검색으로 최신 셀러 뉴스 수집            │
│  → 주제 선정 → 구조화된 JSON 데이터 생성                 │
└───────────────────────────────────────────────────┘


┌─ Step 2: 콘텐츠 생성 ──────────────────────────────┐
│  JSON 데이터를 디자인 시안(HTML 템플릿)에 자동 삽입       │
│  → 5장짜리 카드뉴스 HTML 완성                        │
└─────────────────────────────────────────────────┘


┌─ Step 3: 이미지 변환 ──────────────────────────────┐
│  Playwright로 HTML을 브라우저에서 열고                │
│  → 카드 1장씩 스크린샷 → PIL로 1080×1080 리사이즈       │
└───────────────────────────────────────────────── ┘


┌─ Step 4: 인스타 업로드 ────────────────────────────┐
│  instagrapi로 5장 캐러셀 자동 게시                   │
│  → 캡션 + 해시태그 자동 생성                         │
└────────────────────────────────────────────────┘

카드뉴스 5장 구조

역할설계 의도
1장커버 (후킹)“최대 1억원 지원” 같은 숫자로 시선 끌기
2장핵심 바로 전달뜸들이지 않고 바로 본론 → 이탈 방지
3장상세/조건관심 생긴 사람한테 구체적 정보
4장꿀팁/주의사항색상으로 구분 (주황=주의, 초록=꿀팁, 블루=정보)
5장CTA”팔로우하기” 유도

구성 파일

파일역할
research.pyClaude API + 웹 검색으로 셀러 뉴스 수집 → JSON 반환
generate.pyJSON 데이터를 HTML 카드뉴스 템플릿에 삽입
render.pyPlaywright 스크린샷 → PIL 리사이즈 → PNG 5장
instagram.pyinstagrapi 로 캐러셀 자동 업로드
pipeline.py위 4단계를 순서대로 실행하는 총괄 스크립트
run.shcrontab에서 실행하는 쉘 스크립트
aiforseller/
├── pipeline/
│   ├── research.py      ← 뉴스 수집
│   ├── generate.py      ← HTML 카드뉴스 생성
│   ├── render.py        ← PNG 이미지 변환
│   ├── instagram.py     ← 인스타 업로드
│   ├── pipeline.py      ← 전체 실행
│   └── run.sh           ← 크론잡 실행
├── output/              ← 생성된 카드뉴스 저장
├── cardnews/            ← 수동 제작 샘플
├── logs/                ← 실행 로그
├── 디자인시안.md         ← 카드뉴스 디자인 스펙
└── .env                 ← API키, 비밀번호 (비공개)

만든과정 및 삽질

Phase 1: 기획 및 디자인 (Day 1)

카드뉴스 스타일 3가지를 놓고 비교했다. 미니멀, 클린&프로페셔널, 그라디언트 중에서 클린&프로페셔널 선택. 흰 배경 + 파란색(#4361ee) 포인트로 신뢰감 있는 느낌.

5장 구조를 처음에 “커버→배경→핵심→팁→CTA”로 잡았는데, 2장에서 배경 설명하면 뜸들이는 느낌이라 구조를 바꿨다. 1장 커버에서 후킹하고, 2장에서 바로 핵심 전달하는 구조로 변경.

디자인 시안을 디자인시안.md로 정리해서 카드 레이아웃, 컬러 팔레트, 글자 수 제한 등을 문서화했다. 이 문서가 이후 generate.py의 HTML 템플릿 기준이 됐다.

Phase 2: 파이프라인 구축 (Day 1)

Claude Code에서 OMC의 executor 에이전트를 활용해 파이프라인 코드를 작성했다.

리서치 에이전트 (research.py)

  • Claude API에 web_search_20250305 도구를 붙여서 최신 뉴스를 자동 검색
  • 4개 카테고리(지원금, 플랫폼 정책, 셀러 꿀팁, 트렌드) 중 하나를 골라 주제 선정
  • 결과를 JSON 구조로 반환 (hook_title, core_points, details, tips)

콘텐츠 생성 (generate.py)

  • JSON 데이터를 미리 만든 HTML/CSS 템플릿에 자동 삽입
  • Noto Sans KR 폰트, 인라인 CSS로 브라우저 의존성 최소화

이미지 변환 (render.py)

  • Playwright로 HTML을 Chromium에서 열고 카드 1장씩 스크린샷
  • PIL(Pillow)로 1080×1080 리사이즈 → PNG 5장 출력

Phase 3: 인스타그램 연동 삽질 (Day 1) — 가장 많이 삽질

시도 1: Meta Graph API (실패)

공식 API로 하려고 Meta Developer에서 앱을 만들었다. 근데 Facebook 페이지 연결, 권한 요청, 비즈니스 인증 등 절차가 너무 복잡했다. 새로 만든 계정이라 인증 자체가 불가.

시도 2: instagrapi 비밀번호 로그인 (실패)

비공식 라이브러리 instagrapi로 방향 전환. 비밀번호 로그인 시도 → Instagram이 “수상한 로그인”으로 판단해서 차단. BadPassword 에러.

시도 3: 세션 ID 로그인 (실패)

브라우저 쿠키에서 세션 ID를 추출해서 로그인 시도. 역시 차단. URL 인코딩 문제(%3A:)도 있었지만 근본 원인은 새 계정은 24~48시간 지나야 외부 도구에서 접근 가능하다는 것.

추가 삽질: instagrapi 버전 호환

Python 3.9 환경에서 instagrapi 2.3.0 설치 → TypeError: unsupported operand type(s) for | 에러. Python 3.10+ 문법 문제. instagrapi==1.19.8로 다운그레이드해서 해결.

추가 삽질: .env 특수문자

비밀번호에 !@가 있으면 export $(cat .env | xargs) 방식으로 읽을 때 깨짐. python-dotenv로 해결.

Phase 4: 스케줄러 (Day 1)

Mac의 crontab에 등록:

38 12 * * 1,4  /Users/owen/claude\\ total/aiforseller/pipeline/run.sh

run.sh가 .env 로드 → Python PATH 설정 → pipeline.py 실행 → 로그 파일 자동 기록


인사이트

코드보다 플랫폼 정책이 더 큰 벽

파이프라인 코드는 하루만에 다 만들었다. 근데 Instagram 로그인 하나 때문에 계속 삽질했다.

AI가 만든 글은 반드시 팩트 체크

처음 AI가 뽑은 커버 타이틀: “3.4조 지원금 받고 계신가요?” → 정부 전체 예산을 개인이 받는 것처럼 오해 유발. “최대 1억원 지원받는 법”으로 수정했다. AI 콘텐츠는 과장 표현 검수가 필수.

모듈로 나누면 고치기 쉽다

리서치/생성/이미지/업로드를 각각 독립 파일로 만들어서, 디자인만 바꾸고 싶으면 generate.py만 수정하면 된다. 나머지는 건드릴 필요 없다.


도구 사용

도구용도
Claude Code (Opus)전체 프로젝트 진행, 코드 작성, 디자인 기획
oh-my-claudecode에이전트 위임, 메모리, 스킬 활용
Claude API + 웹 검색리서치 에이전트의 뉴스 수집
PlaywrightHTML → PNG 스크린샷 변환
Pillow (PIL)이미지 1080×1080 리사이즈
instagrapi인스타그램 캐러셀 자동 업로드
crontab매주 월/목 자동 실행 스케줄링

다시 한다면?

계정을 미리 만들어놓기

당일 가입 + 당일 자동화는 무조건 차단당한다. 최소 2~3일 전에 계정을 만들고, 앱에서 정상적으로 사용한 뒤에 자동화를 연결해야 한다.

팩트 체크 단계 추가

리서치 → 생성 → AI 검수(팩트체크) → 이미지 → 업로드. 과장된 표현을 자동으로 잡아내는 검수 에이전트를 중간에 넣으면 더 안전하다.

반자동으로 시작

업로드 전에 슬랙으로 미리보기를 보내고, 사람이 “OK” 하면 올리는 방식. 신뢰도가 쌓이면 완전 자동으로 전환.

원소스 멀티유즈 확장

같은 리서치 데이터로 릴스 대본, 캡션, 블로그 글 등 여러 포맷을 만들 수 있다. 지금은 카드뉴스 1종이지만, 같은 JSON 데이터에서 다른 템플릿으로 변환하면 된다.


OMC(oh-my-claudecode) 활용

Claude Code(터미널에서 쓰는 AI 코딩 도구)를 더 강력하게 만들어주는 확장팩. 혼자 일하는 AI를 “팀”처럼 역할을 나눠서 일하게 해준다.

이번에 활용한 기능들

기능쉽게 말하면이번에 어떻게 썼는지
에이전트 위임리서치는 리서치 AI한테, 코딩은 코딩 AI한테 맡기기executor 에이전트로 파이프라인 코드 구축
스킬(Skill)특정 작업에 특화된 자동 워크플로우brainstorming으로 디자인 기획, schedule로 crontab 등록
메모리이전 대화에서 정한 기준을 자동 기억카드뉴스 스타일, 5장 구조, 계정명 변경 등 기억
훅(Hook)세션 시작 시 자동으로 컨텍스트 주입프로젝트 설정, 디자인 기준 자동 로드

Claude Code가 터미널이라서 가능한 것

  • 파일을 직접 만들고 수정 (.py, .html, .sh 코드 작성)
  • 프로그램을 직접 실행 (pip install, python3 pipeline.py)
  • 시스템 명령어 실행 (crontab 등록, Playwright 브라우저 실행)
  • 외부 API 연결 (Claude API, Instagram API)

웹/앱 버전 Claude는 대화만 가능하고 이런 시스템 작업은 못 한다. 자동화 파이프라인은 반드시 터미널 환경(Claude Code CLI)이 필요하다.

OMC = Claude Code의 “사용설명서”를 미리 넣어준 것

비유하자면:

  • Claude Code = 엄청 유능한 신입사원
  • OMC = 그 신입한테 “우리 회사는 이렇게 일해” 매뉴얼을 준 것

신입이 아무리 똑똑해도 매뉴얼 없이 일하면 매번 “이거 어떻게 할까요?” 물어보거나, 자기 방식대로 해서 다시 고쳐야 하는 상황이 생깁니다.

OMC가 실제로 하는 건 CLAUDE.md라는 파일에 “이렇게 일해라”는 규칙을 미리 세팅해주는 거예요. 그래서:

1. 한마디로 복잡한 작업이 돌아간다

OMC 없이:

“웹 검색해서 셀러 뉴스 찾아줘” → “그거 JSON으로 정리해줘” → “HTML로 만들어줘” → “스크린샷 찍어줘” → “crontab 등록해줘” 5번 지시

OMC 있을 때:

“autopilot — 카드뉴스 파이프라인 만들어줘” 1번 지시 → 알아서 계획 세우고, 코드 짜고, 테스트하고, 스케줄까지

이건 Claude Code가 못 하는 게 아니라, 매번 단계마다 지시하는 수고를 줄여주는 겁니다.

2. 검증된 워크플로우를 가져다 쓴다

OMC에는 스킬(Skill)이라는 게 40개 넘게 들어있어요. 이건 수천 명이 써보면서 다듬어진 “이렇게 하면 결과가 좋더라” 레시피입니다.

예를 들어 brainstorming 스킬:

  • 그냥 Claude한테 “디자인 뭐가 좋을까?” → 아무거나 하나 추천
  • OMC brainstorming → 3가지 시안 비교표 + 장단점 + 추천 이유

프롬프트를 잘 쓰면 같은 결과를 얻을 수 있지만, 그 “잘 쓴 프롬프트”가 이미 스킬로 만들어져 있는 거예요.

3. 대화가 바뀌어도 기준이 유지된다

이게 이번 프로젝트에서 실제로 경험한 것입니다:

  • 디자인 스타일 “클린&프로페셔널”로 정함 → 다음 대화에서도 기억
  • 계정명 aisellerguide로 바꿈 → 자동 반영
  • 5장 구조 확정 → 새 카드뉴스 만들 때마다 같은 구조 유지

OMC 없으면? 새 대화 시작할 때마다 “디자인은 파란색이고, 계정명은 aisellerguide이고, 5장 구조는…” 매번 다시 설명해야 합니다.


결론: 없어도 되지만, 있으면 “내가 할 일이 줄어든다”

OMC 없이OMC 있으면
지시단계마다 하나씩한마디로 끝까지
프롬프트매번 직접 잘 써야 함검증된 스킬 가져다 씀
기억매 대화마다 다시 설명자동 기억·유지

“Claude Code가 유능하니까 안 써도 되지 않나?” → 맞습니다. 근데 유능한 도구를 더 적은 노력으로 쓸 수 있게 해주는 게 OMC예요.

oh-my-zsh가 터미널을 못 쓰는 사람한테 필요한 게 아니라, 이미 터미널 쓸 줄 아는 사람이 더 편하게 쓰려고 설치하는 것과 같습니다.