오늘은 두 가지 큰 작업을 했다. HubWise의 핵심 기능인 편향 분석 시스템을 완성하고, 서비스를 지속 가능하게 만들 수익화 기반을 닦았다.
지난주에 3단계 매매일지 폼을 만들면서 편향 태그(FOMO, 손실 회피, 과신 등)와 계획 준수 점수를 수집하기 시작했다. 데이터를 모으는 건 시작이고, 의미 있게 보여주는 게 진짜 가치다.
오늘 /journal/analysis 페이지를 만들었다.
KPI 3개
편향 태그 분포
막대 그래프로 어떤 편향이 얼마나 자주 나타났는지 시각화했다. "나는 FOMO가 많은가, 아니면 과신이 문제인가" — 숫자로 보면 인식이 달라진다.
종목별 편향 패턴
같은 종목을 반복 거래할 때 어떤 편향이 나타나는지 표로 정리했다. 삼성전자에서만 반복적으로 FOMO가 뜬다면, 그 종목에 대한 나의 감정적 반응이 있다는 신호다.
월별 계획 매매 준수율
6개월 추이를 한 눈에 볼 수 있다. "나는 갈수록 계획적으로 매매하고 있는가" — 이 질문에 데이터로 답할 수 있게 됐다.
백엔드는 FastAPI /journals/bias-stats 엔드포인트로 Python에서 직접 집계한다. Supabase 집계 함수보다 유연하게 5가지 통계를 한 번에 처리할 수 있었다.
종목 상세 페이지에 실적 발표 일정이 없으면 투자 판단 정보가 부족하다. yfinance 기반으로 한국/미국 종목 모두 실적 발표일을 가져오는 API를 만들었다.
추가로 유저들의 편향 태그 데이터를 종목별로 집계해서 "이 종목에 투자한 사람들의 평균 심리"를 보여주는 종목 심리 지수도 구현했다. 아직 데이터가 쌓이는 중이라 실제로 의미 있으려면 시간이 필요하다.
솔직히 말하면, 서비스를 계속 발전시키려면 운영 비용이 필요하다. Railway, Supabase, Vercel이 모두 유료 플랜이고, KIS API도 실서버에서 쓰려면 제약이 있다.
Google AdSense 심사를 신청하기로 했다.
심사 통과를 위해 세 가지를 준비했다.
About 페이지 신설
서비스의 목적, 미션, 금융 면책 조항을 담은 /about 페이지를 만들었다. AdSense는 사이트에 실제 사람이 운영하는 서비스라는 증거를 원한다.
sitemap.xml + robots.txt
검색 엔진과 AdSense 크롤러가 페이지를 제대로 인식하도록 Next.js MetadataRoute로 동적 sitemap을 생성했다.
교육 콘텐츠 20개로 확장
기존 6개에서 20개로 늘렸다. 초급부터 고급까지 투자 행동, 기술적 분석, 심리학 기반 콘텐츠들이다. 콘텐츠가 풍부한 사이트가 심사 통과율이 높다.
수익화와 함께 분석도 시작해야 한다. 어떤 페이지가 실제로 방문되는지, 어느 기능이 쓰이는지 알아야 다음 스텝을 결정할 수 있다.
layout.tsx에 GA4 스크립트를 심었다. afterInteractive 전략으로 메인 렌더링을 막지 않는다.
내일부터 실제 데이터가 쌓이기 시작한다. 처음에는 대부분이 나 혼자 방문하는 데이터겠지만.
CLAUDE.md를 238줄에서 135줄로 슬림화했다. 핵심 규칙만 남기고 상세 내용은 .claude/docs/ 하위 파일로 분리했다. 세션 시작 때마다 로드되는 컨텍스트를 줄여서 Claude의 실제 작업에 더 많은 토큰을 쓸 수 있게 됐다.
이 글의 소감을 Threads에서 확인하세요.
스레드에서 보기