W5 강의노트 스케줄 + 멀티채널 + RAG 기초 0%
Week 05 · Phase 3 · 고급 자동화

스케줄 확장 + 멀티채널 + RAG 1 기초

24/7 무인 운영 시스템 + 에이전트의 장기 기억 만들기

3시간수업
시간
4루틴장중·장마감
해외장
RAG 1Vector DB
첫 도입
▶ PHASE 3 SIMULATION — W5 & W6
3D 에이전트를 24/7 자율 시스템으로 확장
Phase 2에서 3D 분석 에이전트를 만들었다면, Phase 3는 그 에이전트를 무인 운영 시스템으로 바꾸고 장기 기억(RAG)을 심어주는 단계입니다.
Learning Objectives

이번 주 학습 목표

레벨
중급+
선수지식
W1~W4
실습
130분
과제
확장 1개
1
한국장·미국장·암호화폐 24시간 3가지 시장 특성에 맞는 멀티 스케줄 루틴을 설계할 수 있다
2
Webhook 노드로 외부 이벤트(TradingView 알림 등)를 수신하고 Error Trigger로 장애 복구 자동화할 수 있다
3
Discord·텔레그램·Gmail 3개 채널에 상황별로 분기 발송하는 멀티채널 시스템을 완성할 수 있다
4
Supabase 또는 Qdrant 벡터 DB를 무료 티어로 구축하고 임베딩 생성·저장의 기초 흐름을 이해할 수 있다
이번 주의 한 문장: "에이전트가 잠들지 않는다." W5는 W4까지 만든 3D 에이전트를 진짜 24/7 시스템으로 운영 상태로 만들고, 에이전트의 "장기 기억"인 Vector DB의 첫 씨앗을 심습니다.
Session 1 · 40min

1교시 — 시장 특성별 멀티 스케줄 루틴

투자 자산군마다 작동 시간이 다릅니다. 한국장은 9시~15:30, 미국장은 한국시간 밤 10:30~새벽 5시, 암호화폐는 24시간. 각 시장에 다른 Schedule Trigger를 따로 두는 것이 올바른 설계입니다.

4대 루틴 설계

08:30
KST
🇰🇷 한국장 개장 브리핑
W4 3D 에이전트 + 관심 한국 종목. 개장 30분 전 Discord로 오늘의 판단 발송.
Cron: 30 8 * * 1-5
15:45
KST
🇰🇷 한국장 마감 리포트
당일 수익률·지표 변동 Gmail HTML 발송. 장 마감 후 15분 여유를 두고 정리.
Cron: 45 15 * * 1-5
22:00
KST
🇺🇸 미국장 개장 브리핑
미국 관심 종목(AAPL, SPY 등) 3D 에이전트 실행. 개장 30분 전 알림.
Cron: 0 22 * * 1-5
4h
주기
🪙 암호화폐 모니터링
BTC·ETH는 24시간 시장. 4시간마다 급등락(±5%) 체크 → 조건 만족 시에만 알림.
Cron: 0 */4 * * *
⚠️ 타임존 재확인: n8n Cloud의 워크플로 타임존이 Asia/Seoul로 설정됐는지 확인. Workflow Settings → Timezone. Docker 셀프호스팅은 GENERIC_TIMEZONE=Asia/Seoul 환경변수 필수. 타임존이 틀리면 장 열리기 전에 알림이 와서 의미가 없어집니다.

워크플로 재사용 — Execute Workflow 노드

4개 루틴이 모두 동일한 3D 에이전트 로직을 호출합니다. 각 루틴에 전체 로직을 복사하면 유지보수 악몽. Execute Workflow 노드로 W4의 3D 에이전트를 모듈처럼 재사용합니다.

🔗 Execute Workflow — W4 에이전트 호출 CALL
W4의 3D 에이전트 워크플로를 함수처럼 호출. 티커 리스트를 파라미터로 전달.
Source: Database
Workflow: W4_3D_Agent (기존 워크플로)
Input Data: {{ tickers: ["005930.KS", "000660.KS"] }}
Session 2 · 35min

2교시 — Webhook 외부 수신 + 장애 자동 복구

Webhook 노드 — 외부 이벤트 수신

Schedule는 "시간" 기반이지만, Webhook은 "이벤트" 기반입니다. TradingView 알림, 거래소 이상 감지, 외부 서비스에서 n8n을 호출할 때 사용합니다.

🔌 Webhook Trigger — 외부 호출 받기 TRIGGER
워크플로를 열면 고유 URL 자동 생성. 외부 서비스가 이 URL로 POST하면 워크플로 실행.
HTTP Method: POST
Path: tradingview-alert (자유 경로)
Authentication: Header Auth (보안 강화)
Response Mode: Immediately (바로 200 OK)

활용 예 — TradingView 알림 연동

TradingView에서 "AAPL이 200달러 돌파하면 알려줘"를 설정하면 TradingView가 n8n Webhook URL로 POST를 보냅니다. 그 다음은 여러분의 워크플로가 알아서 처리 — 3D 에이전트 호출 + Discord 알림 + Sheets 기록.

💡 실전 팁 — Header Auth 필수: Webhook URL이 공개되면 악성 호출이 올 수 있습니다. 반드시 Header Authentication을 설정해 특정 헤더(예: x-secret-key: MYKEY)가 있는 요청만 수락하도록 하세요.

Error Trigger — 장애 자동 감지

자동화 시스템의 최대 적은 조용한 실패입니다. API 호출이 실패했는데 알지 못하면 며칠간 "의사결정 없는 상태"로 방치됩니다. Error Trigger가 이를 해결합니다.

🚨 Error Trigger — 워크플로 장애 감지 TRIGGER
별도 워크플로로 만듭니다. 다른 워크플로에서 오류 발생 시 자동 실행.
Trigger 대상: 워크플로 Settings → Error Workflow에 지정
받는 데이터: 실행 ID, 실패 노드, 에러 메시지 전체

Error 복구 워크플로 예시

🔧 장애 대응 워크플로 (별도 생성)
Error Trigger워크플로 오류 발생 시 자동 실행
Code (분류)에러 메시지로 유형 판단 (API timeout / 인증 오류 / rate limit)
Switch복구 가능(재시도) / 수동 개입 필요 분기
Discord 관리자전용 알림 채널로 에러 상세 + 워크플로 링크
Session 3 · 30min

3교시 — 멀티채널 알림 전략

모든 알림을 Discord 하나로만 보내면 중요한 신호가 묻힙니다. 채널별 특성에 맞게 용도를 분리합니다.

💬
Discord
모든 일상 알림 + 차트 이미지 첨부
(메인 채널)
✈️
Telegram
모바일 즉시 푸시
긴급 알림(BUY/AVOID 강신호) 전용
📧
Gmail
일일/주간 HTML 리포트
장기 이력 보관용
💡 채널별 분기 설계 원칙:
Discord: 모든 verdict (BUY / WATCH / HOLD / AVOID) — 히스토리 쌓기 목적
Telegram: confidence 4~5 + BUY/AVOID만 — 알림 피로 방지
Gmail: 매일 장마감 후 1회 전체 리포트 — 주말에 돌아보기용

Telegram Bot 설정

Telegram Bot 5분 세팅
  1. Telegram 앱에서 @BotFather 검색 → 대화 시작 → /newbot 명령
  2. Bot 이름 입력 → 토큰(HTTP API) 발급 — 안전하게 복사
  3. 본인 Bot과 대화 시작 (아무 메시지 1회 전송)
  4. 브라우저에서 https://api.telegram.org/bot{TOKEN}/getUpdates 접속 → chat.id 복사
  5. n8n Credentials → Telegram API → Access Token 입력

Gmail HTML 일일 리포트 템플릿

텍스트보다 구조화된 HTML이 가독성 압도적입니다. Code 노드에서 HTML 문자열을 생성한 뒤 Gmail 노드의 HTML Body로 전달.

// 일일 리포트 HTML 생성 (Code 노드)
const verdicts = $input.all();
const buyCount = verdicts.filter(v => v.json.verdict === 'BUY').length;
const sellCount = verdicts.filter(v => v.json.verdict === 'AVOID').length;

let rows = '';
for (let i = 0; i < verdicts.length; i++) {
  const v = verdicts[i].json;
  const color = v.verdict === 'BUY' ? '#15803d'
    : v.verdict === 'AVOID' ? '#dc2626' : '#666';
  rows += `<tr>
    <td>${v.ticker}</td>
    <td style="color:${color};font-weight:700">${v.verdict}</td>
    <td>${v.confidence}/5</td>
    <td>${v.summary}</td>
  </tr>`;
}

const html = `
<div style="font-family:sans-serif;max-width:600px">
  <h2>📊 오늘의 3D 투자 브리핑</h2>
  <p>BUY ${buyCount}건 · AVOID ${sellCount}건</p>
  <table style="width:100%;border-collapse:collapse" border="1">
    <tr style="background:#f3f3f3">
      <th>종목</th><th>판단</th><th>신뢰도</th><th>요약</th>
    </tr>
    ${rows}
  </table>
  <p style="color:#999;font-size:11px">교육 목적 분석. 투자 판단은 본인 책임.</p>
</div>`;

return { html: html, buy_count: buyCount, sell_count: sellCount };
Session 4 · 75min

4교시 — RAG(Retrieval-Augmented Generation) 기초

지금까지 에이전트는 현재 데이터만 봅니다. 하지만 "지난 FOMC에서 연준이 뭐라고 했는지", "이 증권사 리포트에 BBB등급 기업 매수 조건이 뭐였는지"를 기억하지 못합니다. 이를 해결하는 것이 RAG입니다.

🤖 왜 RAG가 "장기 기억"인가
Claude의 컨텍스트 윈도우(200K 토큰)는 대화 1회에만 유효한 단기 기억입니다. 하지만 Vector DB에 미리 저장해두면 에이전트가 필요할 때마다 검색해 꺼내 쓸 수 있습니다. 이것이 에이전트의 장기 기억입니다. RAG를 붙인 에이전트는 "연준은 왜 이번에 금리를 안 내렸나?"라는 질문에 과거 의사록을 인용하며 답합니다.

RAG의 기본 흐름

🧠 RAG 파이프라인 — 저장과 검색 두 단계
PDF·문서
청킹 (Split)
Embedding
Vector DB 저장
⬇ 질의 시
사용자 질문
Query Embedding
유사 Top 5 검색
Claude + 컨텍스트

Vector DB 선택 — Supabase vs Qdrant

두 옵션 모두 무료 티어로 본 과정 전체를 커버 가능합니다. 본인 선호대로 선택하세요.

🟢 Supabase + pgvector
  • 무료 500MB DB (결제 정보 불필요)
  • PostgreSQL 기반 → SQL 익숙한 사람에 유리
  • 대시보드에서 데이터 직접 보기 쉬움
  • pgvector 확장 활성화 필요 (SQL 1줄)
  • n8n 공식 Supabase Vector Store 노드
  • 추천 대상: DB 공부하고 싶은 분
🔴 Qdrant Cloud
  • 무료 4GB 디스크·1GB RAM (결제 정보 불필요)
  • 벡터 전용 DB — 검색 속도 최적화
  • 768차원 벡터 약 100만 개 저장 가능
  • 설정 간단 — 클러스터 생성 1분
  • n8n 공식 Qdrant Vector Store 노드
  • 추천 대상: 빠르게 시작하고 싶은 분

옵션 A: Supabase 세팅

Supabase 프로젝트 생성 + pgvector 활성화 (5분)
  1. https://supabase.com 접속 → GitHub 계정으로 가입
  2. New Project → 이름 invest-rag, DB 비밀번호 설정, Region: Northeast Asia (Seoul)
  3. 프로젝트 준비 후 좌측 SQL Editor → 아래 SQL 실행
  4. Settings → API → Project URLservice_role key 복사
  5. n8n Credentials → Supabase → URL + Service Role Key 입력
-- Supabase SQL Editor에서 실행
-- 1. pgvector 확장 활성화
CREATE EXTENSION IF NOT EXISTS vector;

-- 2. 문서 테이블 생성 (1536차원 = OpenAI 임베딩)
CREATE TABLE documents (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  content text,
  metadata jsonb,
  embedding vector(1536)
);

-- 3. 유사도 검색 함수
CREATE OR REPLACE FUNCTION match_documents (
  query_embedding vector(1536),
  match_count int DEFAULT 5
)
RETURNS TABLE (id uuid, content text, metadata jsonb, similarity float)
LANGUAGE plpgsql
AS $$
BEGIN
  RETURN QUERY
  SELECT
    documents.id,
    documents.content,
    documents.metadata,
    1 - (documents.embedding <=> query_embedding) AS similarity
  FROM documents
  ORDER BY documents.embedding <=> query_embedding
  LIMIT match_count;
END;
$$;

옵션 B: Qdrant Cloud 세팅

Qdrant Cloud 클러스터 생성 (3분)
  1. https://cloud.qdrant.io 접속 → Google 계정 가입 (결제정보 불필요)
  2. 로그인 후 Create Cluster → Name: invest-rag, Region: Germany/Frankfurt 또는 가까운 곳, Plan: Free
  3. 클러스터 생성 완료 (1~2분) → 클러스터 URL 복사
  4. 좌측 API Keys → Create Key → 키 복사
  5. n8n Credentials → Qdrant API → URL + API Key 입력

실습 — 첫 문서를 Vector DB에 저장

이번 주는 "최소 1건" 저장까지만 합니다. 본격적 PDF 수백 페이지 검색은 W6에서 완성합니다.

🔧 W5 실습 — FOMC 의사록 한 페이지 저장·검색 테스트
Manual Trigger수업 중 테스트용 수동 실행
HTTP/FormFOMC 의사록 1페이지 텍스트 입력 (샘플 텍스트)
Default Data Loader텍스트를 LangChain 문서 형식으로 변환
Text Splitter500자 단위 청킹 (겹침 50자)
OpenAI Embeddingtext-embedding-3-small 모델로 1536차원 벡터 생성
Vector Store InsertSupabase 또는 Qdrant에 저장
💾 Vector Store — Insert Documents (공용) INSERT
Supabase / Qdrant 둘 다 동일한 n8n 노드 패턴으로 작동. 공식 Vector Store 노드 사용.
Operation Mode: Insert Documents
Embedding: Embeddings OpenAI (sub-node)
Model: text-embedding-3-small
Data Loader: Default Data Loader (sub-node)
Text Splitter: Recursive Character (500, 50)
Collection/Table: documents

임베딩이란 무엇인가 — 30초 설명

"임베딩"은 텍스트를 숫자 배열(벡터)로 변환하는 과정입니다. 비슷한 의미의 텍스트는 비슷한 벡터가 됩니다.

// 임베딩 예시 (실제는 1536차원)
"연준이 금리를 동결했다"  -> [0.12, -0.04, 0.89, 0.23, ...]
"FOMC에서 기준금리 유지"   -> [0.11, -0.05, 0.87, 0.24, ...]  // 비슷한 벡터!
"사과 주식이 올랐다"         -> [-0.33, 0.71, -0.12, 0.45, ...]  // 전혀 다른 벡터
💡 임베딩 모델 비용: OpenAI text-embedding-3-small은 100만 토큰당 $0.02. FOMC 의사록 50페이지 = 약 2만 토큰 = $0.0004. 거의 공짜. 수업 전체 임베딩 비용 $1 이내.

검증 — 검색 테스트

저장이 끝났으면 간단한 검색 테스트로 RAG가 작동하는지 확인합니다.

🔧 검색 테스트 워크플로
Manual"금리 동결 이유는?" 질문 입력
Embedding질문 문장도 벡터로 변환
Vector Store Query유사도 Top 3 결과 반환
확인관련 청크가 출력되면 성공
Test & Debug

실행 테스트와 디버깅

🚨 이번 주 자주 발생하는 오류
Supabase에 Insert하는데 "relation documents does not exist"
SQL Editor에서 CREATE TABLE documents 실행 안 한 경우. 4교시 SQL 블록을 순서대로 모두 실행. CREATE EXTENSION vector도 먼저 해야 함.
Qdrant가 401 Unauthorized
API Key가 틀렸거나 URL에 포트 누락. URL 형식: https://{cluster-id}.cloud.qdrant.io (포트 없음). Credentials에서 재입력.
임베딩 노드에서 OpenAI rate limit 오류
무료 OpenAI 티어는 분당 제한이 있음. Text Splitter로 청크 크기를 500~1000자로 조정하거나 Batch를 줄임. 유료 ($5 충전) 권장.
Execute Workflow 노드가 sub-workflow를 못 찾음
W4 워크플로의 Settings → Execute Workflow Trigger 노드를 첫 노드로 두고 저장. 외부 호출을 받으려면 "Called by Another Workflow" 트리거 필요.
Error Trigger가 작동 안 함
메인 워크플로의 Settings → Error Workflow에 Error 워크플로를 명시적으로 지정. Error 워크플로 자체는 Active 상태여야 함.
Completion Checklist

이번 주 완료 체크리스트

✅ 아래 항목이 모두 체크되면 W5 완료
4대 루틴(한국장 개장·마감·미국장 개장·크립토 4시간) Schedule Trigger 설정
Execute Workflow 노드로 W4 에이전트 모듈 호출 확인
Webhook Trigger로 외부 POST 요청 수신 테스트 성공
별도 Error 워크플로 생성 + 메인 워크플로 Settings에 연결
Telegram Bot 생성 + chat_id 획득 + n8n Credentials 등록
Gmail 또는 Telegram 노드로 HTML/텍스트 알림 발송 성공
Supabase 또는 Qdrant 중 하나 선택 → 클러스터 생성 + n8n Credentials 등록
OpenAI API 키 발급 + Embedding 노드로 첫 벡터 생성
샘플 텍스트 1건을 Vector Store에 Insert + 검색 결과 확인
Homework

이번 주 과제

📝 HOMEWORK · W5
개인용 24/7 투자 자동화 시스템 만들기
  • 본인 타임존·관심 자산군 맞춤 4대 루틴 설계 및 활성화 (예: 미국장 집중 시 미국장 루틴 더 세분화)
  • Telegram Bot에 /status 명령어 추가 — 현재 모니터링 중인 종목 리스트 즉시 조회 (Webhook + Telegram Trigger)
  • Vector DB에 관심 종목 3개의 최근 분기 실적 보고서 1페이지 요약 저장 — W6 본격 RAG 준비
  • 선택 챌린지 A: 1주일간 시스템 운영 로그를 Google Sheets에 기록 → 주말 회고
  • 선택 챌린지 B: Supabase와 Qdrant 둘 다 셋업 → 같은 문서로 검색 속도·결과 품질 비교 에세이
💡 W6 미리보기: 다음 주에는 Vector RAG 본격 구축입니다. 이번 주가 "DB 그릇 준비"였다면, W6은 "증권사 리포트 PDF 수십 개·FOMC 의사록 전체를 자동으로 임베딩해 저장하고 출처 페이지까지 인용하는 Q&A 시스템"을 만듭니다. Discord에서 "/ask 최근 FOMC에서 점도표 어떻게 바뀌었어?"라고 물으면 원문 인용 답변이 옵니다.
References

참고 자료

자료용도
n8n Schedule Trigger Docs
docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger
Cron 표현식, Timezone 설정 상세
n8n Error Trigger Docs
docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger
장애 복구 워크플로 설계 공식 가이드
Supabase pgvector
supabase.com/docs/guides/ai/vector-columns
Vector 컬럼, 유사도 검색 함수 SQL
Qdrant Cloud Getting Started
qdrant.tech/documentation/cloud-getting-started
클러스터 생성·API 키 발급 공식
n8n Vector Store Docs
docs.n8n.io/advanced-ai/examples/vector-store-data
Insert/Query operation 상세
OpenAI Embeddings Pricing
openai.com/api/pricing
text-embedding-3-small 단가
TradingView Alert Webhook 공식 가이드Webhook으로 n8n 연동 (과제 B)
W5 강의노트 · 스케줄 확장 + 멀티채널 + RAG 기초 · 투자 자동화 과정 · 2026