핀테크AI 에이전트모바일

스톡챗 — 토스증권 API AI 거래 앱

자연어로 시세·자산을 조회하고 매매를 제안받는 챗 기반 증권 앱, 규칙 기반 자동매매까지

토스·카카오페이가 증권 앱 시장을 양분한 이유는 '간소화'였습니다. 그 다음은 챗이라고 봤습니다. 토스증권 Open API로 실계좌를 연결해, 대화로 조회하고 제안받고, 자연어로 등록한 전략을 스케줄러가 실행하는 앱을 17일 동안 혼자 만들었습니다.

역할1인 개발
기간2026.07.07 – 07.23
13,757줄
TS 파일 162개
37개
REST 엔드포인트
14개
백엔드 모듈
10개
AI 함수 도구

Long story short

"삼성전자 10주 사줘", "내 포트폴리오 분석해줘" 같은 말에 GPT가 function calling으로 시세 조회·종목 검색·포트폴리오 집계 같은 실제 도구를 실행해 답합니다. 추측이 아니라 실데이터로 답하는 구조입니다. 다만 AI는 주문을 절대 직접 체결하지 않습니다. propose_order로 제안만 하고, 5분 TTL의 1회용 proposalId를 발급해 사용자가 확인 버튼을 눌러야 실제 주문이 나갑니다. 환각 한 번이 금전 사고가 되는 구조를 처음부터 막았습니다.

돈은 float으로 계산하지 않았습니다. 전 구간에서 금액을 문자열 decimal로 주고받고 연산은 decimal.js로만. 원화·달러는 통화별로 분리 보관하고 총자산 표시처럼 환산이 필요한 지점에서만 환율을 적용합니다.

토스 OAuth는 클라이언트당 유효 토큰이 1개라 재발급이 겹치면 서로의 토큰을 죽입니다. Redis 공유 캐싱 + 분산락으로 재발급 구간만 직렬화했고, Redis Lua 토큰 버킷으로 API 그룹별 레이트리밋을 걸었습니다. 자동매매의 리스크 게이트(일손실·유니버스·주문·포지션·예산 상한)는 IO 없는 순수 함수로 떼어내 단위 테스트로 검증했습니다.

한 일

제품 컨셉백엔드 설계AI 함수 호출 설계자동매매 엔진모바일 앱보안·인증

도구

nestjstypescriptpostgresqlprismaredisbullmqdecimal.jszodopenaireact nativeexpotanstack queryvitest

AI 챗 — 제안은 하되 체결은 하지 않는다

도구 10종을 정의하고 GPT가 직접 호출합니다. 토큰과 도구 실행 상태는 SSE로 실시간 스트리밍.

  • 시세·차트·종목 검색·포트폴리오 집계·주문 미리보기 등 함수 도구 10종
  • propose_order → 5분 TTL · 1회용 proposalId → 사용자 확인 시에만 체결
  • 성공·실패 모두 감사 로그 기록
  • zod 스키마를 packages/shared에 두어 프론트·백 타입의 단일 진실 공급원

자동매매 엔진과 리스크 게이트

"낙폭 과대 2차전지를 분할 매수" 같은 전략을 등록하면 BullMQ가 주기 실행합니다.

  • interval / cron 전략을 BullMQ repeatable job으로 스케줄링
  • 실행 전 리스크 게이트: 일손실 한도 · 종목별 상한 · 1회 주문 상한 · 예산 한도
  • 리스크 판정은 순수 함수로 분리해 단위 테스트
  • API 시크릿 AES 암호화, JWT 액세스·리프레시 회전, 리프레시 토큰은 해시 저장

트러블슈팅

로그에 아무것도 안 남는 문제들이 가장 오래 걸렸습니다.

  • 자산이 0원으로 표시 — 같은 응답 안에서 필드마다 구조가 달랐음 ({krw,usd} vs {amount:{krw,usd}}). 두 형태 모두 수용
  • iOS에서만 즉시 종료 — UI 스레드 워클릿 완료 콜백이 JS 함수를 재귀 호출. New Architecture에서 크래시 → 표준 반복 API로 교체
  • 세션을 찾을 수 없음 — 서버 {sessionId} vs 공유 타입 {id}. 서버 응답을 공유 스키마에 맞춤

지금 협업 제안을 받고 있어요

Seoul, KR에 있습니다. 어디 있는 팀이든 환영해요.

소셜에서 만나요

이호성AI Product Builder