2025년 12월 2일 화요일

[2025년 완전 자동화] ganatoday.kr 블로그스팟 글 올리면 → X 쓰레드 + 팟캐스트 자동 생성 & 업로드

[2025년 완전 자동화] ganatoday.kr 블로그스팟 글 올리면 → X 쓰레드 + 팟캐스트 자동 생성 & 업로드(n8n으로 30분 만에 구축, 하루 콘텐츠 생산 5배 UP)n8n이 뭔가요? 왜 써야 하나요?n8n(엔에이트엔)은 노코드 오픈소스 자동화 툴로, Zapier나 Make처럼 앱들을 자유롭게 연결합니다.
→ Blogger RSS처럼 블로그 새 글을 감지해 AI로 X 쓰레드(스레드)와 팟캐스트를 자동 생성
→ 셀프호스팅으로 실행 무제한 + 무료 (또는 Railway 월 7천 원)
→ OpenAI, ElevenLabs 등 AI 통합으로 콘텐츠 품질 ↑, 당신은 글만 쓰면 끝!
이 워크플로로 ganatoday.kr에 새 포스트 올리면:
  1. RSS가 감지 → OpenAI가 요약/쓰레드 스크립트 생성
  2. X에 5~10개 트윗 쓰레드 자동 포스팅 (링크 포함)
  3. ElevenLabs로 팟캐스트 오디오 생성 → Spotify/Apple Podcasts RSS 업데이트
    → 매일 1개 글 = 1개 쓰레드 + 1개 에피소드 자동 생산, SEO/팔로워 폭발!
실제로 구현하는 정확한 절차 (2025년 12월 기준, 30분 안에 끝)준비물 (미리 만들어 두세요, 5분)
  1. n8n 서버: 이전 대화처럼 로컬 Docker나 Railway 셀프호스팅 (이미 있으면 스킵)
  2. OpenAI API 키: https://platform.openai.com/api-keys → 생성 (무료 $5 크레딧)
  3. ElevenLabs 계정: https://elevenlabs.io → 무료 가입, API 키 + Voice ID (목소리 선택, e.g., "Adam" ID: 21m00Tcm4TlvDq8ikWAM)
  4. X (Twitter) Developer: https://developer.twitter.com → 앱 생성, API Key/Secret, Access Token/Secret (v2 OAuth 필요)
  5. 팟캐스트 호스팅: Buzzsprout나 Podbean 무료 계정 (RSS 피드 발급, 또는 Google Drive 업로드)
  6. Blogger RSS URL: ganatoday.kr/rss.xml (새 글 감지용)
1단계: n8n 워크플로 JSON 임포트 (3분)
  1. n8n 대시보드 → Workflows → Import from JSON → 아래 코드 전체 복사/붙여넣기 → Import
    • (n8n.io/workflows/5084 기반 커스텀: RSS → OpenAI → X Thread → ElevenLabs Podcast)
json
{
  "name": "★ ganatoday.kr 새 글 → X 쓰레드 + 팟캐스트 자동 생성 (2025 최신)",
  "nodes": [
    {
      "parameters": {
        "url": "https://ganatoday.kr/rss.xml",
        "options": {
          "pollTimes": {
            "item": [
              {
                "mode": "everyMinute"
              }
            ]
          }
        }
      },
      "name": "RSS Trigger (Blogger 새 글 감지)",
      "type": "n8n-nodes-base.rssFeedTrigger",
      "typeVersion": 1,
      "position": [240, 300],
      "notes": "ganatoday.kr RSS로 새 포스트 자동 트리거"
    },
    {
      "parameters": {
        "method": "GET",
        "url": "={{ $json['link'] }}",
        "options": {}
      },
      "name": "블로그 글 전체 내용 가져오기",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [460, 300]
    },
    {
      "parameters": {
        "model": "gpt-4o-2024-11-20",
        "prompt": "다음 블로그 글을 X(트위터) 쓰레드(5~8개 트윗)로 변환해. 첫 트윗: 후크 제목 + 요약. 나머지: 핵심 포인트 + ganatoday.kr 링크. 한국어로, 해시태그 3개 추가. 형식: [Tweet 1]\n내용\n\n[Tweet 2]\n내용\n... \n\n[끝 트윗]\n링크 + CTA\n\n그리고 팟캐스트 스크립트: 5분 분량 자연스러운 대화체 요약 (인트로/본문/아웃트로 포함).\n\n글 내용: {{ $('블로그 글 전체 내용 가져오기').first().json.body }}",
        "options": {
          "temperature": 0.7,
          "maxTokens": 2000
        }
      },
      "name": "OpenAI: 쓰레드 + 팟캐스트 스크립트 생성",
      "type": "n8n-nodes-base.openAi",
      "typeVersion": 1.1,
      "position": [680, 300],
      "credentials": {
        "openAiApi": {
          "id": "1",
          "name": "OpenAI"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// 쓰레드 트윗 분리\nconst thread = $('OpenAI: 쓰레드 + 팟캐스트 스크립트 생성').first().json.choices[0].message.content;\nconst tweets = thread.split('\\n\\n').filter(t => t.startsWith('[Tweet'));\nreturn [{ json: { tweets: tweets.map(t => t.replace(/\\[Tweet \\d+\\]/, '').trim()) } }];"
      },
      "name": "쓰레드 트윗 배열로 분리",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [900, 200]
    },
    {
      "parameters": {
        "resource": "tweet",
        "operation": "create",
        "text": "={{ $json.tweets[0] }}",  // 첫 트윗
        "additionalFields": {
          "inReplyToTweetId": "={{ $vars.lastThreadId || null }}"
        }
      },
      "name": "X 첫 트윗 포스팅",
      "type": "n8n-nodes-base.twitter",
      "typeVersion": 1,
      "position": [1120, 200],
      "credentials": {
        "twitterOAuth1Api": {
          "id": "2",
          "name": "X (Twitter)"
        }
      }
    },
    {
      "parameters": {
        "resource": "tweet",
        "operation": "create",
        "text": "={{ $json.tweets[$runIndex + 1] }}",  // 후속 트윗 (Loop 필요)
        "additionalFields": {
          "inReplyToTweetId": "={{ $node['X 첫 트윗 포스팅'].json.id }}"
        }
      },
      "name": "X 후속 트윗 (쓰레드 연결)",
      "type": "n8n-nodes-base.twitter",
      "typeVersion": 1,
      "position": [1120, 300],
      "credentials": {
        "twitterOAuth1Api": {
          "id": "2",
          "name": "X (Twitter)"
        }
      }
    },
    {
      "parameters": {
        "url": "https://api.elevenlabs.io/v1/text-to-speech/{{ $credentials.elevenlabsApi.voiceId }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "elevenLabsApi",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ $('OpenAI: 쓰레드 + 팟캐스트 스크립트 생성').first().json.choices[0].message.content.split('[끝 트윗]')[1].trim() || '팟캐스트 스크립트' }}"  // 팟캐스트 부분 추출
            },
            {
              "name": "model_id",
              "value": "eleven_monolingual_v1"
            },
            {
              "name": "voice_settings",
              "value": "{\"stability\":0.5,\"similarity_boost\":0.5}"
            }
          ]
        },
        "options": {
          "responseFormat": "file",
          "output": "file"
        }
      },
      "name": "ElevenLabs: 팟캐스트 오디오 생성",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [900, 500],
      "credentials": {
        "elevenLabsApi": {
          "id": "3",
          "name": "ElevenLabs"
        }
      }
    },
    {
      "parameters": {
        "operation": "upload",
        "fileName": "={{ $json.title }}.mp3",
        "binaryData": true,
        "binaryPropertyName": "data"  // 오디오 파일
      },
      "name": "팟캐스트 파일 업로드 (Buzzsprout 등)",
      "type": "n8n-nodes-base.buzzsprout",
      "typeVersion": 1,
      "position": [1120, 500],
      "credentials": {
        "buzzsproutApi": {
          "id": "4",
          "name": "Buzzsprout (또는 Podbean)"
        }
      }
    },
    {
      "parameters": {
        "channelId": "#자동화-완료",
        "text": "🎉 새 글 자동화 완료!\nX 쓰레드: {{ $('X 후속 트윗').last().json.id }}\n팟캐스트: {{ $('팟캐스트 파일 업로드').json.url }}"
      },
      "name": "슬랙 알림 (선택)",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.2,
      "position": [1340, 400],
      "credentials": {
        "slackApi": {
          "id": "5",
          "name": "Slack"
        }
      }
    }
  ],
  "connections": {
    "RSS Trigger (Blogger 새 글 감지)": {
      "main": [
        [
          {
            "node": "블로그 글 전체 내용 가져오기",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "블로그 글 전체 내용 가져오기": {
      "main": [
        [
          {
            "node": "OpenAI: 쓰레드 + 팟캐스트 스크립트 생성",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI: 쓰레드 + 팟캐스트 스크립트 생성": {
      "main": [
        [
          {
            "node": "쓰레드 트윗 배열로 분리",
            "type": "main",
            "index": 0
          },
          {
            "node": "ElevenLabs: 팟캐스트 오디오 생성",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "쓰레드 트윗 배열로 분리": {
      "main": [
        [
          {
            "node": "X 첫 트윗 포스팅",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "X 첫 트윗 포스팅": {
      "main": [
        [
          {
            "node": "X 후속 트윗 (쓰레드 연결)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ElevenLabs: 팟캐스트 오디오 생성": {
      "main": [
        [
          {
            "node": "팟캐스트 파일 업로드 (Buzzsprout 등)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "X 후속 트윗 (쓰레드 연결)": {
      "main": [
        [
          {
            "node": "슬랙 알림 (선택)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "팟캐스트 파일 업로드 (Buzzsprout 등)": {
      "main": [
        [
          {
            "node": "슬랙 알림 (선택)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "tags": ["Blogger", "X Thread", "Podcast", "AI"]
}
  1. 임포트 후 노드 연결 확인 (자동으로 연결됨, 안 되면 드래그로 연결)
2단계: Credentials 4개 연결 (10분)n8n → Credentials → New로 각 API 추가:
  1. OpenAI
    • Type: OpenAI API
    • API Key: 당신 키 입력 → Save → 이름: OpenAI
  2. X (Twitter)
    • Type: Twitter OAuth1 API
    • API Key, API Secret, Access Token, Access Secret 입력 (Developer 앱에서 복사)
      → Connect 계정 → 이름: X (Twitter)
  3. ElevenLabs
    • Type: ElevenLabs API
    • API Key: elevenlabs.io에서 복사
    • Voice ID: "21m00Tcm4TlvDq8ikWAM" (Adam 목소리, 변경 가능) → 이름: ElevenLabs
  4. Buzzsprout (팟캐스트)
    • Type: Buzzsprout API (또는 HTTP Request로 Podbean)
    • API Key: buzzsprout.com/settings/api → 입력 → 이름: Buzzsprout
      (RSS 업데이트: 워크플로 끝에 HTTP 노드 추가로 RSS.xml 수정)
3단계: 세팅 & 테스트 (5분)
  1. RSS Trigger 노드 클릭 → URL: https://ganatoday.kr/rss.xml 확인 (폴링: 5분 간격 추천)
  2. OpenAI 노드 → Prompt에서 "ganatoday.kr" 언급으로 브랜딩 맞춤
  3. X 후속 트윗 노드 → Loop 노드 추가 (쓰레드 5개 이상: Code 노드에서 배열 루프)
  4. 테스트: Manual 실행 → 가짜 RSS 아이템으로 시뮬레이션 (새 포스트 작성 후 5분 대기)
    • X: 새 쓰레드 확인 (@당신계정)
    • 팟캐스트: MP3 다운로드 → Buzzsprout 대시보드 업로드 확인
  5. 활성화: 오른쪽 스위치 ON → 초록색 되면 끝! (자동 24/7 동작)
4단계: 고급 팁 & 트러블슈팅 (옵션, 5분)
  • 쓰레드 길이 조정: OpenAI Prompt에 "7개 트윗" 지정
  • 팟캐스트 배포: Buzzsprout RSS를 Spotify/Apple에 제출 (한 번만)
  • 오류 시: 로그 확인 → RSS 폴링 지연? (n8n 설정 → Poll Time 1분으로)
  • 비용: OpenAI $0.01/글, ElevenLabs 무료 10분/월 → 월 30글 = 500원
  • 이전 대화 연계: 당신의 카카오 구독 시스템과 연동? 새 포스트 알림에 이 워크플로 트리거 추가 가능
이제 ganatoday.kr에 글 하나 올리기만 하면 X 팔로워 + 팟캐스트 청취자 자동 증가!
테스트 후 "X 쓰레드 안 올라가"처럼 문제 말하면 바로 디버깅 도와줄게요. 🚀