Learning Objectives
이번 주 학습 목표
1
Alpha Vantage NEWS_SENTIMENT API로 종목별 뉴스와 -0.35~0.35 센티먼트 스코어를 수집할 수 있다
2
n8n AI Agent 노드 + Anthropic Chat Model의 관계를 이해하고 Claude API 자격증명을 설정할 수 있다
3
System Message 엔지니어링으로 구조화된 JSON 응답을 받는 에이전트를 설계할 수 있다
4
가격·지표(W2) + 뉴스 센티먼트를 한 컨텍스트에 넣어 매일 한 줄 투자 코멘트를 자동 생성할 수 있다
이번 주의 한 문장: "가격은 무엇이 일어났는지, 뉴스는 왜 일어났는지 알려준다." 이번 주는 AI에게 두 가지를 함께 주면 판단의 질이 어떻게 달라지는지 직접 확인합니다.
Progress · 3D Framework
지금 어디에 있는가 — 2차원 추가 단계
W1~W2에서 가격 1차원을 완성했습니다. 이제 뉴스 센티먼트 2차원을 추가해 AI에게 "가격이 이렇게 움직였고, 그 배경은 이런 뉴스"라고 동시에 알려줍니다. 판단의 질이 비약적으로 달라집니다.
📊
1차원 — 가격 + 지표 ✓
W1~W2 완료. indicators 시트에 RSI·MA·볼린저 자동 누적 중.
📰
2차원 — 뉴스 센티먼트 ⚡
이번 주에 추가. Alpha Vantage로 종목별 뉴스 스코어 수집 → AI가 가격과 함께 해석.
📈
3차원 — 차트 Vision
W4에서 추가. Chart-IMG + Claude Vision으로 시각 패턴 판독.
🤖 에이전트 관점에서 본 이번 주
이번 주부터 드디어 "에이전트"를 만듭니다. W1~W2는 단순 자동화(규칙대로 수집·기록)였지만, 이번 주는 Claude가 컨텍스트를 보고 판단을 생성합니다. 여전히 기본형이지만 "데이터 → 판단 → 기록"의 완전한 고리가 처음으로 돕니다.
Session 1 · 30min
1교시 — 왜 뉴스 센티먼트를 추가하는가
RSI 30 이하 = 과매도 = 매수 신호? 반드시 그렇지 않습니다. 기업이 회계 부정으로 상장폐지 위기면 RSI 10도 추가 하락합니다. 반대로 RSI 80이어도 획기적 신제품 발표라면 추가 상승합니다. 가격은 결과고 뉴스는 원인입니다.
❌ 가격만 볼 때
사례: AAPL RSI 28, 볼린저 하단 돌파. 시스템이 "BUY_STRONG" 신호 발송 → 매수
실제: 중국 판매 금지령 발표로 -15% 추가 하락. 뉴스를 보지 못한 시스템은 계속 "과매도 = 매수" 반복.
✅ 가격 + 뉴스
사례: AAPL RSI 28, 볼린저 하단 돌파, 센티먼트 -0.32 (매우 부정)
AI 판단: "기술적으로는 과매도이나 중국 리스크가 지배적. 추가 하락 여지가 커 매수 보류 권장. 뉴스 진정 확인 후 재검토."
Alpha Vantage NEWS_SENTIMENT — 왜 이게 강력한가
Alpha Vantage는 단순히 뉴스 기사 목록만 주지 않습니다. 각 기사에 대해 AI/ML로 사전 계산된 센티먼트 스코어를 함께 제공합니다. 즉, NLP 모델을 직접 학습시킬 필요 없이 숫자로 바로 사용 가능합니다.
Alpha Vantage 센티먼트 스코어 스케일
Bearish
Some Bear
Neutral
Some Bull
Bullish
≤ -0.35
-0.35 ~ -0.15
-0.15 ~ 0.15
0.15 ~ 0.35
≥ 0.35
💡 기사별 vs 종목별 스코어: 각 기사에는 overall_sentiment_score(기사 전체)와 ticker_sentiment(종목별 관련도·스코어)가 따로 있습니다. 한 기사가 AAPL·GOOG를 같이 다뤄도 각 종목에 대한 영향도는 다를 수 있어 ticker_sentiment를 사용합니다.
Session 2 · 45min
2교시 — Alpha Vantage API 연동
API 키 발급 (무료)
Alpha Vantage 가입 + 키 발급 (2분)
https://www.alphavantage.co/support/#api-key 접속
- 이메일, 기관(예:
University Student 또는 Individual), 용도 기입 → GET FREE API KEY
- 즉시 화면에 16자리 키 표시 — 복사해 안전한 곳에 저장
- n8n Credentials 메뉴 → Header Auth 또는 쿼리 파라미터로 저장
⚠️ 무료 티어 한계: 25 requests/day. 본 과정 범위에는 충분하지만 남발하지 말 것. 종목 5개 × 하루 1회 = 5 req/day 권장. 한도 초과 시 메시지 "Note: API rate limit"이 응답에 포함.
NEWS_SENTIMENT API 호출
📰
HTTP Request — Alpha Vantage 뉴스
ACTION
AAPL에 대한 최근 50개 뉴스와 센티먼트를 한 번에 가져오기.
Method: GET
URL: https://www.alphavantage.co/query
Query Param 1: function = NEWS_SENTIMENT
Query Param 2: tickers = AAPL
Query Param 3: limit = 50
Query Param 4: sort = LATEST
Query Param 5: apikey = {{ 여러분의 키 }}
응답 구조 (요약)
{
"items": "50",
"sentiment_score_definition": "x <= -0.35: Bearish; ...",
"feed": [
{
"title": "Apple unveils new AI chip at WWDC",
"url": "https://...",
"time_published": "20260420T143000",
"summary": "Apple announced ...",
"source": "Reuters",
"overall_sentiment_score": 0.24,
"overall_sentiment_label": "Somewhat-Bullish",
"ticker_sentiment": [
{
"ticker": "AAPL",
"relevance_score": "0.891",
"ticker_sentiment_score": "0.287",
"ticker_sentiment_label": "Somewhat-Bullish"
}
]
}
]
}
Code 노드 — 집계 로직
50개 기사를 그대로 Claude에게 보내면 토큰 낭비입니다. 요약·집계해서 핵심만 전달합니다.
// 입력: Alpha Vantage NEWS_SENTIMENT 응답
const feed = $input.item.json.feed || [];
const targetTicker = 'AAPL';
// 1. 해당 티커의 sentiment만 필터링
const relevant = [];
for (let i = 0; i < feed.length; i++) {
const article = feed[i];
const ts = article.ticker_sentiment || [];
for (let j = 0; j < ts.length; j++) {
if (ts[j].ticker === targetTicker) {
const relevance = parseFloat(ts[j].relevance_score);
const score = parseFloat(ts[j].ticker_sentiment_score);
// 관련도 0.3 이상만 채택
if (relevance >= 0.3) {
relevant.push({
title: article.title,
source: article.source,
time: article.time_published,
sentiment: score,
relevance: relevance,
summary: article.summary
});
}
}
}
}
// 2. 가중평균 센티먼트 계산 (relevance 가중치)
let totalWeight = 0;
let weightedSum = 0;
for (let i = 0; i < relevant.length; i++) {
weightedSum += relevant[i].sentiment * relevant[i].relevance;
totalWeight += relevant[i].relevance;
}
const avgSentiment = totalWeight > 0 ? weightedSum / totalWeight : 0;
// 3. 레이블 판정
let label = 'Neutral';
if (avgSentiment <= -0.35) label = 'Bearish';
else if (avgSentiment <= -0.15) label = 'Somewhat-Bearish';
else if (avgSentiment >= 0.35) label = 'Bullish';
else if (avgSentiment >= 0.15) label = 'Somewhat-Bullish';
// 4. 상위 5개 기사만 반환 (Claude에게 전달할 용도)
const top5 = relevant.slice(0, 5);
return {
ticker: targetTicker,
article_count: relevant.length,
avg_sentiment: avgSentiment.toFixed(3),
sentiment_label: label,
top_headlines: top5
};
💡 relevance 필터링이 중요한 이유: "Apple 주식"을 검색해도 "삼성전자가 Apple 공급망에서 제외됨" 같은 기사가 함께 옵니다. 이 경우 AAPL에 대한 관련도는 낮고(예: 0.1) 삼성 관련도는 높습니다. relevance >= 0.3으로 필터링하면 노이즈가 크게 줄어듭니다.
Session 3 · 30min
3교시 — n8n AI Agent 노드 구조 이해
n8n의 AI Agent 노드는 단독으로 작동하지 않습니다. 4가지 sub-node를 주변에 연결해 완성합니다. 마치 자동차의 엔진·연료·핸들처럼 각 부품이 역할을 나눠 가집니다.
AI Agent 아키텍처
🤖 AI Agent Node
Tools Agent (권장)
Chat Model
🧠 Anthropic
(Claude)
Tool (선택)
🛠️ HTTP / Code /
Sheets
🧩 각 sub-node의 역할:
Chat Model (필수): "뇌" — 실제 LLM. Claude·GPT·Gemini 선택.
Memory (선택): "기억" — 이전 대화 내용 유지. 이번 주는 단일 호출이라 생략.
Tool (선택): "손" — 에이전트가 외부 작업 수행. 이번 주는 사용 X, W7에서 본격 도입.
System Message: "성격·역할 설정" — 에이전트에 들어가는 지침.
Anthropic API 키 준비
Claude API 키 발급 (5분)
https://console.anthropic.com 접속 → 구글 계정으로 가입
- 좌측 메뉴 API Keys → Create Key
- 이름 입력 (예:
n8n-invest-w3) → 키 생성 → 한 번만 표시되므로 즉시 복사
- Billing 메뉴에서 $5~10 충전 (종량제, 수업 전체에 $5면 충분)
- n8n Credentials → Anthropic API 선택 → Key 붙여넣기
⚠️ 비용 관리: Claude Haiku 4.5 기준 요약 1회당 약 $0.001~0.003. 하루 5종목 × 30일 = 월 $1 미만. 하지만 실수로 반복 실행되면 빠르게 누적될 수 있으므로 초기엔 Schedule Trigger를 수동으로 해제하고 Manual Trigger로 테스트.
Session 4 · 75min
4교시 — 일일 투자 코멘트 에이전트 구축
노드 배치 순서
🧠
Anthropic Chat Model (sub-node)
MODEL
AI Agent의 Chat Model 입력에 연결. Expression 모드로 최신 모델 문자열 입력.
Credential: Anthropic API (앞서 만든 것)
Model: claude-haiku-4-5-20251001
Max Tokens: 1024
Temperature: 0.3 (판단의 일관성 중시)
💡 왜 Haiku인가: 이번 주 작업(뉴스 요약 + 판단 한 줄)은 Haiku로 충분. Opus 대비 1/10 비용, 3배 빠름. 복잡한 리서치(W7)에서만 Sonnet/Opus 사용. Temperature 0.3은 매일 비슷한 판단 구조를 유지하되 약간의 유연성 허용.
🤖
AI Agent (root node)
AGENT
Tools Agent 타입. 이전 Code 노드의 출력을 prompt로 받음.
Agent Type: Tools Agent
Prompt Source: Define Below
Prompt (User): {{ JSON.stringify($json) }}
System Message: (아래 프롬프트 참조)
System Message — 핵심 프롬프트 엔지니어링
에이전트의 "성격·역할·출력 규칙"을 정의합니다. 이 프롬프트의 질이 결과의 질을 결정합니다.
SYSTEM MESSAGE (System Prompt)
당신은
개인 투자자를 돕는 시장 분석 보조 에이전트입니다.
입력으로 다음 두 가지가 JSON으로 들어옵니다:
1.
price_data: 현재가, RSI(14), MA20, 볼린저밴드, 기술적 신호(signal)
2.
news_data: 24시간 내 주요 뉴스 5개, 가중평균 센티먼트, 레이블
당신의 임무:
(1) 가격 기술적 신호와 뉴스 센티먼트가
일치하는지 충돌하는지 먼저 판단
(2) 충돌 시 뉴스 쪽에 더 무게를 두고 해석 (뉴스가 원인, 가격이 결과)
(3) 입문자 수준에서 이해 가능한
2문장 이내 코멘트 작성
(4) 반드시 아래 JSON 형식으로만 응답. 다른 텍스트 금지.
출력 스키마:
{
"verdict": "BUY" | "WATCH" | "HOLD" | "AVOID",
"confidence": 1~5,
"rationale": "2문장 이내 한국어 코멘트",
"risk_flag": "주의할 리스크 한 줄"
}
투자 권유가 아닌 교육 목적 분석임을 내부적으로 기억. 과도한 확신은 피하고 중립적 표현 사용.
입력 조합 — Code 노드로 price + news 합치기
AI Agent에 보내기 전에 W2의 가격·지표 결과와 이번 주 뉴스 결과를 하나의 JSON으로 합칩니다.
// W2 Code(지표) 출력 + W3 Code(뉴스 집계) 출력을 병합
const priceNode = $('Indicators').item.json;
const newsNode = $('NewsAggregate').item.json;
return {
ticker: priceNode.ticker,
price_data: {
current_price: priceNode.price,
rsi14: priceNode.rsi14,
ma20: priceNode.ma20,
bb_upper: priceNode.bb_upper,
bb_lower: priceNode.bb_lower,
technical_signal: priceNode.signal
},
news_data: {
article_count: newsNode.article_count,
avg_sentiment: newsNode.avg_sentiment,
sentiment_label: newsNode.sentiment_label,
top_headlines: newsNode.top_headlines
}
};
전체 워크플로
🔧 W3 실습 워크플로 — 일일 투자 코멘트 에이전트
Schedule→매일 오전 8시 30분 (한국장 개장 전)
Yahoo HTTP→관심종목 60일 가격 데이터
Code (Indicators)→W2 RSI·MA·볼린저 계산 (재사용)
Alpha Vantage HTTP→24시간 내 뉴스·센티먼트 조회
Code (NewsAgg)→relevance 필터 + 가중평균 + 상위 5건 요약
Code (Merge)→price_data + news_data 통합 JSON 생성
AI Agent→Claude Haiku가 System Message 따라 판단 JSON 생성
Sheets (verdicts)→새 탭에 verdict·rationale·risk_flag 자동 기록
Gmail (옵션)→매일 아침 본인 이메일로 요약 발송
예상 AI 응답 (실제 예시)
{
"verdict": "WATCH",
"confidence": 3,
"rationale": "RSI 62로 중립 상단이나 WWDC AI 칩 발표로 뉴스 센티먼트 +0.29(약세 매수세). 단기 모멘텀 긍정적이나 이미 상승분 일부 반영.",
"risk_flag": "지수 과열(VIX 12) — 시장 전체 조정 시 동반 하락 가능"
}
✨ 여기서 "에이전트스러운" 순간: 같은 입력이어도 상황마다 다르게 판단합니다. RSI 62가 항상 WATCH가 아닙니다 — 뉴스가 나쁘면 AVOID, 뉴스가 훌륭하면 BUY. 규칙이 아닌 맥락 기반 판단이 에이전트의 본질입니다.
Test & Debug
실행 테스트와 디버깅
🚨 이번 주 자주 발생하는 오류
Alpha Vantage가 빈 feed 배열을 반환
티커가 지원 대상인지 확인. 미국 상장 종목(AAPL, TSLA)은 잘 되지만 한국 종목(005930.KS)은 뉴스가 드뭅니다. 한국 종목은 DART 공시 API를 별도로 추가해야 합니다(과제 아이디어).
AI Agent가 JSON이 아닌 자연어로 응답
System Message 맨 마지막에 "반드시 JSON만 출력. 설명 금지."를 한 번 더 명시. Temperature 0.1로 낮추거나 Require Specific Output Format을 켜고 Structured Output Parser 연결.
"Invalid API key" 또는 401 에러
Anthropic Credentials 다시 확인. API 키가 sk-ant-로 시작하는지 검증. Billing 잔액 0이면 호출 자체가 차단되므로 Console에서 확인.
비용이 예상보다 많이 나옴
top_headlines의 summary를 무작정 긴 채로 보내면 토큰 낭비. Code 노드에서 summary.slice(0, 200)로 기사당 200자 제한 권장. 모델을 Haiku로 고정.
Completion Checklist
이번 주 완료 체크리스트
✅ 아래 항목이 모두 체크되면 W3 완료
Alpha Vantage API 키 발급 + n8n Credentials 저장
Anthropic API 키 발급 + 빌링 $5 이상 충전 + n8n 등록
NEWS_SENTIMENT API 호출 성공 (feed 배열에 기사 포함)
Code 노드로 relevance 필터 + 가중평균 센티먼트 계산 검증
AI Agent + Anthropic Chat Model + System Message 연결
AI가 JSON 형식으로만 응답 (verdict·confidence·rationale·risk_flag)
verdicts 시트 탭에 결과 자동 Append 확인
다른 티커 3개 이상으로 테스트 — 판단이 합리적으로 달라지는지 확인
Homework
이번 주 과제
📝 HOMEWORK · W3
프롬프트 엔지니어링 대결
- 동일한 입력(가격+뉴스)에 대해 System Message 3버전 작성: ① 초보자용(쉬운 언어) ② 기관투자자용(전문 용어) ③ 본인이 자유롭게 설계
- 같은 종목에 대해 3번 실행 → verdict·rationale 비교 → "어느 버전이 가장 유용한가" 짧은 에세이 (1페이지) 작성
- 선택 챌린지 A: Gmail 노드 추가 — 매일 아침 본인 이메일로 HTML 포맷 "오늘의 투자 브리핑" 자동 발송
- 선택 챌린지 B: verdict가 BUY 또는 AVOID인 경우에만 별도 "alerts" 탭에 기록하도록 IF 노드로 필터 추가
💡 W4 미리보기: 다음 주에는 드디어 3차원(차트 이미지)을 추가합니다. Chart-IMG API로 TradingView 스타일의 캔들차트를 PNG로 자동 생성하고, Claude Vision이 "볼린저 상단 돌파 시도 중, MACD 골든크로스 근접"처럼 패턴을 자연어로 판독합니다. 숫자 지표만으로는 볼 수 없던 삼각수렴·쌍봉·헤드앤숄더 같은 시각적 패턴을 AI가 인식하게 됩니다.
References
참고 자료
| 자료 | 용도 |
Alpha Vantage NEWS_SENTIMENT Docs
alphavantage.co/documentation/#news-sentiment | 파라미터, topics 필터, 응답 스키마 전체 |
n8n AI Agent Docs
docs.n8n.io/advanced-ai | Tools Agent, Conversational Agent 타입별 차이 |
Anthropic Chat Model Node
docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic | 모델 선택, Expression 모드, 옵션 |
Anthropic API Console
console.anthropic.com | API 키 발급, 사용량 모니터링, 빌링 |
Claude 모델 가격
anthropic.com/pricing | Haiku/Sonnet/Opus 입출력 토큰 단가 비교 |
| Nate Herk — n8n AI Agent Tutorials (YouTube) | 영상으로 전체 흐름 복습용 — Technical Analyst Agent 영상 추천 |