상장사 분석 웹앱을 짓고, 그 데이터로 움직이는 AI 투자팀을 키우다.

정말 미리 썻어야 한데.. 이제야 씁니다. 게을러 빠져서

상장사 분석 웹앱을 짓고, 그 데이터로 움직이는 AI 투자팀을 키운 기록

📝 한줄 요약

비개발자가 AI와 함께 두 가지를 만들었다 — ① 상장사 재무를 한눈에 보는 분석 웹 대시보드, ② 디스코드에서 룰 기반으로 모의 자동매매를 돌리는 AI 투자팀. 그리고 이 둘을 "웹앱이 만든 데이터를 봇이 먹는" 구조로 잇고 있다.

바쁘시면 이것만 읽어도 돼요:

  • 만든 것 1 — 분석 웹앱: 종목 코드만 넣으면 DART 공시에서 재무를 끌어와 분기 시계열·밸류에이션·AI 해설까지 보여준다.

  • 만든 것 2 — AI 투자팀: 디스코드 봇이 조건검색으로 종목을 찾고 → 기술적 신호(RCI·MACD·박스권)로 판정 → 모의로 사고팔고 → 그 결과를 스스로 복기한다.

  • 핵심 철학: 가격을 예측하는 AI가 아니라, 룰 기반 신호 + 자기 복기로 점점 나아지는 시스템. "넓게 사서 데이터로 검증 → 좁히기."

  • 제일 큰 깨달음: 자동매매의 진짜 자산은 매매가 아니라 "왜 사서 왜 팔았는지"의 완결 기록(원장)이다. 이게 없으면 개선이 '감'이 된다.

  • 둘을 잇다: 웹앱이 가공한 재무·외인 데이터를 봇의 판단 근거로 끌어오는 게 다음 단계다.

🎯 이런 분들께 도움돼요

  • 주식 분석을 매번 수동으로 하다 지친 분

  • "AI 자동매매"가 궁금하지만 블랙박스 예측 모델은 못 믿겠는

  • 비개발자인데 API·자동화로 나만의 도구를 만들고 싶은 분

  • 데이터와 자동화를 안전하게(모의로) 실험하고 싶은 분

😫 문제 상황 (Before)

투자를 하다 보면 두 가지가 늘 번거로웠다.

  1. 분석이 수동이다 — 종목 하나 보려면 증권사 앱, 공시 사이트, 뉴스를 오가며 재무를 손으로 짜맞춰야 했다. 분기별 추세나 밸류에이션은 매번 다시 계산이다.

  2. 매매가 감에 의존한다 — "왜 샀더라? 왜 팔았더라?"가 기록으로 안 남으니, 잘했는지 못했는지 복기가 안 됐다. 다음에 더 나아질 근거가 없었다.

그래서 두 도구가 필요했다 — 재무를 자동으로 정리해주는 분석판, 그리고 규칙대로 사고팔되 그 이유를 기록하는 자동매매 시스템. 단, AI가 "오를 거예요"라고 점치는 블랙박스는 싫었다. 규칙이 명확하고, 결과를 검증할 수 있는 구조여야 했다.

🛠️ 사용한 도구

  • AI 코딩 파트너(Hermes 기반,n8n,cursor): 코드 작성·디버깅·검증을 한 단계씩 함께

  • 분석 웹앱: Node.js + 서버리스 배포 + 차트 라이브러리, DART 공시 API

  • 투자팀 봇: 증권사 모의투자 API(2곳) + 디스코드 + 파이썬 (외부 의존 최소)

  • 데이터 소스: DART(공시·재무), 증권사 API(시세·조건검색·수급), 공개 시장 데이터

  • 🔒 전부 모의투자: 실제 돈이 아니라 모의 계좌로 검증. 실전 키는 분리·격리.

🔧 작업 과정 — 1부: 분석 웹앱

📊 1막 — "종목 코드만 넣으면 재무가 보이게"

첫 목표는 단순했다. 종목 코드 하나로 그 회사의 재무를 한눈에. 공시(DART) API에서 재무제표를 끌어와, 손익·재무상태·현금흐름을 차트로 그렸다.

여기서 진짜 일은 데이터 가공의 함정과 싸우는 거였다. 공시 재무는 생각보다 까다로웠다:

  • 분기 데이터가 누적값이다 — 1분기·반기·3분기·연간이 차곡차곡 쌓인 숫자라, 단일 분기 값을 보려면 빼야 한다.

  • 같은 계정인데 이름이 다르다 — "영업활동 현금흐름"(띄어쓰기)과 "영업활동현금흐름"(붙임)이 보고서마다 달라서, 모르고 짜면 데이터가 통째로 빈다.

  • 순이익 계정명이 보고서마다 네 가지 — 당기/분기/반기순이익이 섞여서, 고정 이름으로 찾으면 특정 분기부터 값이 끊긴다.

이런 함정을 하나씩 실측으로 잡으며, 분기 재무 시계열을 안정적으로 뽑는 로직을 완성했다.

아래는 완성 웹이다.

한국사이트 스크린샷
한국 모바일 앱 스크린샷
다양한 색상과 그래프가 있는 대시보드
다양한 차트와 그래프를 보여주는 화면
다양한 그래프를 보여주는 그래프
한국어 웹사이트 스크린샷
한국사이트 스크린샷
한국판 게임 스크린샷
다양한 숫자가 표시된 대시보드 스크린샷
한국어 텍스트가 있는 검은 화면
한국 비즈니스 대시보드의 스크린샷
한국 금융 대시보드 스크린샷
그래프를 보여주는 한국 웹사이트의 스크린샷
다양한 그래프를 보여주는 그래프 스크린샷
한 나라의 인구 수를 보여주는 그래프
중국 주식시장의 성장을 보여주는 그래프
한국 주식시장 스크린샷
한국 TV 프로그램의 인기를 보여주는 그래프

📈 2막 — 밸류에이션과 AI 해설까지

재무를 그리고 나니 욕심이 났다. 단순 숫자를 넘어:

  • 밸류에이션 지표(PER·PBR·ROE·주당지표)를 공시 데이터로 직접 계산

  • 주가는 공개 시세를 결합

  • AI가 그 회사 재무를 읽고 한국어로 해설해주는 기능

그리고 여러 종목을 나란히 비교하는 기능, 업종별 빠른 비교 프리셋까지 붙였다. 종목 코드만 넣으면 분석 리포트가 나오는 도구가 됐다.

재무 차트를 그리고 나니 욕심이 났다. 단순 숫자 나열을 넘어, "이 회사가 싼가 비싼가, 잘 버는가"를 보여주고 싶었다. 그래서 세 갈래로 키웠다.
① 밸류에이션을 공시 데이터로 직접 계산했다. PER·PBR·ROE에 더해 주당 지표(BPS·EPS·SPS·주당영업현금흐름·주당FCF·DPS)까지 — 외부에서 가져오지 않고 공시의 순이익·자본·매출 + 발행주식수로 직접 산출했다. 외부 지표를 긁어오면 출처가 흐려지고 계산 기준이 제각각이지만, 직접 계산하면 근거가 명확하고 토큰도 안 든다. 적자 종목은 PER을 무한대로 폭발시키지 않게 N/A로 막는 등, 예외도 하나씩 막았다.
② 주가는 공개 시세를 결합했다. 밸류에이션의 분자(주가)만 공개 시세에서 가져와 결합했는데, 여기서 솔직한 한계를 만났다 — 무료 시세는 최근 약 110일치만 주더라. 그래서 PER·PBR 같은 주가 기반 지표는 최근 1~2분기만 채워지고, 과거 밴드는 못 그린다. 반면 주당 지표(공시 기반)는 12분기 전체가 완성된다. "왜 과거 PER이 안 뜨지?"의 답이 바로 이 구조적 한계였고, 위조해서 채우지 않고 없는 건 없다고 정직하게 뒀다.
③ AI가 재무를 읽고 한국어로 해설하게 했다. 차트만 있으면 비개발자는 "그래서 뭐?"가 남는다. 그래서 손익·재무상태·현금흐름·지표를 AI에게 넘겨 친절한 한국어 해설을 생성했다. 단, 매번 AI를 부르면 느리고 비싸서 결과를 일정 시간 캐시해 같은 종목 재조회는 즉답하게 했다.
여기에 여러 종목을 나란히 비교하는 기능(스냅샷 표 + 11개 지표 추이 차트 + 기준점 100 리베이스), 업종별 빠른 비교 프리셋까지 붙였다. 종목 코드만 넣으면 — 분기 재무 시계열, 밸류에이션, AI 해설, 종목 비교까지 한 번에 나오는 도구가 됐다.

🔧 3막 — "기존 걸 부수지 말고, 추가만"

이 과정에서 뼈아픈 교훈이 하나 있었다. 기능을 개선하려다 기존에 잘 되던 화면을 통째로 깨먹은 적이 있다. 재무 데이터 소스를 바꿨더니 차트·표·지표가 전부 빈값이 됐다.

그 뒤로 원칙을 박았다 — 잘 되는 코드는 건드리지 않는다. 새 기능은 새 경로로 추가만 한다. 이게 라이브 서비스를 안정적으로 키우는 핵심이었다.

🔧 작업 과정 — 2부: AI 투자팀

🤖 4막 — 디스코드에 투자팀을 세우다

분석판이 생겼으니, 이제 행동하는 쪽이다. 매번 증권사 앱을 켜는 대신, 평소 쓰는 메신저(디스코드)에서 말 걸면 답하는 봇으로 만들고 싶었다.
① 모의투자 계좌를 연동했다 — 그것도 증권사 2곳. 실제 돈 없이 시세 조회·매수·매도를 API로 한다. 한 곳이 아니라 두 곳을 붙인 건, 같은 전략이라도 증권사마다 체결·데이터가 어떻게 다른지 비교하려고. 두 계좌를 하나의 공통 인터페이스(시세/잔고/매수/매도)로 감싸서, 봇은 "어느 증권사인지" 신경 안 쓰고 명령만 내리면 되게 했다.
② 명령형 + 자연어 하이브리드로 만들었다. 이게 핵심 설계였다:
!시세 !잔고 !매수 같은 빠른 명령은 즉답(5초 내외) — AI를 안 거치니 빠르고, 비용도 0.
그 외 자연어 질문("하이닉스 지금 팔까?")은 AI가 해석해 답변. 이때 실시간 잔고·전략 요약·최근 대화를 함께 넘겨서, 봇이 현재 상황을 알고 답하게 했다.
왜 굳이 둘로 나눴냐면 — 모든 걸 AI로 처리하면 느리고 비싸다. 자주 쓰는 조회는 즉답 명령으로, 판단이 필요한 것만 AI로. 속도와 비용을 둘 다 잡는 구조다.
③ 첨부 파일·이미지까지 읽게 했다. PDF·엑셀·차트 이미지를 던지면 봇이 읽고 해석한다. 여기서 깨달은 핵심이 있다 — 읽기와 해석을 분리한 것. 파일에서 텍스트를 뽑는 건 순수 코드로(토큰 0원), 그 내용을 해석하는 것만 AI가 한다. PDF가 아무리 길어도 읽는 비용은 공짜고, AI는 다 뽑아둔 내용을 볼 때만 불린다. 이미지(차트)는 추출이 안 되니 AI 비전으로 직접 보게 했다.
④ 그리고 API 함정과의 싸움. 자동매매에서 짐작은 곧 손실이라, "되겠지"로 넘기지 않고 실제 응답을 하나씩 찍어보며 확인했다. 실제로 부딪힌 것들:
토큰 발급에 횟수 제한이 있어서, 받아둔 토큰을 캐시하고 만료 직전에만 갱신해야 했다.
계정 이름이 화면에 보이는 것과 API상 실제 값이 달랐다 — 모르고 짜면 인증이 멀쩡한데도 거부된다.
모의 서버 특유의 빈 응답 — 당일 체결 내역이 어떤 조합으로 물어도 비어서, 체결 확인을 잔고 조회로 우회했다.
장 마감 후 주문은 정상적으로 거부된다는 것도, 에러가 아니라 정상 동작임을 응답으로 확인했다.
이런 함정은 문서엔 안 나온다. 실제로 호출해서 응답을 봐야 알 수 있고, 그게 자동매매에서 가장 중요한 습관이었다.

🎯 5막 — 가격을 예측하지 않는다, 신호로 판정한다

핵심 철학이 여기 있다. AI가 "오를 거예요"라고 예측하게 두지 않았다. 예측 모델은 왜 그 답이 나왔는지 설명이 안 되고, 틀려도 고칠 데가 없는 블랙박스다. 대신 명확한 룰 기반 신호로 판정하게 했다 — 각 신호는 "왜 샀는지"가 한 줄로 설명된다.
매수 신호는 한 종류가 아니라 여러 갈래로 두고, 하나라도 걸리면 후보로 본다:
추세 신호 — 이동평균 정배열 + 과매수 아님(추세를 타되 꼭지는 피함)
저점 반등 신호 — 여러 기간의 순위지표(RCI 9·13·18·26선)가 동시에 바닥(-80 이하)에 모임. 과매도가 여러 시간축에서 겹칠 때가 반등 타점
추세 초입 신호 — 골든크로스(단기가 장기를 막 돌파) + 장기 정배열 + 과열 아님
수급 확인 — 외국인 순매수 동향으로 "돈이 실제로 들어오는지" 거름
여기서 중요한 건, 여러 신호를 OR로 넓게 잡되 둘 이상 겹치면 "강력 추천"으로 표시한 것. 처음부터 "이 신호 AND 저 신호"로 좁히면 후보가 거의 안 나온다. 그래서 넓게 사두고, 나중에 어떤 조합이 진짜 강했는지를 데이터로 가려 좁히는 방향을 택했다. (이게 6막 복기로 이어진다.)
전략도 하나가 아니라 여러 개를 동시에 굴렸다:
박스권 전략 — 횡보장에서 밴드 하단 매수 / 상단 매도. 단, "상단 닿으면 무조건 매도"가 아니라 돌파하면 트레일링(고점 따라가다 꺾이면 매도)으로 더 먹게
신호 전략 — 위 신호들로 추세 초입을 잡아 매수
일일 전략 — 대형주 워치리스트 기반 보수형
이걸 각자 다른 계좌 상태로 따로 굴렸다. 같은 자금에 섞으면 어느 전략이 번 건지 구분이 안 되니까. A/B로 나란히 돌려 데이터로 우열을 가리는 게 목적이었다.
그리고 손실 관리에 한 가지 원칙을 넣었다 — 자동 손절매를 빼고 "물타기 승인제"로. 손실이 기준에 닿으면 봇이 자동으로 팔지 않고, 나에게 "추가 매수해서 평단을 낮출까요?"를 제안한다. 내가 승인하면 물타기, 거절하면 그때 손절. 비가역적인 행동(매도)은 사람이 최종 결정하게 한 거다.

📒 6막 — 진짜 자산은 매매가 아니라 '복기 기록'

자동매매를 돌리다 가장 중요한 걸 깨달았다. 진짜 자산은 사고파는 행위가 아니라, "어떤 신호로 사서 → 얼마에 나와서 → 며칠 보유 → 실제 몇 % 벌었나"의 완결 기록(원장)이다.
처음엔 이게 없었다. 매도하면 포지션을 그냥 지웠다. 그러니 "이 전략이 좋은가?"를 물어도 답할 데이터가 없었다. 개선이 전부 '감'이 됐다. 그래서 토대부터 다시 깔았다:
① 거래 원장. 매도로 거래가 닫힐 때마다 진입 맥락(어떤 신호였는지·진입 시점 지표)부터 실현 손익·보유일까지 한 줄로 남긴다. 이게 모든 복기의 원천이다.
② 복기 엔진. 그 원장을 읽어 승률·기대값(거래당 평균 손익률)·신호별 성적을 계산한다. "강력 추천(신호 2개 겹친 것)"이 정말 일반 신호보다 나은지도 따로 집계한다. 처음엔 OR로 넓게 샀으니, 여기서 데이터가 "AND로 좁힐 가치가 있는지"를 증명한다.
③ 시장 대비 초과수익(α). 이게 핵심이다. 절대수익만 보면 착시가 생긴다 — 4% 벌어도 그 기간 시장이 6% 올랐으면 사실 진 거다. 그래서 진입~청산 구간의 코스피 수익률을 빼서, "상승장 덕인지 신호 덕인지"를 가려낸다. 신호의 진짜 실력은 α로 봐야 한다.
④ 리스크·효율 축. 최대낙폭(고점 대비 얼마나 까였나), 최대 연속 손실, 보유일당 효율까지. 수익만이 아니라 "얼마나 위태롭게 벌었나"도 본다.
⑤ 그리고 정직함. 표본이 부족하면 판단을 보류한다. 거래 몇 건으로 "이 전략이 좋다"고 단정하지 않는다. 표본이 충분히 쌓이면(예: 30건+) 그제서야 인샘플/아웃샘플로 나눠 "과거에만 맞춘 착시(과적합)"인지 검증하는 장치도 넣었다.
이게 "넓게 사서 데이터로 검증 → 좋은 신호만 좁히기"라는 철학의 엔진이다. 처음부터 완벽한 전략을 짜는 게 아니라, 넓게 시도하고 기록으로 골라낸다. 그리고 파라미터를 바꿀 때도 봇이 자동으로 바꾸지 않고 "이렇게 바꾸면 과거 거래에 더 나았을 것"을 제안만 한다 — 적용은 내가 승인한 뒤.

🔁 7막 — 두 도구를 잇다: 웹앱이 투자팀을 먹인다

지금까지 둘은 따로 자랐다. 그런데 이을 지점이 보였다.

투자팀은 100% 기술적 신호(가격·거래량)로만 판단한다. 재무 건전성 게이트가 없다. 그래서 RCI가 바닥이고 외인이 들어와도, 영업현금흐름 적자인 부실 종목을 거를 장치가 없다.

반면 분석 웹앱은 그 재무 데이터를 이미 정확히 가공한다. → 웹앱이 만든 FCF·영업현금흐름·재무지표를 봇의 진입 근거로 끌어오는 것. "차트도 좋고 재무도 좋은" 종목만 사게.

여기서도 같은 원칙을 적용한다 — 매수 로직을 바로 바꾸지 않고, 먼저 매수 시점 재무를 원장에 기록해두고, 복기로 "재무 좋은 종목이 정말 더 벌었나"를 데이터로 증명한 뒤 게이트로 만든다. (이건 시작 단계라 차근차근.)

✅ 결과 (After)

Before vs After

항목

Before

After

종목 분석

앱·공시·뉴스 수동 취합

코드 입력 → 재무·밸류·AI해설 자동

매매 근거

감, 기록 없음

룰 기반 신호 + 완결 원장

복기

불가

승률·기대값·신호별·시장초과수익 자동

전략 검증

하나만, 비교 불가

3전략 병행, 데이터로 우열 비교

위험

실전에서 실험

전부 모의투자로 안전 검증

결과물

  • 상장사 재무 분석 웹 대시보드 (분기 시계열·밸류에이션·AI 해설·종목 비교)

  • 디스코드 AI 투자팀 (모의 자동매매 3전략 + 자연어 + 첨부 분석)

  • 자가개선 복기 엔진 (원장 + 승률/기대값/α + walk-forward 검증)

  • 매일 종목 정보를 자동 수집하는 시장조사 파이프라인

💬 이 과정에서 배운 AI 활용 팁

효과적이었던 것

  1. 예측 말고 규칙: AI에게 "오를까?"를 묻는 대신, 명확한 신호 룰을 만들고 AI는 구현·검증을 맡겼다. 블랙박스보다 믿을 수 있다.

  2. 실측 또 실측: API 응답, 데이터 가공, 매매 결과 — 전부 "되겠지" 대신 실제 값을 찍어 확인했다. 자동매매에서 짐작은 곧 손실이다.

  3. 모의로 충분히: 실제 돈을 넣기 전에 모의로 며칠씩 돌려 로그를 쌓았다. 안전하게 실험하고 데이터로 판단.

이렇게 하면 안 돼요

  1. 잘 되는 코드 건드리기: 라이브 서비스에서 "개선"하려다 멀쩡한 기능을 깬다. 새 기능은 추가만.

  2. 기록 없이 자동매매: 원장 없는 자동매매는 복기 불가 = 개선 불가. 매매보다 기록이 먼저다.

  3. 표본 적은데 단정: 거래 몇 건으로 "이 전략이 좋다"고 결론내면 착시다. 부족하면 보류가 정직함.

🌍 다른 업무에 적용한다면?

  • 규칙 기반 자동화 일반: "신호 → 판정 → 실행 → 기록 → 복기" 루프는 매매뿐 아니라 어떤 규칙 업무에도 맞는다.

  • 데이터 대시보드: 공개 API에서 데이터를 끌어와 자동 시각화하는 패턴은 어떤 분야든 적용된다.

  • A/B 비교 운영: 여러 전략을 병행하며 데이터로 우열을 가리는 방식은 마케팅·운영 실험에도 그대로.

🚀 앞으로의 계획

  • 웹앱 데이터 → 투자팀 진입 근거 연동 (재무 건전성 게이트) — 시작 단계

  • 복기 데이터가 쌓이면 좋은 신호만 좁히기 (넓게 사서 검증 → 압축)

  • 시장 국면에 따라 전략을 자동 전환하는 구조 실험

5
2개의 답글

뉴스레터 무료 구독