Origin
시작은 부모님이었습니다. 담고 있는 종목이 궁금한데, 검색하면 복잡한 지표와 전문 용어만 나왔습니다. 이 종목 왜 샀어?라는 질문에 답할 수 있는 도구는 없었습니다.
그런데 부모님만의 문제가 아니었습니다. AED에서 퀀트 리서처를 위한 대시보드를 만들면서 — 전문가조차 여러 분석을 직접 종합하는 데 시간을 쓴다는 걸 알았습니다. 하물며 개인투자자는요.
Who is this for?
재현, 36
IT기업 팀장 · 투자 4년차
"출퇴근길에 종목 뉴스는 보는데, 여러 소스를 직접 종합할 시간은 없다. AI가 '왜'를 설명해줬으면."
영호 & 미영, 50대
5개 계좌 · 15+ 종목 · 엑셀 관리
"종목 팔아야 하는지 모르겠어. 누가 쉽게 설명해주면 좋겠는데." 이 프로젝트의 시작점이자 첫 번째 실사용자.
수민, 28
대기업 주니어 · 투자 1년차
"유튜버마다 말이 달라서 누구를 믿어야 할지 모르겠다. 분석 과정 자체를 배우고 싶다."
Research
한국 성인 3명 중 1명이 주식을 합니다. 상당수가 위탁·ISA·연금저축·퇴직연금 등 여러 계좌에 종목을 분산하고 있지만, 한눈에 볼 도구는 없습니다.
실제로 저도 부모님 포트폴리오를 엑셀로 관리하고 있었습니다. 5개 계좌, 15개 이상 종목, 매주 현재가를 수동으로 갱신하고, 수익률을 직접 계산했습니다. #DIV/0! 에러가 나면 수식을 하나하나 고쳤습니다.
수동 갱신
매주 1~2시간 현재가 입력, 수익률 재계산. GOOGLEFINANCE도 20분 지연
수식 깨짐
#DIV/0!, #N/A 에러. 종목 추가할 때마다 VLOOKUP 수정 필요
계좌 분산
위탁·ISA·연금저축·퇴직연금 — 각각 다른 증권사, 통합 뷰 없음
분석 불가
가격은 알지만 "왜 올랐는지", "팔아야 하는지" 판단 도구 없음
| 기존 대안 | 한계 | 주주곰 |
|---|---|---|
| 토스증권 | 한 증권사 계좌만. 타사 + 연금 통합 불가 | OCR로 어떤 증권사든 스크린샷 한 장 |
| 엑셀/구글시트 | 수동 갱신, 수식 에러, 분석 기능 없음 | 자동 시세 + AI 6개 에이전트 분석 |
| 해외 앱 (Portseido 등) | 한국 종목 미지원, 한국어 없음 | 한국·미국 종목 동시 지원 |
| AI 챗봇 (ChatGPT 등) | 일회성 답변, 포트폴리오 맥락 없음 | 내 종목 맥락 + 4인 토론 + Q&A |
Context Shift
AED에서 500개 AI 전략의 성과 대시보드를 설계한 경험이, "같은 주식 데이터를 일반 투자자에게는 어떻게 보여줘야 하는가"라는 질문으로 이어졌습니다.
Hardest Decision
AED에서는 데이터를 최대한 많이 보여주는 것이 가치였습니다. 리서처는 스스로 해석할 능력이 있으니까요. 주주곰에서는 반대로 — 정보를 얼마나 줄이고, 어떤 순서로 보여줄지가 핵심이었습니다. "더 보여주자"는 유혹을 계속 참아야 했습니다.
| AED · 퀀트 리서처 | 주주곰 · 개인투자자 | |
|---|---|---|
| 정보 구조 | 467개 전략 × 10개 지표 테이블 | 점수 하나 + "왜?"를 토론으로 설명 |
| 언어 | Sharpe 1.2, MDD -15%, CAGR 18% | "저평가이지만 부채 높아서 주의" |
| 신뢰 설계 | 리서처가 직접 수치 검증 | 4명이 반박 → 사용자가 다각도 판단 |
| 데이터 입력 | DB에서 자동 로드 | OCR 스크린샷 or 수동 입력 |
| 플랫폼 | 데스크톱 웹 (사내) | 모바일 PWA (홈 화면 추가) |
핵심 판단
계좌 연동 불가, API 무료 티어 한계, LLM 비용 — 세 가지 제약이 이 프로젝트의 모든 판단을 결정했습니다.
토스나 증권사처럼 계좌를 직접 연동하는 건 개인 프로젝트로는 불가능했습니다. API가 없으면, 카메라가 있습니다. 사용자의 증권앱 화면에는 종목명, 수량, 평균 매수가, 수익률 — 모든 정보가 이미 있습니다.
제약
증권사 OpenAPI는 사업자 등록 필요. 개인이 접근할 수 있는 계좌 연동 수단 없음
설계
Google Vision(무료 1,000회/월) → 텍스트 추출 → Claude CLI → 종목 JSON 파싱 → 종목코드 자동 매칭
결과
증권앱 스크린샷 1장 → 포트폴리오 자동 등록. 수동 입력 대비 사용자 진입장벽 대폭 감소
처음에는 하나의 AI에게 종합 분석을 시켰습니다. 기술적 분석은 깊은데 매크로 환경은 한 줄로 끝나거나, 뉴스는 자세하지만 재무제표는 빠지는 문제가 반복됐습니다.
Iteration — 1개 → 3개 → 6개
하나의 프롬프트에 "기술·펀더멘털·매크로·뉴스 전부 분석해줘"라고 넣으면, AI는 앞부분에 집중하고 뒷부분은 대충 넘어갔습니다. 3개로 나눠봤지만 여전히 뉴스와 원자재가 빠졌고, 결국 섹터별로 필요한 관점이 다르다는 걸 깨닫고 6개로 확장했습니다.
기술·가치·리스크는 기본으로 필요하다고 판단
뉴스·원자재·연관종목까지 세분화하면 더 깊은 분석 가능
섹터별 가중치로 불필요한 에이전트는 생략 (에너지→원자재 우선, 기술→펀더멘털 우선)
Agent Architecture — 점진적 확장
Before · 단일 AI
After · 6 전문 에이전트
Supervisor — 종합 점수 + 시그널
6개 에이전트가 분석한 결과가 나왔습니다. 점수도 나오고, 시그널도 나옵니다. 그런데 투자자마다 관점이 다릅니다 — 같은 분석 데이터를 놓고도 결론이 달라야 자연스럽습니다.
Iteration — 프롬프트 3회 수정
첫 버전에서 4명의 페르소나가 비슷한 말만 반복했습니다. "리스크 관리자"도 결국 "조심하세요"로 끝났고, "성장 투자자"와 "가치 투자자"의 차이가 불분명했습니다. 각 페르소나에게 구체적 분석 프레임워크(DCF, 차트 패턴, 섹터 상관관계 등)를 지정하고, 반박 단계에서 "상대방의 어떤 근거가 약한지" 명시하도록 프롬프트를 수정했습니다.
고민
"AI가 답을 주면 끝이지 않나?" → 하나의 답으로는 매매 결심이 안 됐음
설계
4명의 투자 페르소나가 의견 → 교차 반박 → 종합. 토론 후 궁금한 점은 Q&A로 이어서 질문
핵심
AI가 결정을 내리는 게 아니라, 다양한 관점을 보여주고 사용자가 판단
만들 수 있는 기능은 무한하지만, 1인 프로젝트에서 모든 걸 만들 수는 없습니다. "재현이 출퇴근길 5분 안에 쓸 수 있는가?"를 기준으로 기능을 쳐냈습니다.
자동 매매 제외 — 분석 도구와 실행 도구는 다릅니다. 재현은 "판단의 근거"를 원하지, 대신 매매해주는 걸 원하지 않았습니다.
실시간 알림 제외 — 장중 알림은 직장인에게 노이즈. 장 마감 후 요약이 더 가치 있다고 판단했습니다.
소셜 기능 제외 — 커뮤니티·랭킹은 핵심 가치인 분석 깊이와 충돌해 MVP에서 뺐습니다.
Q&A 추가 — 토론 후 "그래서 내 상황에선?"을 물어볼 수 있게. 토론의 가치를 개인 맥락으로 연결합니다.
Scope Decision Framework
"재현이 월요일 아침 출근길에, 지하철에서 5분 안에 쓸 수 있는가?"
종목 검색 → AI 분석 → 토론 → Q&A
OCR 포트폴리오 → 전체 진단 + 리밸런싱
자동 매매 · 장중 알림 · 소셜 · 백테스트
Product
종목 검색부터 AI 분석, 4인 토론, 포트폴리오 진단까지 — 모바일에서 5분 안에.
홈 — 아침 대시보드
아침에 장 열리기 전 — "내 종목들 오늘 어떨까"
종목 상세 — AI 종합 판단
종목 검색 → 종합 판단 + 핵심 요인 3개
토론 — 4인 페르소나 + Q&A
"가치투자 관점에서 저평가, 하지만 리스크 주의"
포트폴리오 — 보유 종목 관리
계좌별 종목 · 수익률 · 평가금액 한눈에
My Research — 분석 이력
리서치한 종목의 시그널 변화 추적
Iteration
이 프로젝트의 첫 번째 사용자는 기획자 본인이었습니다. 매일 모바일로 앱을 쓰면서 발견한 문제를 같은 날 수정하는 사이클을 반복했습니다. 하루 24건의 커밋이 나온 날도 있었습니다 — 그만큼 실사용에서만 보이는 문제가 많았습니다.
"팔란티어가 한국 ETF로 등록됐어요"
OCR로 증권앱을 읽으면 "SOL 팔란티어미국채커버드콜혼합"이라는 한국 ETF가 들어있습니다. 그런데 Claude가 종목명을 "팔란티어"로 축약 → 미국 주식 PLTR로 매칭 → 엉뚱한 종목이 등록됐습니다.
발견
한국 ETF 이름에 미국 종목명 포함 → partial match 함정
원인
OCR 프롬프트가 종목명 축약 허용 + US 매핑이 KR보다 우선
수정
프롬프트에 "절대 축약 금지" + 한국 매칭 우선 순서로 변경
"삼성전자를 검색하면 아무것도 안 나와요"
한국 종목 개요 탭이 완전히 빈 화면. 에러 메시지조차 없었습니다. 원인을 추적하니 3개의 문제가 겹쳐 있었습니다.
원인 1
Finnhub이 한국 종목 미지원 → 데이터 fetch 자체를 스킵하는 코드
원인 2
yfinance 폴백은 API 라우트에만 있고, 프론트 훅에는 적용 안 됨
원인 3
로딩 스켈레톤 없이 조건부 렌더링 → 데이터 없으면 빈 화면
→ 하나의 사용자 피드백이 백엔드 폴백 + 프론트 훅 + UI 스켈레톤, 3개 레이어 수정으로 이어진 사례
"분석이 5분째 안 끝나요"
한국 종목 분석 시 모든 에이전트가 50점(기본값)으로 나왔습니다. 근본 원인을 추적해보니 "비용 절감을 위한 설계"가 "한국 종목에서의 성능 저하"로 이어진 구조적 문제였습니다.
구조
Claude CLI subprocess × 6 에이전트. 프로세스 시작에만 15초 오버헤드
한국 종목 악화
Finnhub 데이터 없음 → data_quality 0.0 → LLM 자기검증 발동 → Claude 3번 호출
개선
에이전트 data_assembly에 yfinance 폴백 + Sonnet 모델 + 타임아웃 조정
→ "무료로 만들자"는 판단이 어떤 트레이드오프를 만드는지 체감한 사례. API 전환 시기를 판단하는 근거가 됨
"한국 ETF 가격이 0원이에요"
0040X0(SOL 팔란티어미국채커버드콜혼합)처럼 알파벳이 포함된 한국 종목 코드를
미국 종목으로 인식 → 가격 0, 수익률 없음, 통화 USD로 표시되는 문제.
원인
isKoreanTicker 정규식이 ^\d6$ — 숫자 6자리만 허용하여 알파벳 포함 코드 누락
수정
^\d[\dA-Z]5$로 변경 — 숫자로 시작 + 숫자/대문자 5자리
영향 범위
백엔드 3개 + 프론트 2개, 총 5개 파일 수정. 가격 조회·통화 표시·UI 전체에 영향
→ 정규식 한 줄이 서비스 전체 5개 레이어에 퍼져있던 사례. 한국 종목 코드 체계를 제대로 이해하지 못한 초기 설계의 부채
Feedback Cycle — 하루 단위
PM이 직접 사용자이기 때문에, 발견→수정→검증이 같은 날 안에 완료
기술 선택
모든 기술 선택에는 "왜?"가 있습니다.
Claude Code (Max 구독)
Claude Max를 구독하고 있었습니다. API는 건당 과금이지만, Claude Code는 구독 안에서 사용 가능합니다. 사이드 프로젝트에서 LLM 추가 비용 없이 품질을 유지하는 판단이었습니다.
SSE (Server-Sent Events)
분석 6개 + 토론 9개 = 15번의 LLM 호출. 전부 끝날 때까지 기다리면 사용자는 떠납니다. 에이전트가 하나씩 완료될 때마다 실시간으로 화면에 나타나게 했습니다.
Google Vision → Claude CLI 파싱
OCR은 Google Vision 무료 1,000회/월로 충분합니다. 텍스트 추출 후 Claude CLI가 종목명·수량·가격을 JSON으로 파싱합니다.
PWA (모바일 홈 화면)
투자 정보는 이동 중에 확인합니다. React Native는 오버킬이었고, PWA면 홈 화면에 추가해서 앱처럼 쓸 수 있습니다.
3단 폴백 체인 (모든 데이터 경로)
무료 API는 언제든 끊깁니다. Finnhub은 분당 60회 제한, BeatTheCap은 첫 로딩에 60초. "안 될 때"를 먼저 설계하고, 사용자에게는 "그냥 되네"로 보이게 만들었습니다.
적용: 시세 · 차트 · 재무 · 뉴스 · 검색 · 배치 시세 — 6개 전체 경로
Cost Structure
| 항목 | 현재 | 확장 시 |
|---|---|---|
| LLM | Claude Max $100/월 | API 전환 ~$0.02/분석 |
| 데이터 | Finnhub 무료 + yfinance | 유료 티어 or 자체 수집 |
| OCR | Google Vision 무료 1K/월 | 유료 or on-device |
| DB | Supabase 무료 | $25/월 Pro |
| 프론트 | Vercel 무료 | $20/월 Pro |
| 합계 | $100/월 | ~$145/월 + 종량 |
→ "지금은 무료, 잘 되면 업그레이드" — 사이드 프로젝트의 비용 전략
Architecture
Vercel
React 19 + Vite · PWA · 자동 배포
FastAPI (로컬 Mac + ngrok)
6 에이전트 · Claude CLI · SSE 스트리밍
Supabase
PostgreSQL
Claude CLI
Sonnet · subprocess
Finnhub + yfinance
3단 폴백
Google Vision
무료 1K/월
→ ngrok은 개발/테스트용. 사용자 확대 시 Railway($5/월)로 전환 예정
현재 상태
6
전문 에이전트
기술·펀더멘털·매크로·뉴스·원자재·연관종목
~45s
분석 1건 소요
15 LLM call, SSE 실시간 표시
3단
데이터 폴백 체인
Finnhub → yfinance → Graceful Empty
KR+US
한국·미국 종목
KRX 전체 + NASDAQ/NYSE
Next Steps
실사용자 검증
부모님 + 직장인 3~5명 대상 사용성 테스트. "토론 결과를 보고 실제로 판단에 도움이 됐는지" 측정. 이 결과에 따라 다음 우선순위가 결정됨
아침 브리핑
재현의 "출근길 5분" 시나리오. 보유 종목 변동 요약 + 오늘 주목할 이슈 자동 생성
Claude API 전환
동시 호출 제한 해소 + 응답 속도 개선. 사용자 늘어나면 전환 예정
Key Learnings
1. 제약이 가장 좋은
기획서다
계좌 연동이 안 되니까 OCR이 나왔고, API 비용을 쓸 수 없으니까 CLI 활용과 폴백 체인이 나왔습니다. "할 수 없는 것"을 정의하면 "해야 할 것"이 선명해집니다.
2. AI의 답이 아니라
관점을 설계해야 한다
하나의 AI가 "매수"라고 하면 사용자는 그냥 따릅니다. 4명이 서로 다른 이유로 논쟁하면, 사용자가 스스로 판단합니다. AI 서비스의 가치는 "답"이 아니라 "판단할 수 있는 구조"에 있었습니다.
3. 사용자가 바뀌면
모든 설계가 바뀐다
AED에서 퀀트 리서처에게 "Sharpe 1.2"라고 보여주던 것을, 주주곰에서는 "위험 대비 수익이 괜찮다"로 번역해야 했습니다. 같은 데이터, 완전히 다른 기획. 직접 겪어봐야 알 수 있었습니다.
4. 다음에 다르게 할 것
사용자 검증을 더 일찍 했어야 합니다. 기능을 다 만든 뒤에 피드백을 받으니 방향 수정 비용이 컸습니다. 다음에는 핵심 흐름 하나(검색→분석→토론)를 먼저 만들고, 실사용자 반응을 본 뒤 확장하겠습니다.