본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 24. 00:39

MCP 프로토콜을 통한 금융 시장 데이터 통합의 기술적 실습

요약

Anthropic의 MCP(Model Context Protocol)를 활용하여 AI 모델이 실시간 금융 시장 데이터에 접근하도록 구현하는 기술적 실습을 다룹니다. 기존의 복잡한 글루 코드 방식 대신 MCP를 통해 표준화된 방식으로 외부 도구를 호출하고 데이터를 통합하는 과정을 설명합니다.

핵심 포인트

  • MCP를 통해 모델과 외부 데이터 도구 간의 표준화된 연결 가능
  • Python 스크립트 기반의 수동 데이터 전달 방식 대비 유지보수 용이성 증대
  • iTick MCP 서버를 활용한 실시간 주가 및 기술적 지표 데이터 호출
  • 모델이 자연어 질문을 통해 직접 시장 데이터를 조회하고 분석하는 워크플로우 구축

사실 이렇습니다. 저는 시장을 모니터링하는 데 꽤 많은 시간을 소비하지만, 아시다시피 주식 티커(Ticker)를 계속 쳐다보는 것은 매우 지치는 일입니다. 시간이 지나면 눈이 그냥 흐릿해지죠. 그래서 저는 'AI가 이 일을 도와줄 수 없을까?'라는 생각을 하기 시작했습니다. 저 대신 매매를 해달라는 것이 아니라, 단지 제가 "오늘 Apple 주가 어때?"라고 물었을 때, 저를 속이기 위해 임의의 주가를 지어내는 것이 아니라 실제로 실제 시장 데이터(Market Data)를 찾아보기를 바란 것입니다.

처음 제 아이디어는 간단했습니다. 직접 Python 스크립트를 작성하고, 무료 시장 데이터 API를 호출한 다음, 데이터를 프롬프트(Prompt) 형식으로 만들어 GPT에 전달하는 것이었습니다. 반나절 동안 씨름하며 작동하게 만들었지만, 모델을 바꿀 때마다 함수 호출(Function Calling) 형식을 다시 조정해야 했습니다. 게다가 이런 종류의 "글루 코드(Glue Code)"는 작성하면 할수록 더 지저분해졌고, 결국 유지보수조차 하고 싶지 않게 되었습니다. 나중에 퀀트 트레이딩(Quantitative Trading)을 하는 친구가 제게 말했습니다. "MCP를 써봐. iTick에 바로 사용할 수 있는 게 준비되어 있어. 바퀴를 다시 발명하려고 하지 마."

이전에는 MCP (Model Context Protocol)에 대해 들어본 적만 있었습니다. 대규모 모델이 외부 도구를 호출할 수 있도록 하는 Anthropic의 프로토콜이라는 것만 알고 있었지, 실제로 사용해 본 적은 없었습니다. 그래서 저는 주말 동안 이 과정을 진지하게 살펴보고, 비슷한 니즈를 가진 다른 사람들을 위한 참고 자료로 기록하기로 결심했습니다.

하나: 내가 직면한 핵심 문제

단순하게 말하자면, 제가 원했던 것은 정말 명확했습니다. 대규모 모델이 실제 시장 데이터를 "볼" 수 있게 하는 것이었습니다. 데이터를 수동으로 복사해서 붙여넣거나, 수많은 글루 코드를 작성하는 것이 아니라, "지금 테슬라 얼마야?" 또는 "일봉 차트에서 지난 20일간의 볼린저 밴드(Bollinger Bands)를 보여줘"라고 자연스럽게 물으면, 모델이 데이터를 가져오고, 지표를 계산하고, 그 결과를 평이한 언어로 말해주는 것입니다.

이것은 두 단계로 나뉩니다. 첫째, 모델이 나의 의도를 이해하는 것. 둘째, 모델이 데이터에 접근할 수 있는 것입니다. 첫 번째 단계는 현대의 대규모 모델들이 할 수 있는 일입니다. 두 번째 단계는 외부 도구가 필요합니다. MCP는 바로 그 문제를 해결합니다. MCP는 "데이터 가져오기"를 모델이 MCP 채널을 통해 직접 호출할 수 있는 표준화된 도구로 추상화합니다.

iTick이 하는 일은 자신들의 시장 데이터와 기술적 지표 (technical indicators)를 로컬에서 실행되는 MCP 서비스로 래핑(wrap)하는 것입니다. 포트를 노출할 필요도, 데이터 형식에 대해 걱정할 필요도 없습니다.

2: 시작하기 — 생각보다 신비롭지 않습니다

제 환경을 설명하겠습니다: M1 MacBook, 이미 설치된 Node.js 18, Python 3.11입니다. 특별할 것 없습니다. iTick의 MCP 서버는 npm 패키지이며, 명령어 하나로 실행할 수 있습니다.

설정 파일 (Configuration file)

저는 다음과 같이 itick-mcp.json을 생성했습니다:

{
  "apiKey": "put-your-key-here",
  "defaultMarket": "US"
...

그저 프로젝트 루트에 이 파일을 두었습니다. 거창한 작업은 아닙니다.

서비스 시작하기

터미널에서:

npx @itick/mcp-server --config itick-mcp.json

엔터를 누른 후, UI는 나타나지 않습니다. 그저 시작 성공 로그가 뜨고, 조용히 대기합니다. 솔직히 처음 이 모습을 봤을 때는 멈춘 게 아닌가 싶어 약간 긴장했습니다. 나중에 알고 보니 stdio 통신을 사용하기 때문에, 클라이언트가 연결되기를 기다리고 있는 상태였던 것입니다.

3: Python 클라이언트로 테스트하기

곧바로 Claude에 연결하고 싶지는 않았습니다. 설정을 잘못해서 빨간색 에러 메시지들을 잔뜩 보게 될까 봐 걱정됐거든요. 그래서 먼저 실제로 데이터를 받아올 수 있는지 확인하기 위해 최소한의 Python 스크립트를 작성했습니다.

MCP Python SDK 설치:

pip install mcp

그 다음 test.py를 작성합니다:

import asyncio
from mcp import Client
from mcp.client.stdio import stdio_client
...

실행하면 출력 결과는 다음과 비슷하게 나타납니다:

Available tools: ['get_realtime_quote', 'get_historical_bars', 'get_technical_indicator', 'search_instrument', 'get_financials']
=== AAPL Real-time Quote ===
{
...

그 순간 저는 진심으로 흥분했습니다. API 문서를 찾아보지도 않았고, 기본적으로 매개변수 이름(symbol, interval, indicators 등 꽤 표준적인 것들)을 추측해서 넣었을 뿐인데, 단 한 번에 작동했습니다! 볼린저 밴드 (Bollinger Bands)의 상단/중단/하단 값이 위치 설명과 함께 반환되었고, 덕분에 pandas를 사용하여 직접 계산해야 하는 수고를 덜 수 있었습니다.

4: 진짜 재미 — Claude Desktop에 연결하기

커맨드 라인(command line)에서 작동시키는 것은 시작에 불과했습니다. MCP를 사용하기 위한 진정한 장소는 거대 모델(large model)이 이러한 도구들을 직접 호출하게 하는 것입니다. 저는 Claude Desktop을 정기적으로 사용하며, 이는 MCP를 네이티브로 지원합니다.

설정은 간단합니다. Claude Desktop의 설정 파일(Mac의 경우: ~/Library/Application Support/Claude/claude_desktop_config.json)을 찾아 다음을 추가하세요:

{
  "mcpServers": {
    "itick": {
...

저장하고 Claude Desktop을 재시작한 뒤, 채팅창에 다음과 같이 질문해 보았습니다:

테슬라(Tesla)의 현재 주가는 얼마인가요? 그리고 일봉 차트의 볼린저 밴드(Bollinger Bands) 상태는 어떤가요?

Claude는 몇 초간 침묵하더니(get_realtime_quoteget_technical_indicator를 호출했을 것으로 추측됩니다), 현재 가격과 볼린저 밴드의 상단/중단/하단 값을 답변으로 내놓았습니다. 그리고 현재 가격이 밴드의 상단 영역에 있으며 저항선에 가깝다고 알려주었습니다. 그다음 저는 이렇게 물었습니다:

NVIDIA는 어떤가요? 동일한 지표로 비교해 봅시다.

Claude는 두 종목에 대해 각각 데이터를 가져온 뒤, 가격과 볼린저 밴드 위치를 비교한 표를 제공했습니다. 저는 채팅창을 한 번도 벗어나지 않았고, 시장 수치를 따로 복사할 필요도 없었습니다.

솔직히 말해서, 이 경험은 제가 꿈꾸던 "실제로 일을 해내는 AI 어시스턴트"의 이상향에 매우 근접해 있었습니다. AI는 주가를 지어내지 않았습니다. 모든 데이터 포인트가 iTick의 API로부터 실시간으로 신선하게 전달되었기 때문에 지어낼 기회조차 없었습니다.

5: 제가 겪은 함정 (주의 사항)

어느 날 저녁, 한 번의 대화에서 여러 종목에 대해 묻고 싶어서 멀티 턴(multi-turn) 대화 테스트 스크립트를 작성해 보았습니다. 그런데 도구를 두 번째로 호출했을 때 "세션 만료(session expired)" 에러가 발생했습니다. 한참 동안 디버깅을 한 끝에, 이것이 제 자체적인 로직 문제였다는 것을 깨달았습니다. async with 스코프(scope)를 너무 좁게 설정하는 바람에 첫 번째 호출 이후 연결이 닫혀버린 것이었습니다.

해결 방법은 간단했습니다. 연결을 유지하기 위해 모든 도구 호출(tool calls)을 동일한 async with 블록 안에 넣는 것이었습니다. iTick의 문서에도 이 내용이 언급되어 있었지만, 제가 충분히 주의 깊게 읽지 않아 30분을 허비했습니다. 만약 지속적인 상호작용 앱을 구축하고 있다면, 클라이언트 라이프사이클(client lifecycle)을 적절히 관리해야 한다는 점을 기억하세요.

6: 이 서비스는 진정 누구를 위한 것인가?

일주일간 사용해 본 결과, 제 의견은 이렇습니다. iTick의 MCP는 블랙박스(black box)를 판매하는 것이 아니라, 매우 깔끔한 "표준 데이터 통합 모듈(standard data integration module)"을 제공하고 있습니다. 장점은 다음과 같습니다:

  • 배포 비용이 최소화됩니다. 명령어 하나면 실행됩니다. 별도의 서비스가 필요하지 않습니다.
  • 깔끔한 구조화된 JSON을 반환합니다. 추가 처리하거나 데이터베이스에 저장하기 쉽습니다.
  • 내장된 기술적 지표(technical indicators)가 즉시 작동합니다. 직접 계산 로직을 작성할 필요가 없습니다(특히 볼린저 밴드(Bollinger Bands)의 경우, 예전에는 수동으로 계산할 때 항상 예외 케이스(edge cases)에서 실수를 하곤 했습니다).
  • 보안이 잘 처리되어 있습니다. API 키는 설정 파일(config file)에 저장되며, 클라이언트 코드에는 절대 나타나지 않습니다.

하지만 솔직하게 말씀드려야 할 한계점들도 있습니다:

  • 고빈도 매매(high-frequency trading)를 위해 초저지연(ultra-low latency)이 필요하다면, 이 방식은 적합하지 않습니다. 로컬 stdio 통신을 사용하므로, 근본적으로 그러한 용도로 설계되지 않았습니다.
  • 매우 생소한 지표가 필요하다면, 내장되어 있지 않을 수 있습니다. 이 경우 직접 계산해야 합니다.
  • 서버 업데이트가 상당히 빈번합니다. 이번 주에도 버전 업데이트(version bump)가 있었지만, 기존 인터페이스가 깨지지는 않았습니다.

그렇다면 누구에게 가장 적합할까요? 잠시 생각해보겠습니다:

  1. 자연어를 사용하여 차트를 빠르게 확인하고 기술적 분석을 수행하고자 하는 개인 투자자 또는 트레이딩 애호가.
  2. 데이터 통합 작업을 외주로 돌리고 전략 로직에 집중하고 싶은 퀀트 스크립트(quantitative scripts) 작성 개발자.
  3. 저처럼 AI 어시스턴트를 "무장"시켜서 단순한 채팅 장난감이 아닌 실제 도구로 바꾸고 싶은 사람들.

마치며

이 모든 설정을 거치며 제가 얻은 가장 큰 깨달음은 이것입니다. 우리는 항상 거대 모델(Large Models)이 "금융을 이해하지 못한다"고 불평해 왔지만, 사실 모델이 똑똑하지 않아서가 아니라 실제 시장 데이터(Market Data)를 볼 수 없었기 때문입니다. MCP는 그 창문을 열어줍니다. 그리고 iTick은 그 창문을 아주 매끄럽게 열어준 도구였습니다. 저는 프레임을 어떻게 설치해야 할지 고민할 필요 없이, 그저 다가가서 창문을 밀어 열기만 하면 됩니다.

저처럼 "글루 코드 (Glue Code)" 때문에 고통받았거나, 당신의 AI 어시스턴트가 실제로 유용하게 쓰이길 원한다면, 10분만 투자해서 이것을 시도해 보세요. 질문 하나를 던졌을 때 결과가 바로 나오는 그 느낌은 정말 중독적입니다.

github
docs

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0