n8n, Automation Tool/n8n Project
Sense Stock, D+4
그때 그때 끄적
2025. 6. 4. 20:26
📅 Sense Stock 개발 일지 (2025-06-04)
n8n 기반 뉴스 요약 자동화 시스템 Sense Stock 구축 중 진행한 작업들을 정리합니다.
오늘은 Slack 개인 비공개 채널에서 @Stock Bot 사용, Process 구조 개선, 프롬프트 구조화 및 고도화 등을 다뤘습니다.
🔧 사용 도구
도구 | 역할 |
🔷 n8n | 전체 워크플로우 자동화 도구 |
🔷 Firecrawl.dev | 사이트 內 기사 검색 + URL 수집 API (Firecrawl MCP Sever) |
🔷 ChatGPT | 키워드 정제 및 후속 분석 |
- 오늘의 목표
- Slack 모든 Channel(공개, 비공개)에서 @Stock Bot 호출 시 해당 채널에서 응답 가능하도록 설정
- 기존 관리자 응답 방식에서 → @Stock Bot 응답 구조로 전환
- Firecrawl Search 설정 점검 및 최신 뉴스 중심 검색 적용 (tbs 파라미터 활용)
- 뉴스 요약 프롬프트 구조 고도화: 요약 → 전략 분석 → 전문가 분석까지 확장 고려
- 요약 중심 분석 (Basic)
- 전략 및 수혜 분석 (Intermediate)
- 3단계 (Expert)
- 사용자 응답 흐름 개선 (요청 접수 메시지 표시 등)
- 진행 내용
- Slack 비공개 Channel에서 @Stock 작동 확인
- Firecrawl Extract Output Parsing Node 추가
- Firecrawl Extract 프롬프트 개선
- Firecrawl Search 옵션 개선: 최신 뉴스 중심 검색
- 요약 프롬프트 구조: 단계별 정보 분석 적용
- 사용자 요청 수신 후 응답 대기 메시지 설정
Step 1. Slack 비공개 채널에서 @Stock 작동 확인
- 기존에는 개인 채널 및 비공개 채널에서 @Stock 호출 시 아무 반응 없음
- 원인: Channel Tag를 Input으로 들어온 Channel이 아닌 고정된 Channel 값을 부여
- 조치: Input으로 들어온 Channel 입력
- + 응답 구조 변경:
- 💬 관리자 응답 구조 → @Stock Bot이 응답하도록 전환
- Slack Credential Bot Acess Token 생성 → App Mention 이벤트 정상 인식됨
- 💬 사용자 요청 수신 후 응답 대기 메시지 설정(Slack Node 추가)
- 사용자가 @Stock을 호출하면 결과가 나가기 전 다음과 같은 메시지가 먼저 전송되도록 구성
- 요청 > Get User(사용자 닉네임 가져오기) > 관련 내용 전송
👋 `{{nickname}}`님, 요청을 잘 받았어요! 현재 `작업을 처리 중`입니다... 🔄 조금만 기다려주시면 결과를 정리해서 보내드릴게요.
- 💬 관리자 응답 구조 → @Stock Bot이 응답하도록 전환
더보기
Slack 관련 메시지 노드 설명 (n8n 기준)
아이콘 | 기능 | 설명 |
🟦 Send a message | 메시지 보내기 | 일반 텍스트 전송 |
🟦 Get a message permalink | 고유 링크 추출 | 특정 메시지의 URL |
🟦 Delete a message | 메시지 삭제 | 타임스탬프 기반 |
🟦 Update a message | 메시지 수정 | 기존 메시지 덮어쓰기 |
🟦 Send message and wait for response | 응답 대기 메시지 전송 | 버튼 응답 등 사용자 입력 대기 |
🟦 Search for messages | 메시지 검색 | 키워드 기반 Slack 채널 내 검색 |
🟦 Get a thread of messages | 스레드 조회 | 댓글 형태로 등록된 메시지 모음 |
⚡ On new message posted to channel | 트리거 | 특정 채널에 새 메시지 등록되면 실행 |
Step 2. Firecrawl Extract Output Parsing Node 추가
- 기사 본문 추출 결과를 구조화된 형태로 파싱할 수 있도록 별도 노드 구성(= Articles Parsing Node)
- 본문 외 메타 정보 제거로 GPT 응답 정확도 향상
- + Firecrawl Extract Prompt 변경, 기사 본문내용 제외(= Token 많이듬)
- 기사 날짜 / 기사 작성자 / 요약본
Step 3. Firecrawl Search 옵션 개선: 최신 뉴스 중심 검색
- tbs 파라미터를 사용하여 최근 뉴스 기사만 추출
🔹 tbs 파라미터 옵션 정리
값 | 의미 |
qdr:h | 지난 1시간 |
qdr:d | 지난 1일 |
qdr:w | 지난 1주 |
qdr:m | 지난 1개월 |
qdr:y | 지난 1년 |
Step 4. 📊 요약 프롬프트 구조: 단계별 정보 분석 적용
Final Extract Agent 프롬프트를 1단계, 2단계 + 3단계 구조(예정) 로 리디자인:
- 요약 중심 분석 (Basic)
- 키워드, 관련 종목, 감성 점수 등 정보 추출 중심
- 항목별 프롬프트 분리 구성
- 전략 및 수혜 분석 (Intermediate)
- 단순 정보 요약을 넘어 GPT의 추론 능력을 활용한 전략적 해석
- 현재는 준비 단계, 결과 저장만 진행 중
- 전문가 분석 (Expert) (예정)
- 정책/기술/시장 배경까지 반영한 고도화된 분석용 프롬프트 설계 예정
🧱 Workflow 구조
- 추가 Node Update 필요
Slack 사용자 요청
↓
Best Keyword 추출 (GPT)
↓
Yahoo Finance 검색 → 기사 URL 리스트 생성
↓
각 URL 순회하며 요약 (Split In Batches + OpenAI)
↓
기사 요약 결과 병합
↓
최종 통합 요약 & 전략 분석
↓
Slack Message 전송
📑최종 통합 요약
❓ 다음 단계에서 고민 중인 점들
- API별 사용량/비용부터 먼저 파악 (운영비 예측)
- 현재 사용 중인 API:
- OpenAI ChatGPT (GPT-4)
- Firecrawl (Search & Extract) → 이 둘은 호출 수에 따라 비용이 지속적으로 발생한다는 공통점이 있음
- 현재 사용 중인 API:
- 러닝타임 측정 기능 구현
- 현재 워크플로우는 요청 → 응답 흐름만 있을 뿐, 실제로 각 단계가 얼마나 걸리는지 확인할 수 없음.
- 특히 GPT + Firecrawl은 작업당 몇십 초 이상(30초~) 걸릴 수 있어서, 다중 사용자가 붙을 경우 속도 병목이 생길 가능성이 있음.
- 저장할 데이터 목록 정의 + 임시 저장 테스트
- 현재 결과값은 Slack으로만 전송되고 사라짐.
→ 추후 분석/통계/개선용으로 어떤 데이터를 적재할 것인지 판단 필요 - 고민 포인트
- 저장소는 무엇을 쓸까? (예: Supabase, Firebase, Google Sheets, Airtable 등)
- 저장 주기는 어떻게 할까? (모든 요청? 요약만 성공했을 때?)
- 현재 결과값은 Slack으로만 전송되고 사라짐.
더보기
저장 대상 후보
- 사용자 요청 키워드
- 검색된 기사 URL
- GPT 요약 결과 (json 형태)
- 요약 점수/감성/종목명 등 메타정보
- 요청 채널 / 요청자 ID / 요청 시각
- 요청 상태 저장 (처리 중인 요청은 무시하거나 안내 메시지 출력)
4. 멀티 유저 환경에서의 사용량 제한 / 안정성 설계
- 혼자 쓸 때도 GPT 응답 + 크롤링 응답까지 10~20초 정도 걸리는 경우가 많음.
- → 크롤링할 기사가 많을수록 시간은 더 오래걸림
- → 이걸 다수 사용자가 동시에 쓰게 되면?