MyStock에 투자 데이터를 쌓고 JSON으로 내보내 LLM에 분석을 맡기는 이유는 단순히 시장 동향을 알아보기 위해서가 아니다. 내가 실제로 보유한 상품과 거래 내역을 기준으로, 현재 시장에 어떻게 대응하고 앞으로 어떤 매매 전략을 검토해야 할지 판단 근거를 얻고 싶었다.
처음에는 계좌 정보에 시장 지표, ETF 구성종목, 가격과 거래량, 투자자별 수급까지 담으면 충분할 것으로 생각했다. ChatGPT를 비롯한 LLM에 JSON을 전달하니 그럴듯한 분석 보고서가 나왔다. 미국 증시와 국내 산업 동향, 금리와 환율, 반도체 업황도 제법 자세하게 설명했다. 그런데 보고서를 읽고 나면 항상 같은 질문이 남았다.
그래서 나보고 어쩌라고...?
시장 상황은 알려주지만, 그 시장에서 내 계좌가 어떤 위치에 있는지, 지금의 보유 판단을 유지할 근거는 무엇인지, 어떤 변화를 확인한 뒤 매매를 고민해야 하는지는 부족했다. 그래서 이번 작업의 출발점은 JSON 파일의 크기나 필드 수가 아니라 투자 분석의 목적 자체를 다시 정리하는 것이었다.
시장 분석 중심 JSON의 한계
기존 JSON이 쓸모없었던 것은 아니다. 시장을 폭넓게 바라보는 데는 도움이 됐다. 문제는 이미 보유하고 있는 상품과 분석 결과가 충분히 연결되지 않는다는 점이었다. 반도체 업황이 좋다는 설명을 듣더라도, 내 계좌에서 반도체 ETF의 비중이 얼마나 되는지 모른다면 추가 매수를 판단하기 어렵다.
같은 기업이 여러 ETF에 중복 편입돼 있다면 겉으로 보이는 ETF 종류보다 실제 투자 노출이 훨씬 집중됐을 수 있다. 시장 전망이 긍정적이더라도 가격 흐름이나 외국인·기관 수급이 반대로 움직인다면 그 이유를 따로 확인해야 한다. 시장이 어떻다는 설명과 내 매매 판단에 쓸 수 있는 근거는 다른 것이었다.
계좌 기반 투자 분석으로 방향 전환
그래서 ChatGPT와 분석 결과를 복기하면서 출발점을 시장 전체에서 내 계좌로 옮기기로 했다. 어떤 ETF가 평가이익에 기여하는지, 손실과 위험은 어디에 집중됐는지, 보유 ETF를 구성하는 기업과 산업이 최근 어떻게 달라졌는지를 먼저 봐야 했다. 그 위에 외부 시장 상황을 연결하는 순서가 맞았다.
원하는 것은 AI가 매수 또는 매도를 대신 결정하는 보고서가 아니다. 보유 유지, 추가 매수, 일부 축소, 다른 상품으로의 전환을 고민할 때 찬성 근거와 반대 근거를 비교할 수 있는 분석이다. 목표 비중이나 매매 계획을 전달하지 않았는데 AI가 이를 임의로 만들어서도 안 된다. 최종 판단은 내가 하되, 그 전에 확인할 사실과 불확실성을 충분히 드러내는 방향으로 바꿨다.
ETF 전체 구성종목과 중복 노출 개선
구현에서 먼저 손본 것은 ETF 구성종목 정보였다. 기존 JSON은 일부 ETF에서 상위 종목 위주로 정보를 전달하고 나머지는 요약해 버려, 개별 기업을 끝까지 추적하거나 서로 다른 ETF에 반복 편입된 종목을 분석하는 데 한계가 있었다.
Codex를 통해 전체 구성종목을 전달할 수 있도록 구조를 보완하고, 종목 식별 정보도 정리했다. 개선된 JSON에는 보유 ETF 11개의 구성 정보 797개 행이 반영됐고, 포트폴리오 관점에서 식별 가능한 노출 704개를 확인할 수 있었다. 단순히 704개의 독립 기업을 뜻하는 숫자는 아니지만, 여러 ETF가 같은 기업과 산업에 얼마나 겹쳐 있는지 살펴볼 수 있는 토대가 됐다.
최근 구성 변화도 포함했다. 현재 비중만 보는 대신 1주일과 30일 사이 편입·편출과 비중 변화가 어떻게 나타났는지 확인하도록 했다. 액티브 ETF뿐 아니라 패시브 ETF도 관측 대상으로 삼았다. 다만 비중 변화가 모두 운용사의 의도적인 매매를 뜻하는 것은 아니므로, 관측 사실과 그 원인에 대한 추정은 구분해야 했다.
Investor Flow 수급 최신성과 분석 기준
ETF 구성 정보가 좋아져도 수급 데이터가 오래됐다면 실제 판단에는 오히려 방해가 된다. 개선된 JSON으로 다시 테스트하던 중 보유 ETF 11개 중 8개의 수급 최신일이 10월 2일, 나머지 3개가 10월 7일에 머물러 있다는 사실을 발견했다. 당시 확인해야 할 기준일은 10월 8일이었다.
원인은 JSON 출력 자체보다 수집 경로에 있었다. 보유종목 전체의 갱신 경로와 API 요청 종료일 계산을 수정한 뒤 실제 데이터를 다시 확인했고, 11개 ETF 모두 10월 8일까지 수급 관측이 반영됐다. 이 수정 과정에서 발생한 Git 작업 관리 문제는 별도의 AI 코딩 사건일지에 기록했으므로 여기서는 결과만 다룬다.
수급은 최근 5일·20일·60일을 함께 보도록 했지만 숫자가 크다는 이유만으로 매수세가 강화됐다고 해석하지 않도록 주의했다. 기간이 서로 겹치는 누적 수급을 비교할 때는 관측 구간과 기준일을 확인해야 한다. 최신성과 계산 기준을 갖춘 뒤에야 가격 변화와 수급을 같은 시점에서 살펴볼 수 있었다.
LLM 분석을 위한 JSON 계약
데이터를 보강하는 것만으로는 충분하지 않았다. 내가 원하는 분석의 출발점과 범위도 JSON 안에서 설명할 필요가 있었다. ChatGPT의 MyStock Skill이 있을 때만 제대로 해석되는 파일이라면 Claude, Gemini 등 다른 LLM에 전달할 때 다시 긴 설명을 붙여야 한다.
그래서 JSON 자체에 analysis_request를 두어 계좌 분석을 우선하고, 수급·ETF 구성 변화·중복 노출·외부 시장 정보를 연결하도록 했다. 실제 관측값과 추정, 데이터가 부족해 판단을 보류해야 하는 부분을 구분하도록 한 것도 같은 이유다. 다만 특정 매매 결론을 강요하거나 모델마다 다른 답변을 없애기 위한 지침으로 만들지는 않았다.
실제 LLM 투자 분석 비교
개선된 JSON을 Grok, Claude, Gemini, Google AI Mode, Perplexity에 전달해 분석했고, ChatGPT에서는 MyStock Skill 0.0.10을 적용한 결과도 확인했다. 같은 계좌 데이터로 무엇을 짚는지 비교하고 싶었기 때문이다.
분석이 완전히 동일하게 나오지는 않았다. 어떤 모델은 계좌의 수익 집중과 위험 노출을 먼저 짚었고, 다른 모델은 ETF 구성 변화나 산업 자료 조사에 더 많은 비중을 뒀다. 일부 결과에서는 숫자 해석과 분석 범위의 차이도 확인됐다. 하지만 적어도 이전보다 현재 계좌의 보유상품과 시장 상황을 연결해 판단할 재료가 늘어났다는 점은 분명했다.
실행 시간도 달랐다. Perplexity가 폭넓은 외부 자료를 조사하는 데 약 40분이 걸렸고, ChatGPT와 Skill을 이용한 분석은 약 6분이었다. 한 번씩 수행한 결과이므로 어느 모델이 일반적으로 빠르거나 우수하다는 의미는 아니다. 이번 비교에서 중요했던 것은 모델 순위가 아니라 JSON이 의도한 분석에 실제로 활용되는지였다.
MyStock 데이터와 투자 판단의 책임 경계
여러 결과를 비교한 끝에 LLM별로 분석 강조점이 다르다는 이유만으로 JSON을 계속 수정하지는 않기로 했다. MyStock은 계좌와 거래 내역, ETF 구성종목, 가격과 수급을 정확한 시점과 기준으로 제공한다. LLM은 그 데이터를 바탕으로 시장 자료를 조사하고 기회와 위험을 해석한다. 그리고 보유·매수·매도의 최종 결정은 내가 한다.
이번 JSON 품질 개선은 단순히 시장 분석 보고서를 더 길게 만드는 작업이 아니었다. “시장은 지금 이렇다”에서 멈추던 분석을 “그렇다면 내 계좌에서는 무엇을 확인하고 어떻게 대응을 판단할 것인가”로 옮기기 위한 작업이었다. 개선된 결과를 보니 적어도 처음의 “그래서 나보고 어쩌라고?”라는 질문에 답할 수 있는 근거가 이전보다 훨씬 많아졌다.
