발행일: 2026-10-06(화) 11:44
← 목차로 돌아가기|하루 30분 n8n 시리즈 ② 실무 자동화 레시피 100
RECIPE 078

AI 이미지 생성 → SNS 자동 업로드

  • ▸키워드나 콘텐츠 주제로 AI 이미지 자동 생성
  • ▸생성된 이미지를 Google Drive에 저장
  • ▸Instagram/Twitter에 이미지 + 캡션 자동 게시

✅사전 준비

  • □OpenAI DALL-E 3 API 키 또는 Stability AI API 키
  • □Google Drive 폴더 생성 및 OAuth2 설정
  • □Instagram Business API 또는 Buffer API 설정
  • □이미지 스타일 가이드 및 브랜드 색상 정의

DALL-E 3 이미지 생성

Node: HTTP Request
Method: POST
URL: https://api.openai.com/v1/images/generations
Headers:
  Authorization: Bearer YOUR_OPENAI_API_KEY

Body:
{
  "model": "dall-e-3",
  "prompt": "{{ $json.image_prompt }}, professional photo, brand colors: blue and white, clean background",
  "n": 1,
  "size": "1024x1024",
  "quality": "standard",
  "response_format": "url"
}

이미지 URL → Google Drive 저장

// HTTP Request로 이미지 다운로드
Node: HTTP Request
Method: GET
URL: {{ $json.data[0].url }}
Response Format: File

// Google Drive에 업로드
Node: Google Drive (Upload File)
Folder ID: YOUR_FOLDER_ID
File Name: ai_image_{{ $now.toFormat('yyyyMMdd_HHmmss') }}.png
Mime Type: image/png

SNS 캡션 자동 생성

System: SNS 마케터입니다.
User: 다음 이미지 주제로 Instagram 캡션을 작성하세요.
주제: {{ $json.topic }}
톤: 친근하고 전문적
길이: 150자 이내
해시태그: 5개 포함
이모지: 2~3개 사용
⚠️ 주의DALL-E 3로 생성된 이미지는 OpenAI 이용약관에 따라 상업적 사용이 가능하지만, 실제 인물, 유명 브랜드 로고, 저작권 있는 캐릭터가 포함된 프롬프트는 피해야 합니다.
⚡

워크플로우 JSON

아래 JSON을 복사해 n8n에 바로 임포트하세요

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "recipeId": "recipe078",
  "title": "이메일 뉴스레터 성과 주간 집계",
  "chapter": 7,
  "category": "콘텐츠 & 미디어 자동화",
  "difficulty": "⭐⭐",
  "estimatedTime": "30분",
  "usedApps": [
    "Mailchimp API",
    "Google Sheets",
    "Slack"
  ],
  "description": "매주 금요일 오후 6시 Mailchimp API에서 이번 주 캠페인 성과(오픈율·클릭률·구독 취소율)를 자동 수집해 Google Sheets에 누적 기록하고, 전주 대비 증감률을 계산해 Slack에 주간 뉴스레터 성과 리포트를 발송합니다.",
  "nodes": [
    {
      "id": "node1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "name": "매주 금요일 오후 6시 실행",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 18 * * 5"
            }
          ]
        }
      }
    },
    {
      "id": "node2",
      "type": "n8n-nodes-base.httpRequest",
      "name": "이번 주 캠페인 성과 조회",
      "parameters": {
        "method": "GET",
        "url": "https://{{$env.MAILCHIMP_DC}}.api.mailchimp.com/3.0/campaigns",
        "authentication": "basicAuth",
        "basicAuth": {
          "user": "anystring",
          "password": "={{$env.MAILCHIMP_API_KEY}}"
        },
        "queryParameters": {
          "since_send_time": "={{$now.minus({days: 7}).toISO()}}",
          "status": "sent",
          "count": "10"
        }
      }
    },
    {
      "id": "node3",
      "type": "n8n-nodes-base.googleSheets",
      "name": "성과 시트 누적 기록",
      "parameters": {
        "operation": "appendOrUpdate",
        "spreadsheetId": "={{$env.NEWSLETTER_SHEET_ID}}",
        "sheetName": "주간성과",
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "기록일": "={{$now.format('YYYY-MM-DD')}}",
            "캠페인명": "={{$json['campaigns'][0]['settings']['subject_line']}}",
            "발송수": "={{$json['campaigns'][0]['recipients']['recipient_count']}}",
            "오픈율": "={{($json['campaigns'][0]['report_summary']['open_rate'] * 100).toFixed(1)}}%",
            "클릭률": "={{($json['campaigns'][0]['report_summary']['click_rate'] * 100).toFixed(1)}}%",
            "수신거부율": "={{($json['campaigns'][0]['report_summary']['unsubscribe_rate'] * 100).toFixed(2)}}%"
          }
        }
      }
    },
    {
      "id": "node4",
      "type": "n8n-nodes-base.slack",
      "name": "주간 성과 리포트 발송",
      "parameters": {
        "channel": "={{$env.CONTENT_SLACK_CHANNEL}}",
        "text": "📧 주간 뉴스레터 성과 리포트\n\n캠페인: {{$node['이번 주 캠페인 성과 조회'].json['campaigns'][0]['settings']['subject_line']}}\n오픈율: {{($node['이번 주 캠페인 성과 조회'].json['campaigns'][0]['report_summary']['open_rate'] * 100).toFixed(1)}}%\n클릭률: {{($node['이번 주 캠페인 성과 조회'].json['campaigns'][0]['report_summary']['click_rate'] * 100).toFixed(1)}}%\n\n📊 전체 기록: {{$env.NEWSLETTER_SHEET_URL}}"
      }
    }
  ],
  "envVariables": {
    "MAILCHIMP_DC": "Mailchimp 데이터센터 코드",
    "MAILCHIMP_API_KEY": "Mailchimp API 키",
    "NEWSLETTER_SHEET_ID": "Google Sheets 뉴스레터 성과 시트 ID",
    "NEWSLETTER_SHEET_URL": "Google Sheets 공유 URL",
    "CONTENT_SLACK_CHANNEL": "콘텐츠 팀 Slack 채널 ID"
  },
  "tips": [
    "스티비(Stibee) API도 동일한 방식으로 연결할 수 있어요. 부록 B를 참고해서 스티비 API 키를 발급받으세요.",
    "전주 대비 증감률을 Slack 메시지에 포함하려면 Google Sheets에서 이전 행 데이터를 읽어와 Code 노드에서 비교 계산을 추가하세요.",
    "레시피 015(이메일 오픈율 추적)와 데이터 구조가 동일해요. 두 레시피를 결합하면 발송 즉시 기록하는 실시간 트래킹도 가능해요."
  ],
  "qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe078"
}
← 이전 레시피☰ 목차다음 레시피 →