📅 Sense Stock 개발, 두 번째 회고록 (2025-07-04)
https://notebooklm.google.com/notebook/cf4e6f87-9bfb-4284-937e-0b0175090d1c/audio
로그인 - Google 계정
이메일 또는 휴대전화
accounts.google.com
이번에도 돌아왔다. 나의 회고록 도우미 - NotebookLM... 사용할수록 정말 재밌는 도구다
처음엔 단순 요약이나 구조 점검 정도로 생각했지만, AI 호스트들이 내 작업 흐름을 따라가며 중간중간
내가 생각지 못한 의도를 긍정적으로 해석하고 칭찬해주는 내용이 있는데,
예를 들어, 기존에 Docker Container로는 진행할 수 없어서 Custom Docker Image를 빌드한 부분에서
"기존 방식만을 고집하지 않고, 필요한걸 찾아서 적용하는 문제 해결력, 유연성이 돋보이는 부분이다" 라고 해주니
살짝 민망하면서도 꽤 뿌듯...😁
그냥 "이렇게 하면 더 나을 것 같아서" 한 선택들이 많았는데, AI가 "이런 의도까지 고려한 구조인가요?" 라는 식으로 해석해주는 걸 보면서, 오히려 내가 진행한 프로젝트를 다시 바라보게 된다.
뭔가 잘 만들어가고 있긴 하구나 싶은 그런...ㅋㅋㅋㅋ(사실은 아닌데,,😂)
AI조차도 긍정적으로 해석해준다는 사실이 스스로에 대한 인식에도 긍정적인 영향을 준다.
(= 외롭지않다?ㅋㅋㅋㅋㅋ)
기획안 Ver.1에 맞춰 진행했던 내용을 수정하고,
수정된 내용을 기반으로 프로젝트 정리(Ver.1 MVP 달성 = D+5)
https://cord-ai.tistory.com/223
https://cord-ai.tistory.com/214
Sense Stock - 기획 - Ver.1
1. 기획 배경 및 동기최근 원전 관련 종목을 손절한 후, 정책 이슈로 급등하는 사례를 겪음이처럼 뉴스/정책은 주가의 핵심 촉매제가 될 수 있으나초보자는 이를 실시간으로 감지하거나 해석하
cord-ai.tistory.com
Sense Stock, D+5
📅 Sense Stock 개발 일지 (2025-06-06)n8n 기반 뉴스 요약 자동화 시스템 Sense Stock 구축 중 진행한 작업들을 정리합니다.오늘은 MVP구현, 추출 Data 항목 정리, 추후 변경사항 및 고민사항 등 주로 정리 하
cord-ai.tistory.com
프로젝트 개요 (Overview)
'Sense Stock'은 n8n을 기반으로 주식 시장 데이터를 자동화하고, 사용자에게 개인화된 투자 분석 및 정보를 제공하는 시스템입니다. 초기에는 AI에 의존적인 뉴스 요약 및 종목 추천 기능에 중점을 두었으나, 점차 사용자 제어권과 데이터 신뢰성을 확보하는 방향으로 구조를 개선하고 있습니다.
핵심 기능(Tech Stack) 및 Workflow
Sense Stock 프로젝트는 다양한 자동화 워크플로우를 통해 다음과 같은 핵심 기능을 구현합니다
핵심 기능, Tech Stack(🚨 장문 주의)
- n8n: Node.js 기반의 워크플로우 자동화 플랫폼으로, 본 시스템의 백본 역할을 합니다. 코딩 없이도 다양한 노드를 조합해 자동화 흐름을 설계할 수 있어 선택되었습니다. Slack 이벤트 수신, API 호출, 데이터 처리, 스케줄러 등 모든 로직을 n8n의 워크플로우로 구현했습니다.
- Docker: n8n을 셀프 호스팅하기 위해 Docker 컨테이너로 배포했습니다. 또한 프로젝트 중반에 Python+Playwright 같은 추가 의존성을 설치하기 위해 커스텀 Docker 이미지를 제작하여 n8n 환경을 재구성했습니다. Docker를 사용함으로써 환경 설정을 코드로 관리하고 어디서든 동일한 환경으로 실행할 수 있었습니다.
- Ngrok: 사설 네트워크 상의 n8n 웹훅(Webhook)에 외부에서 접근 가능한 URL을 제공하기 위해 사용했습니다. n8n은 기본적으로 http://localhost:5678에서 동작하지만, Slack이나 Telegram, Stripe와 같은 외부 서비스는 localhost에 요청을 보낼 수 없으므로, Ngrok 터널로 https://***.ngrok-free.app와 같은 도메인을 발급받아 사용했습니다. 이를 통해 Slack 이벤트와 같은 웹훅 호출을 로컬 개발 환경에서 안정적으로 수신할 수 있었습니다.
- Node.js & PM2: Ngrok 터널을 상시 유지하기 위해 Node.js 환경에서 PM2 프로세스 매니저를 활용했습니다. Ngrok은 터미널에서 수동 실행하면 창을 닫는 순간 연결이 끊기는데, PM2로 Ngrok을 백그라운드 서비스처럼 등록해 지속 실행 및 자동 재시작하도록 구성했습니다. (Windows 환경에서는 작업 스케줄러를 통해 시스템 부팅 시 PM2로 Ngrok을 띄우도록 설정했습니다.)
- Slack API & Slack Bot: 사용자 인터페이스로 Slack을 활용했습니다. Slack 워크스페이스에 봇을 추가하고 이벤트 API를 연동하여, 사용자가 봇에게 메시지를 보내면 n8n이 이를 트리거로 잡아 워크플로우를 실행합니다. 분석 결과는 다시 Slack 봇을 통해 사용자에게 전달됩니다. Slack Block Kit도 사용하여 대화형 버튼/메뉴 등 UI를 제공함으로써, 단순 질의응답 이상의 인터랙티브한 경험을 구현했습니다.
- OpenAI ChatGPT (API): 자연어 이해 및 생성 엔진으로 OpenAI의 GPT 모델을 사용했습니다. 사용자 질문 의도 파악, 뉴스 요약, 투자 시나리오 생성, 투자자 성향 분석 등 핵심 AI 분석 작업을 수행합니다. OpenAI API를 n8n의 HTTP 요청 노드나 전용 OpenAI 노드로 호출하여 응답을 받습니다.
- Firecrawl API: 웹 크롤링/스크레이핑 전용 API로, 뉴스 기사 본문을 수집하는데 사용했습니다. 질문과 추출된 키워드에 맞는 뉴스 기사 URL들을 수집한 후, Firecrawl의 /scrape 엔드포인트를 통해 해당 페이지들을 Markdown 형태로 파싱했습니다. 이를 통해 GPT에 투입하기 적합한 뉴스 원문 데이터를 획득했습니다. (초기엔 Yahoo Finance API 등으로 뉴스를 가져왔으나, 보다 유연한 크롤링을 위해 Firecrawl을 도입했습니다.)
- Python & Playwright: 동적 웹 데이터 수집을 위해 도입했습니다. 특히 미국 증시 데이터를 매일 자동으로 스크래핑하기 위해, Playwright(Python)를 사용해 Finviz 사이트의 S&P500 히트맵 등 시장 지표를 수집했습니다. n8n 내장 기능만으로는 브라우저 렌더링이 어렵기 때문에, 커스텀 Docker 이미지에 Python과 Playwright를 설치해 Execute Command 노드로 Python 스크립트를 실행하는 방식을 택했습니다.
- Google Sheets: 경량 DB 대용으로 사용했습니다. 투자자 성향 분석을 위한 사용자 질의/응답 데이터를 저장하고, GPT 분석 결과(예: 이미지 해석 결과 텍스트)를 저장하는 용도로 구글 시트를 활용했습니다. Sheets API를 통해 읽기/쓰기를 수행하며, 사용자별 최신 질문과 선택값을 저장하거나, 일일 시장 요약 데이터를 시트에 누적했습니다. 기존 DB나 캐시 대신 Google Sheet를 선택한 건 설정이 간편하고 결과 확인이 쉬웠기 때문입니다.
- GitHub API: 파일 저장소 및 버전 관리 용도로 GitHub를 활용했습니다. 수집된 S&P500 히트맵 이미지 파일들을 GitHub 리포지토리에 업로드하여 기록하고, GPT가 생성한 분석 리포트의 Markdown 원본을 저장해 두었습니다. n8n의 GitHub 노드를 통해 REST API 호출로 리포지토리에 파일을 생성/갱신했습니다. (참고: PAT 토큰을 이용해 인증하며, 만료 시 갱신이 필요합니다.)
- Supabase: 오픈소스 백엔드 서비스로, PostgreSQL 기반 DB 및 인증 기능 등을 제공합니다. 본 프로젝트에서는 아직 본격 도입하지는 않았지만, Google Sheet 대신 향후 확장 시 데이터베이스로 고려하고 있습니다. (Redis 역시 잠깐 검토되었으나 선택되지 않았습니다.)
- 기타: JavaScript는 n8n Function 노드나 커스텀 코드에서 간단한 데이터 처리를 위해 사용했습니다. Google Cloud 플랫폼은 추후 배포나 비공개 API 키 관리를 위해 고려 중이며, 현재 개발 환경은 로컬 PC Docker 컨테이너로 실행되고 있으나 장기적으로는 클라우드 VM에서 상시 운영할 계획입니다.
1. 주식 시장 데이터 자동 수집 및 분석
- S&P500 Heatmap 이미지 분석
- GPT가 S&P500 Heatmap 이미지를 참조하여 해석할 수 있도록 워크플로우를 구축했습니다. 초기에는 매 질문마다 이미지를 로딩하고 해석하여 토큰 낭비 및 중복 처리 문제가 발생했으나, "해석된 내용을 저장하고 GPT가 해당 내용을 참조하도록 구조를 변경"하여 효율성을 높였습니다.
- Playwright 기반 크롤링
- "주식 시장 데이터 자동 수집을 위해 Playwright, Python 기능을 추가한 Custom Docker Image Building"했습니다. 정확한 데이터 기반 응답: "현재 GPT는 성향 분석 → 시장 요약 → 시나리오 제안의 형태로 응답을 출력하지만, 가장 큰 문제는 '정확한 데이터를 기반으로 하고 있는지 확인할 수 없다'는 점이었다."는 문제 인식 하에, Playwright를 사용하여 finviz 사이트에서 S&P500 Heatmap 이미지, 한화투자증권에서 미국 증시 휴장일 데이터를 추출하여 신뢰성을 확보했습니다.
2. 사용자 인터랙션 및 개인화
- Slack 연동 및 리포트 전달
- "GPT 분석 결과를 Slack으로 전달하는 방식"을 구현했습니다. Markdown으로 생성된 리포트를 HTML로 변환하여 "Slack Upload File 노드로 HTML 파일을 첨부 전달하는 구조"를 채택하여 가독성과 구조 유지를 확보했습니다.
- 사용자 응답 수집 및 저장
- "유저가 어떤 질문에 어떻게 답했는지를 추적하려면 어딘가 저장이 필요"하다는 판단 하에 "Google Sheet를 간단한 DB처럼 쓰기로" 했습니다. 신규 유저는 새 row로, 기존 유저는 응답을 덮어쓰는 방식으로 데이터를 관리합니다.
- 이후 지속적으로 DB적재하는 방식으로 변경(Update -> Create)
- 사용자 질문 의도 정제 및 성향 분석
- 초기에는 "사용자의 질문 의도 파악을 선행한 후에 역질문을 유도하는 구조"였으나, 이후 "투자 성향 분석을 통해 질문 의도 정제 구조로 변경"했습니다. "자유 텍스트만으로 묻는 것보단, 필터를 제공하고 그 안에서 선택하게 하면 훨씬 더 명확한 질문을 전달할 수 있다. 이로써 사용자는 제어권을 느끼고, 시스템은 신뢰를 얻는다."는 목표 하에 Slack Block Kit를 활용하여 암묵적 성향 추론 시스템을 도입했습니다.
🧱 Workflow 구조
🔹 Sense Stock Slack Trigger
- 설명: 사용자가 Slack에서 @mention 혹은 App 호출을 통해 질문을 입력하는 시작점입니다.
- 역할: 사용자 입력을 받아 분석 흐름을 시작하는 트리거 역할
🔹 Sense Stock - End Workflow
- 설명: 사용자 질문을 분석하고, 성향 기반 정보까지 반영하여 최종 응답을 생성하는 워크플로우입니다.
- 역할: 질문의도 분석(암묵적 성향 분석 시스템)부터 → Slack 응답(HTML File 형태)까지 전체 흐름을 담당
https://cord-ai.tistory.com/232
https://cord-ai.tistory.com/233
Sense Stock, D+10
📅 Sense Stock 개발 일지 (2025-06-24)n8n 기반 뉴스 요약 자동화 시스템 Sense Stock 구축 중 진행한 작업들을 정리합니다.오늘은 사용자 응답 흐름 정리, Slack 연동 개선, 그리고 시장 데이터 관리 방식에
cord-ai.tistory.com
Sense Stock, D+11
📅 Sense Stock 개발 일지 (2025-06-24)n8n 기반 뉴스 요약 자동화 시스템 Sense Stock 구축 중 진행한 작업들을 정리합니다.오늘은 GPT 분석 결과를 Slack으로 전달하는 방식에 대해 작업했습니다. Step 1. 분
cord-ai.tistory.com
🔹 Sense Stock Market Data
- 설명: Finviz에서 S&P500 히트맵 이미지를 자동으로 수집하고 GitHub에 저장합니다. 매일 실행됩니다.
- 역할: 시장 데이터 수집 및 저장 (Schedule, 미국 휴장일은 제외)
🔹 Sense Stock Image Analysis
- 설명: 위에서 저장된 히트맵 이미지를 불러와 이미지 내 텍스트(티커/변동률)를 추출합니다. 매일 실행됩니다.
- 역할: GPT가 Image 분석 후 응답에 활용 가능하게 만듦(Schedule)
- 🚨문제 발생(아래 내용 정리 참조)
🔹 Sense Stock US Holiday
- 설명: 한화투자증권 사이트에서 미국 증시 휴장 정보를 추출하여 GitHub에 저장합니다. 연 1회 실행됩니다.
- 역할: Market Data 수집 시 휴장일을 필터링하는 기준 데이터를 제공합니다.(Schedule)
🧱 [Image Analysis, Market Data, US Holiday] Workflow 구조
https://cord-ai.tistory.com/235
Sense Stock, D+13
📅 Sense Stock 개발 일지 (2025-06-30)n8n 기반 주식 자동화 시스템 Sense Stock 구축 중 진행한 작업들을 정리합니다.오늘은 Docker Rebuilding, Schedule Workflow 생성, Playwright - Python, DB 저장 작업을 진행했습니
cord-ai.tistory.com
개발 과정에서 직면한 문제 및 해결 방안
- GPT 토큰 낭비 및 중복 처리(= S&P500 Image): 매 질문마다 이미지 로딩 및 해석을 반복하는 비효율성을 줄이기 위해 "해석된 내용을 저장하고 GPT가 해당 내용을 참조하도록 구조를 변경"했습니다.
- 데이터 신뢰성 부족: GPT의 응답이 "정확한 데이터를 기반으로 하고 있는지 확인할 수 없다"는 문제에 직면했습니다. 이를 해결하기 위해 Playwright를 활용한 웹 크롤링을 통해 실제 주식 시장 데이터 및 휴장일 데이터를 수집하고 이를 GPT가 참조하도록 구조화했습니다.
- Slack 메시지 가독성 문제: 초기 MVP 구현 시 Slack으로 단순히 Text 형식으로 전달하던 방식이 "가독성이 처참해서" Markdown 형식의 HTML 파일 형태로 전달하도록 변경했습니다.
- Ngrok 도메인 연결 끊김 문제: Ngrok 터미널 종료 시 도메인 연결이 끊기는 문제를 해결하기 위해 Node.js와 PM2를 사용하여 Ngrok을 시스템 백그라운드에서 상시 가동되도록 설정했습니다.
- n8n 컨테이너 환경 부족: Playwright 기반 Python 자동화를 위해 Docker Rebuilding을 통해 Playwright, Python, Chromium 등 필요한 환경을 기존 n8n 컨테이너에 추가했습니다.
- GPT 응답 속도 및 러닝타임 증가: "토큰 비용과 뉴스 기사갯수에 따른 응답속도로 인한 러닝타임 증가" 문제가 있었으나,
현재 구조 변경으로 우선적으로 앞단에서 사용자의 질문 의도 파악 및 성향 파악으로 시작하고, 추가로 최근 Data를 참조할 수 있는 기능도 구현 완료.
이후 사용자가 URL이나 Text, PDF 등 파일을 참조할 수 있는 방법도 고안중 ... - 적절한 선택지 설계의 어려움: 사용자에게 제시할 질문 선택지에 대한 기준 부족 문제에 직면했습니다. 이를 "프롬프트 설계 문제"로 인식하고, "사용자의 질문 맥락 안"에서 투자 성향 분석을 통해 질문 의도를 정제하는 방식으로 접근했습니다.
= Slack Block Kit 활용, 필터/옵션을 선택하도록 유도
최신 업데이트 현황 및 향후 계획
2025년 7월 초 현재, Sense Stock 시스템은 MVP 단계를 넘어 고도화 단계에 들어섰습니다. 가장 최근 업데이트로 이미지 해석 데이터의 재활용 구조가 완성되어, GPT 응답 생성을 더 효율적으로 만들었습니다. (🚨문제 발생)
또한 Slack 상호작용을 통한 투자 성향 분석 (KYC)이 기본 흐름으로 자리잡아, 사용자에게 더 개인화된 질문과 답변을 제공할 수 있게 되었습니다.
이전까지는 AI의 추론에 많이 의존했다면 이제는 사용자가 선택한 명시적 필터 + 수집된 정확한 데이터에 기반해
답변함으로써 사용자는 제어권을 느끼고, 시스템은 신뢰를 얻을 수 있을 것이다.(= 가정, 추후 답변 피드백을 통해 확인 필요)
🚨문제 발생
Sense Stock Image Analysis, Workflow
- S&P500 Image Text 추출, 티커<> 변동률이 매칭이 안됨
- Heatmap은 참조만??
- 더 신뢰할 수 있고 추출하기 쉬운 Format의 데이터??
- 지금 이미지를 어떻게 활용??
주요 학습 및 성과
- 효율적인 자동화 시스템 구축: n8n을 활용하여 복잡한 주식 시장 데이터 수집, 분석, 사용자 응답 과정을 자동화했습니다.
데이터 신뢰성 확보: 웹 크롤링을 통해 실제 데이터를 시스템에 반영하여 AI 응답의 신뢰성을 크게 향상시켰습니다.(개선 필요)- 사용자 중심의 시스템 설계: 자유 텍스트 질문에서 벗어나 사용자에게 선택권을 부여하고 성향을 분석하는 방식으로 개인화된 경험을 제공하고자 했습니다.
- 다양한 기술 스택 활용 경험: Docker, Playwright, Ngrok, PM2 등 다양한 개발 도구 및 기술을 프로젝트에 통합하고 활용하는 경험을 쌓았습니다.
- 지속적인 개선 및 회고: 개발 일지 형식으로 문제점을 기록하고 해결 방안을 모색하는 과정을 통해 반복적인 개선 작업을 수행했습니다.
결론
내가 어떤 도구에 익숙해서 쓴다기보다는, 지금 이 기능을 구현하려면 어떤 게 제일 맞는지 고민하고 찾아가면서 설계하는 흐름을 많이 탔다. 덕분에 n8n에 Python 실행 환경도 붙이고,GPT 프롬프트 설계도 계속 바꿔가면서 사용자의 성향과 질문 의도를 동시에 반영할 수 있는 구조를 고민하게 됐다.
Slack Block Kit도 사실 처음엔 귀찮아 보였는데, 사용자 입장에서 바라봤을때, 더 신뢰감을 주는 느낌을 받았다.(지인이라도 섭외해야하나 ㅋㅋㅋ Data를 좀 취합해보고 싶은데... 그래야 성능을 판단 할 수 있을것 같다)
앞으로도 이 시스템은 조금씩 고도화될 예정이고, 더 많은 외부 데이터나 지표를 붙이고, 구조화된 응답을 더 잘 전달할 수 있도록 계속 다듬어갈 계획이다. 이 문서는 그런 흐름 속에서 지금까지 만들어온 작업들을 한 번 정리해본 기록이자, 다음에 뭘 더 만들지 생각할 수 있게 해주는 기준점 같은 역할을 할 거다.
언젠가 다시 열어봤을 때 “이때는 이런 고민하면서 만들었구나” 싶게 남아 있으면 좋겠다.
'Automation Tool > n8n Project' 카테고리의 다른 글
Sense Stock, D+16 (3) | 2025.07.09 |
---|---|
Sense Stock, D+15 (0) | 2025.07.07 |
Sense Stock, D+14 (0) | 2025.07.01 |
Sense Stock, D+13 (0) | 2025.06.30 |
Sense Stock, D+12 (0) | 2025.06.27 |
댓글