자동화 파이프라인7 분 읽기

유튜브·인스타 매일 자동 게시를 만들었다 — 아무도 안 알려주는 함정들

launchd로 유튜브 쇼츠(Data API)와 인스타그램(Graph API)에 매일 무인 게시하는 파이프라인 구축기 — OAuth 함정, 미디어 컨테이너 폴링 버그, 그리고 스팸이 되지 않게 막은 방법.

#automation#youtube-api#instagram-graph-api#launchd#social-media
개념 도식: 유튜브·인스타 매일 자동 게시 파이프라인
2트랙 파이프라인 개념 도식.

작은 웹앱을 많이 만드는데, 병목은 만들기가 아니라 늘 도달이었습니다. 그래서 유튜브와 인스타에 매일 무인으로 게시하는 파이프라인을 만들었습니다. 저녁을 통째로 잡아먹은 함정까지, 솔직하게 적습니다.

구상

1인이 두 플랫폼에 매일 손으로 게시하는 걸 영원히 할 순 없습니다. launchd 잡이 깨어나서, 올릴 만한 걸 만들고, 게시까지 — 제가 자는 동안 — 하길 원했습니다. 절대 조건: 스팸이 되면 안 됩니다. 스팸은 밴을 부르고, 유튜브에선 비진정성 콘텐츠 정책으로 수익화가 박탈됩니다.

이 조건이 전부를 결정했습니다. 제가 정한 규칙: 소스는 유한하고 실제여야 한다. 파이프라인은 무한 프롬프트가 아니라 제 실제 블로그 글과 앱 데이터에서 뽑습니다. 그래서 소스가 소진되면 멈춥니다. 그게 '자동화'와 '대량 양산 쓰레기'를 가르는 선입니다.

유튜브 트랙: 함정들

쇼츠 쪽은 실제 글을 대본으로 바꾸고, 렌더하고, Data API로 업로드합니다. 실제로 시간을 잡아먹은 것:

  • OAuth가 엉뚱한 채널을 잡았다. 첫 인증이 브랜드 채널이 아니라 개인 채널에 조용히 묶였습니다. "테스트 업로드"가 전부 엉뚱한 곳으로 갔죠. 동의 화면에서 브랜드 채널을 명시적으로 골라야 하고, 채널별 토큰을 분리해야 합니다.
  • 테스트 사용자 등록 전엔 403. OAuth가 저를 테스트 사용자로 추가하기 전까지 access_denied를 냈습니다. 내 채널에 올리는 데엔 정식 앱 심사가 필요 없습니다 — 이 함정이 며칠을 낭비시킵니다.
  • 애널리틱스는 약 1일 지연. 채널 총조회와 완주율이 API에 뜨는 데 하루쯤 걸립니다. 당일엔 Studio 실시간만 나오죠. 그래서 "어떤 포맷이 먹히나" 판정은 영상별 조회수(준실시간)를 읽고, 완주율이 집계되면 그걸로 전환합니다.
  • 헤드리스 인증이 실제로 된다. 대본 생성을 launchd 안에서 헤드리스 CLI 호출로 돌리고, 홈 디렉토리로 인증합니다. 이게 진짜 무인을 가능하게 합니다.

게시 잡은 각 훅 유형이 실제로 낸 성과로 큐를 정렬하고, 채널당 하루 1편 올리고, 중복을 걸러내고, 큐가 비면 아무것도 안 합니다.

인스타 트랙: Graph API 함정

새 인스타 계정에서 브라우저 자동화는 밴 지름길이라, 정식 Instagram Graph API로 갔습니다. 여기 함정은 다릅니다:

  • 앱 심사 2~4주 — 아니면 0. 게시엔 instagram_business_content_publish 권한이 필요한데, 보통 몇 주 심사입니다. 개발 모드에서 내 계정을 테스터로 추가하면 즉시 내 계정에 게시할 수 있어 대기를 건너뜁니다.
  • JPEG만, 공개 URL만. API는 PNG도, 로컬 파일도 안 받습니다 — 이미지는 공개 URL의 JPEG, 1:1 또는 4:5여야 합니다. 제 OG 이미지(PNG, 1.91:1)는 여기서 쓸모없어서, 인스타 전용 카드(헤드리스 Chrome → JPEG)를 렌더해 공개 경로에 먼저 배포합니다.
  • 너무 빨리 게시하면 나는 버그. 게시는 2단계입니다: 미디어 컨테이너 생성, 그다음 발행. 생성 직후 발행을 부르면 Media ID is not available이 납니다. 컨테이너가 아직 준비 안 된 거죠 — 상태가 FINISHED가 될 때까지 폴링해야 합니다. 권한 에러처럼 보이지만 아닙니다.
  • 앱 시크릿 vs 액세스 토큰. 헷갈려서 엉뚱한 걸 붙여넣기 쉽습니다 — 앱 시크릿은 32자 hex, 액세스 토큰은 긴 IGAA… 문자열. 갱신엔 토큰만, 최초 교환엔 시크릿이 필요합니다.

이것들만 처리하면, launchd 잡이 매일 아침 카드를 렌더하고, 공개 URL에 배포하고, 2단계 발행을 돌립니다.

솔직한 부분

두 가지를 밑줄 긋고 싶습니다. 첫째: 자동 게시는 도달이 아니다. 갓 만든 계정은 파이프라인이 아무리 깨끗해도 도달이 거의 0입니다 — 자동화는 시도의 비용을 낮출 뿐, 콘텐츠와 초기 알고리즘이 여전히 결정합니다. 둘째: 이 전체의 안전은 그 유한-소스 규칙에 있습니다. 무한 프롬프트로 생성하는 파이프라인은 수익화 박탈 리스크고, 실제·유한한 작업을 재포맷하고 멈추는 파이프라인은 그냥 손으로 할 일을 대신하는 스케줄러입니다.

게시를 자동화하세요. '~인 척'을 자동화하지 마세요.

관련 글