📅 Sense Stock 개발 일지 (2025-06-24)
n8n 기반 뉴스 요약 자동화 시스템 Sense Stock 구축 중 진행한 작업들을 정리합니다.
오늘은 사용자 응답 흐름 정리, Slack 연동 개선, 그리고 시장 데이터 관리 방식에 대해 작업했습니다.
🧱 Workflow 구조
Step 1. 사용자 응답 수집 및 저장
처음엔 응답만 받고 끝냈는데, 유저가 어떤 질문에 어떻게 답했는지를 추적하려면 어딘가 저장이 필요했다.
그래서 Google Sheet를 간단한 DB처럼 쓰기로 했다.
- 신규 유저는 새 row로 추가하고
- 기존 유저는 응답을 덮어쓰는 방식으로 Update 처리까지 구현했다
- 우선적으로 Create(적재)가 아닌 Update방식으로 진행, 차후 DB적재 옵션으로 변경
이 구조만으로도 성향별 분석이나 반복 질문 관리가 쉬워졌다.
당장은 스프레드시트지만, 나중에 Supabase로 전환하면 더 유연하게 쓸 수 있을 듯.
<추가된 Column 설명>
timestamp | selectedYes | selectedNo | analysisStartTime | analysisEndTime |
- timestamp: 질문 요청 시간
- selectedYes: 성향 분석을 위한 질문 5가지 중 Yes 선택
- selectedNo: 성향 분석을 위한 질문 5가지 중 No 선택
- analysisStartTime: 최종 분석 시작
- analysisEndTime: 최종 분석 끝
중간이슈, Slack 비공개 채널 Message 전달
Slack에서 메시지를 받아야 할 DM이나 비공개 채널에서 아무 응답이 없었다.
찾아보니 나와 비슷한 경우의 Issue를 해결한 사람이 있어서 해당내용을 기반으로 진행해봤다.
"I didn’t add message.groups to the Event Subscriptions tab in Slack"
→ Slack의 비공개 채널(DM/프라이빗 그룹) 메시지를 처리하려면
message.channels 이벤트가 아니라 message.groups 이벤트를 따로 등록해야한다.
이벤트 타입 | 설명 | 필요한 권한 |
message.channels | 퍼블릭 채널 메시지 수신 | channels:read |
message.groups | 비공개 채널 메시지 수신 | groups:read |
message.im | DM 메시지 수신 | im:read |
message.mpim | 멀티 DM 수신 | mpim:read |
해결 방법 (Slack 앱 설정)
- Slack 앱 → Event Subscriptions → Subscribe to Bot Events 항목으로 이동
- 아래 항목 중 필요한 걸 추가:
- 퍼블릭 채널만 필요: message.channels
- 비공개 채널 포함: message.groups
- DM까지 필요: message.im
- OAuth & Permissions 탭에서 권한도 함께 추가되어 있어야 함
- groups:history, groups:read, channels:history 등
- 앱을 해당 비공개 채널에 초대해야 함 (/invite @앱이름) - 이미 해당 방식으로 진행중
🔔 추가 팁
- 비공개 채널에 앱을 초대하지 않으면 아무 이벤트도 수신 안 됩니다.
- Event Subscriptions 변경 후에는 앱 Reinstall or 재시작이 필요한 경우도 있어요.
- 수정을 하게되면 안내문(Reinstall)이 뜨는것을 확인할 수 있다.
Step 2. 분석 전에 안내 Message 띄우기
투자 성향 분석 응답을 받은 직후에 분석 결과까지 나오는데 약간의 텀이 생기는데,
이게 잘 되고 있는건지 모를것 같다는 느낌이 들었다.
그래서 “분석 중입니다…” 같은 간단한 메시지를 먼저 보내도록 했다.
Block Kit 같은 구조화된 메시지는 아니지만, 이모지 + 한두 줄 텍스트만으로도 UX는 충분히 개선됐다.
Slack에서 뭔가 일이 진행되고 있다는 신호를 주는 게 꽤 중요하다는 걸 느꼈다.
Step 3. 질문 응답 분류 (Yes / No)
사용자가 여러 질문에 답하는데, 피로감을 주면 귀찮아진다.
그래서 Yes/No로 답할 수 있는 질문들로만 생성하게끔 프롬프트를 작성했다.
이후 Yes와 No로 대답한 질문을 나눠 각각의 Object로 만들었다.
처음엔 n8n Expression으로 분기하려 했는데, 이렇게는 되지않는다고 한다. → Fail
→ Code Node(Parsing) 후 최종 분석을 하는 동안 안내 Message 전달
[
{
"yes_questions": [
"VIX 지수를 통해 현재 시장의 변동성을 평가하는 것이 중요하다고 생각하시나요?",
"VIX 지수가 상승하는 상황에서 추가 투자를 고려하고 있지 않으신가요?",
"투자 정보를 분석하고 활용하기 위한 깊은 이해를 원하신나요?"
],
"no_questions": [
"현재 투자 포트폴리오의 안전성을 우선시하고 계신가요?",
"리스크 관리 전략을 강화할 필요성을 느끼고 계신가요?"
]
}
]
Step 4. 분석 결과 전달 방식 변경 (⏳ 구현 예정)
Slack 메시지 최대 길이가 4,000자 제한이고, 마크다운도 제한이 많아서 가독성이 떨어짐.
- 기본적인 Markdown은 가능하나 큰 제목(#, ##, ... )의 경우는 적용되지 않는다.
그래서 PDF 파일이나 외부 URL로 전달하는 구조로 바꿀 예정.
PDF 생성은 n8n 커뮤니티 노드로 구현할 계획.
https://insight.infograb.net/blog/2025/04/16/n8n-notion-to-pdf-automation/
인포그랩의 n8n 기반 Notion PDF 자동화 후기 \:\ 반복 업무를 줄인 실전 워크플로
백엔드 엔지니어 Andy는 n8n을 사용해 Notion 문서를 PDF로 자동 변환하는 워크플로를 구축했습니다. 그 결과, 반복적인 문서 작업을 자동화해 업무 생산성을 높이고, 문서 품질도 향상했습니다. 이
insight.infograb.net
현재 Slack 최종 응답 결과

가독성이 굉장히 떨어진다. 출력 양식도 손봐야 될것 같다.
Step 5. 시장 데이터 수집 주기 논의 (⏳ 구현 예정)
사용자 질문할 때마다 실시간으로 시장 데이터를 수집하면 효율이 너무 떨어짐.
그래서 Cron Trigger로 하루 1회(예: 오전 9시) 시장 데이터 수집 후 GPT가 최종 응답에 참조할 수 있게 변경 예정.
❓ 다음 단계에서 고민 중인 것들
기능 하나하나를 붙여가면서 동시에 생각하게 되는 것들도 많아졌다. 단순히 "작동한다"보다,
사용자 입장에서 어떤 흐름이 자연스러운가, 시스템 관점에서 어디서 병목이 생기는가 같은 고민들이다.
1. 분석 결과 전달 방식: PDF vs 외부 페이지
Slack 메시지로 결과를 전달하는 방식은 분명 한계가 있다.
- 메시지 길이 제한(4,000자)
- 마크다운 포맷 제약
- 스크롤 압박 등 UX 저하
그래서 최종 응답 전달 방식 전환을 고민 중이다.
- PDF로 정리해서 Slack에 파일로 전달?
- 아니면 외부 URL을 하나 만들어서 웹뷰 페이지로 연결?
PDF는 정적 문서로 가독성이 좋지만, Slack에서 직접 보기 어려울 수도 있다.
반면 외부 URL 방식은 사용자 경험은 유연하지만, 별도 페이지 호스팅 환경이 필요하다는 단점이 있다.
→ n8n에서 PDF 생성 노드를 활용해보는 중
→ 또는 Supabase + 템플릿 HTML 기반 뷰어 페이지를 만드는 것도 고려 중
2. 최종 출력 양식 수정 (프롬프트 구조 변경)
분석 결과 포맷도 다시 손볼 필요가 있다.
지금은 응답 기반 성향 분석 + 시장 요약 정도를 넣고 있지만,
출력 형식이 다소 일관성이 없고, 가독성도 들쭉날쭉하다.
프롬프트 내에서 아예 템플릿을 고정하고, 예시 기반 출력을 유도하는 방식으로 변경할 예정.
분석 결과가 콘텐츠로써도 깔끔하게 보이도록 만드는 게 목표다.
3. MARKET_DATA: 하루 1회 기준 데이터 활용
처음엔 질문이 들어올 때마다 실시간으로 시장 데이터를 크롤링하려고 했는데,
효율이 너무 떨어졌다. 쓸데없이 API 호출을 반복하게 되고, 속도도 느려지고.
그래서 지금은 MARKET_DATA를 하루에 한 번, Cron 트리거로 수집해서 요약해두고,
질문이 들어오면 그때그때 이 요약 데이터를 참조하는 구조로 설계 중이다.
- 데이터 출처: 아직은 실험 중 (Firecrawl, Google Finance 등)
- 데이터 포맷: summary, 주요 이슈, 날짜 등 구조화된 형태로 저장
이 방식이면 응답 속도도 안정되고, 시장 데이터의 일관성도 유지할 수 있다.
4. 사용자 입력 기반 분석 기능 추가 (URL / 텍스트 / PDF)
한 가지 더 욕심나는 기능은 이거다.
질문을 단순히 AI가 던지는 게 아니라, 사용자가 직접 제공한 정보를 기반으로 분석해보면 어떨까?
예를 들어,
- 특정 기사 URL을 붙여넣거나
- 텍스트를 입력하거나
- PDF 파일을 첨부하면
→ 그 내용을 기반으로 요약 + 분석이 가능하다면 훨씬 현실적인 사용 사례에 가깝다고 생각했다.
특히 시장 요약보다도 이 사용자가 직접 제공한 최신 정보가 더 유의미할 수 있기 때문.
이런 기능이 붙으면 단순 분석을 넘어서 “사용자 맞춤형 투자 코멘트”로 발전시킬 수 있다.
* PDF → 텍스트 변환 후 RAG 적용 방향
'Automation Tool > n8n Project' 카테고리의 다른 글
Sense Stock, D+12 (0) | 2025.06.27 |
---|---|
Sense Stock, D+11 (1) | 2025.06.26 |
Sense Stock, D+9 (2) | 2025.06.23 |
Sense Stock 개발 회고, 첫 번째 (0) | 2025.06.20 |
Sense Stock, D+8 (0) | 2025.06.19 |
댓글