n8n 자동화/n8n 워크플로우

잠들어있는 동안 AI가 YouTube를 보고 핵심만 정리해주는 마법 ✨

블루돌이 2025. 5. 23. 10:28
반응형

구독 채널이 70개가 넘어가면서 생긴 달콤한 고민이 있었다.
매일 쏟아지는 YouTube 영상들 중에서 정말 중요한 내용만 골라내고 싶은데, 하루 24시간으로는 턱없이 부족하거니와 어떤 영상이 중요한지 알 수 있는 방법이 필요했다. 특히 AI 관련 채널들(대부분 미국 채널들)은 거의 매일 새로운 소식을 업데이트하는데, 놓치고 싶지 않은 내용들이 너무 많았다.

그러던 어느 날 문득 생각했다. "AI가 이렇게 발달했는데, AI한테 YouTube 영상을 대신 보게 하고 요약해달라고 하면 어떨까?"

그렇게 시작된 것이 아래의 YouTube 자막 추출 후 AI 요약 자동화 프로젝트로 여러분과 주요 포인트를 공유하려고 한다.

🎯 완성된 시스템의 마법같은 동작 과정

아침에 일어나면 구글 시트에는 어제 업로드된 모든 YouTube 영상의 핵심 내용이 깔끔하게 정리되어 있다.
마치 개인 비서가 밤새 영상들을 보고 브리핑 자료를 만들어둔 것처럼.

전체 워크플로우:

  1. RSS.app에서 YouTube 채널들의 RSS 피드 생성
  2. n8n이 매일 정해진 시간에 새 영상 체크
  3. YouTube 자막 자동 추출
  4. AI Agent가 내용 요약 및 한국어 번역
  5. 구글 시트에 자동 저장

이 모든 과정이 거의 완전 무료로 진행된다!

🚀 여정의 시작: Docker로 나만의 자동화 환경 구축하기

Windows 11 환경에서 시작했다.
처음에는 로컬에 직접 설치할까 했지만, Docker를 사용하면 깔끔하게 관리할 수 있을 것 같아서 Docker 방식을 선택했다.

1단계: 기본 환경 준비

먼저 Docker Desktop을 설치하고, n8n과 Ollama를 Docker로 띄웠다.

# docker-compose.yml
version: '3'
services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=localhost
      - N8N_PORT=5678
    volumes:
      - n8n_data:/home/node/.n8n
  
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama

volumes:
  n8n_data:
  ollama_data:

2단계: YouTube Transcript 커스텀 노드 설치의 험난한 여정

여기서 첫 번째 큰 난관에 부딪혔다. n8n에는 기본적으로 YouTube 자막을 추출하는 노드가 없는 것이다.

다행히 커뮤니티에서 만든 YouTube Transcript 커스텀 노드를 발견했다. 하지만 Docker 환경에서 커스텀 노드를 설치하는 건 생각보다 까다로웠다.

해결 방법:

FROM n8nio/n8n:latest

USER root

# Install Chromium and dependencies
RUN apk update && \
    apk add --no-cache \
      udev \
      chromium \
      harfbuzz \
      freetype \
      ttf-freefont \
      nss

# Set Puppeteer environment variables
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
    PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

# Set PNPM_HOME and update PATH
ENV PNPM_HOME=/root/.pnpm
ENV PATH=$PNPM_HOME:$PATH

# Install Puppeteer and the YouTube transcript node using pnpm
RUN pnpm add -g puppeteer @anpigon/n8n-nodes-youtube-transcript

USER node
  1. 설치 관련 깃헙 내용을 Cursor AI에게 보여주고 Cursor AI의 도움으로, 위와 같이 Dockerfile.n8n을 설정했다.
# docker-compose.yml
services:
  n8n:
    build:
    dockerfile: Dockerfile.n8n
    image: n8n-custom:puppeteer
    container_name: n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=localhost
      - N8N_PORT=5678
    volumes:
      - n8n_data:/home/node/.n8n
  
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama

volumes:
  n8n_data:
  ollama_data:
  1. 그 다음 docker-compose.yml도 위와 같이 수정하고(실제 내 n8n은 외부 접속이 가능하도록 도메인 주소를 구입해서 설정해 놓았기 때문에 위 내용보다 훨씬 복잡하다. 여기서는 웹훅과 같은 외부 접속이 필요하지 않기 때문에 제외했다. 참고로 docker-compose 구성은 AI에게 물어보면 자신의 환경에 맞게 잘 설정해 준다)
  2. 도커 컨테이너 전부 재시작(n8n, ollama 등)

이 과정에서 여러 번 시행착오를 겪었지만, 결국 성공했을 때의 그 짜릿함이란!

🔧 워크플로우 구성: 퍼즐 맞추기

이제 본격적인 워크플로우 구성에 들어갔다. 각 노드들이 어떻게 연결되는지 하나씩 알아보자.

RSS Feed Trigger: 새로운 콘텐츠 감지하기

RSS.app에서 관심 있는 YouTube 채널들의 RSS 피드를 생성했다.
예를 들어 AI 관련 채널들을 하나의 피드로 묶어서 https://rss.app/feeds/PU8j45AGlUgI9d4J.xml 같은 URL을 받았다.

n8n의 RSS Feed Trigger 노드를 설정해서 매일 저녁 6시에 새로운 영상이 있는지 체크하도록 했다.

링크에서 YouTube 비디오 ID 추출하기

RSS에서 받은 링크는 https://www.youtube.com/watch?v=VIDEO_ID 형태인데, YouTube Transcript 노드는 비디오 ID만 필요해서 추출 작업이 필요했다.

Code 노드를 사용해서 정규표현식으로 비디오 ID를 뽑아냈다:

const glink = item.json.g_link;
const videoIdMatch = glink.match(/(?:v=|\/)([a-zA-Z0-9_-]{11})/);
const videoId = videoIdMatch ? videoIdMatch[1] : null;

YouTube 자막 추출: 마법의 순간

YouTube Transcript 노드가 비디오 ID를 받아서 자막을 추출한다. 처음에 이게 동작할 때 정말 신기했다. 몇 초 만에 영상 전체의 자막이 JSON 형태로 쭉 나타난다.

자막 데이터는 배열 형태로 오는데, 각각 시간 정보와 텍스트가 들어있다. 이걸 하나의 문자열로 합치는 작업이 필요했다.

const transcript = $json.transcript;
const mergedText = transcript.map(item => item.text).join(' ');

🧠 AI Agent: 진짜 마법이 일어나는 곳

이제 핵심인 AI 요약 단계이다.

처음에는 로컬에서 돌리는 Ollama를 사용하려고 했다. 내 PC 사양이 나쁘지 않기 때문에 시도해 보았다- Intel i7-12700 CPU, 64GB RAM, 그리고 RTX 5070Ti 16GB까지 있으니까.

하지만 Qwen3:8b 모델로 실제 테스트해보니 예상치 못한 문제들이 있었다:

  1. 처리 시간이 너무 오래 걸림: 한 영상 처리에 20~30분씩 소요
  2. 가끔 오류 발생: 긴 텍스트 처리 시 중간에 멈추거나 에러가 발생
  3. 안정성 문제: 자동화 시스템에서는 안정성이 생명인데 신뢰도가 아쉬웠음

그래서 조금의 비용이 들더라도 OpenAI Chat Model을 사용하기로 결정했다. GPT-4.1-mini 모델이 속도와 가성비 면에서 훨씬 나았다(몇 초만에 원하는 내용을 정확하게 뽑아준다).

AI Agent 노드에 다음과 같은 시스템 프롬프트를 설정했다:

당신은 AI전문가이면서 전문 번역가입니다.
위 글에서 핵심내용을 요약하고, 한국어로 번역합니다.
그 중에서 AI 관련 블로그 글쓰기에 관한 아이디어를 도출하는 것이 중요합니다. 
3~5 문장으로 요약하세요.

📊 구글 시트에 자동 저장: 완성의 순간

마지막 단계는 Google Sheets 노드를 통해 요약된 내용을 자동으로 저장하는 것이다.

구글 시트 API 연동을 위해 OAuth2 인증을 설정했고, 'AI관련 아이디어'라는 스프레드시트에 결과가 누적되도록 구성했다.

appendOrUpdate 모드를 사용해서 새로운 내용이 계속 추가되도록 했다.

🎉 결과: 기대 이상의 만족감

이 시스템을 완성하고 돌려본 결과, 정말 놀라웠다.

실제 사용 후기:

  • 매일 아침 10-15개의 요약된 콘텐츠가 대기
  • 각 요약은 3-5문장으로 핵심만 담고 있어서 1분이면 파악 가능
  • 한국어 번역 품질도 매우 만족스러움
  • 놓쳤을 뻔한 중요한 AI 뉴스들을 놓치지 않게 됨

💡 시행착오에서 얻은 소중한 깨달음

이 프로젝트를 진행하면서 얻은 교훈들을 공유하고 싶다.

기술적 팁들:

  1. 커스텀 노드 설치: Docker 환경에서는 컨테이너 재시작이 필수
  2. API 비용: GPT-4.1-mini는 생각보다 저렴함 (월 2-3달러 수준)
  3. 에러 처리: YouTube 영상 중 자막이 없는 경우를 대비한 예외 처리 필요
  4. 실행 시간: RSS 체크 시간을 새벽보다는 저녁으로 설정하는 것이 좋음

예상치 못한 부작용:

  • 정말로 YouTube 시청 시간이 90% 줄어들었들지 않을까?(국내 YouTube는 그냥 틀어놓는다. 별로 줄지 않을듯... 하지만, 잘 알아듣지 못해서 고생했던 외국 YouTube 컨텐츠는 잘 활용할 수 있을 것 같다)
  • 알고 싶은 핵심 내용만 알게 되니까 더 깊이 있는 학습이 가능해졌다
  • 블로그 아이디어가 더 풍성해지길 바란다.

🚀 다음 단계: 더 큰 꿈을 향해

현재는 AI 관련 채널만 대상으로 하고 있지만, 앞으로는 다음과 같이 확장할 계획도 있다:

  • 다양한 주제별 RSS 피드 추가: 개발, 디자인, 마케팅 등
  • Slack 알림 추가: 중요한 내용은 실시간으로 알림받기
  • 감정 분석: 영상의 톤앤매너까지 분석해서 우선순위 매기기
  • 키워드 기반 필터링: 특정 키워드가 포함된 내용만 별도 저장

🎯 누구든지 당장 시작할 수 있다

이 모든 과정이 완전 무료로 가능하다는 것이 가장 큰 매력이다.
Docker, n8n, Ollama는 모두 오픈소스이고, OpenAI API 비용도 개인 사용 수준에서는 월 몇 달러면 충분하다.

혹시 구독하는 YouTube 채널이 많아서 고민이셨다면, 이제 AI에게 맡겨보시는 건 어떨까?

우리 모두 각자의 시간을 더 소중한 일에 사용하고, AI가 대신 YouTube를 보게 하자. 분명 새로운 세상이 열릴 거라 믿는다.

"정보의 홍수 속에서 진주를 찾는 것은 이제 AI의 몫이다."

반응형