1년 41,000건의 대화로 검증한 로컬-클라우드 연결

금융 분석가가 개인 노트북에 저장된 엑셀 워크북을 열고 클라우드 AI 에이전트에게 데이터 요약을 요청하는 장면에서 이 아키텍처의 실효성이 드러난다. Amazon Bedrock AgentCore 기반의 금융 전용 AI 어시스턴트는 출시 후 1년 동안 41,000건 이상의 대화를 처리하며 로컬 데이터 접근의 실무 가능성을 입증했다. 금융 관리자와 분석가들은 엑셀 파일과 로컬 데이터를 직접 가공하는 업무 특성상, 데이터를 클라우드로 일일이 업로드해야 하는 기존 방식에서 심각한 작업 효율 저하와 보안 리스크를 겪어왔다.

Anthropic은 2024년 11월 AI 모델이 외부 데이터 및 도구와 연결되는 방식을 표준화한 오픈 소스 규격인 Model Context Protocol(MCP)을 공개했다. MCP는 AI 애플리케이션인 MCP 호스트가 하나 이상의 MCP 서버와 연결을 설정하는 클라이언트-서버 아키텍처를 따른다. 현재 MCP 프로토콜은 동일 머신 내 로컬 프로세스 간 통신을 위한 stdio(표준 입출력) 방식과 원격 서버 간 통신을 위한 스트리밍 HTTP 전송 방식 두 가지 메커니즘을 지원한다.

하지만 MCP 서버는 사용자의 로컬 PC에 존재하고 MCP 클라이언트는 클라우드에 배치된 환경에서는 기존의 전송 방식만으로 통신할 수 없는 간극이 발생한다. 클라우드 에이전트가 로컬 엑셀 파일에 접근하여 컨텍스트를 읽어오기 위해서는 원격 클라이언트와 로컬 서버 사이를 잇는 중계 장치가 필요하다. 이를 해결하기 위해 WebSocket과 네이티브 메시징을 결합한 MCP 브리지 아키텍처를 통해 데이터 이동 없이 기능만 호출하는 구조를 설계했다.

WebSocket과 네이티브 메시징을 이용한 4단계 데이터 흐름

사용자가 브라우저 확장 프로그램을 통해 메시지를 보내면 AgentCore 런타임과 presigned WebSocket 연결이 생성되며 전체 흐름이 시작된다. 브라우저 사이드 패널은 백그라운드 스크립트를 통해 네이티브 브리지에 서명 요청을 보내고, 브리지는 사용자의 로컬 AWS 자격 증명과 bedrock-agentcore SDK를 사용하여 5분간 유효한 SigV4 서명 `wss://` URL을 생성한다. 이 과정에서 사용자의 자격 증명은 기기 외부로 전송되지 않으며 브라우저 메모리 영역에도 진입하지 않는다.

에이전트가 로컬 도구를 호출해야 하는 시점이 되면 MCP JSON-RPC 요청을 JSON 엔벨로프로 래핑하여 WebSocket을 통해 브라우저 확장 프로그램으로 전송한다. 확장 프로그램은 수신한 메시지를 그대로 네이티브 메시징 프로토콜을 통해 로컬의 MCP 브리지로 릴레이한다. MCP 브리지는 JSON 엔벨로프를 언래핑하여 내부의 JSON-RPC 콘텐츠만 추출한 뒤, stdio를 통해 로컬 머신에서 실행 중인 MCP 서버로 최종 전달한다.

[전체 메시지 흐름도]

MCP 서버가 처리한 응답은 다시 역순의 경로를 통해 에이전트에게 전달된다. MCP 브리지는 MCP 서버의 응답을 다시 JSON 엔벨로프로 래핑하여 네이티브 메시징을 통해 확장 프로그램으로 보내고, 확장 프로그램은 이를 WebSocket으로 AgentCore 런타임에 전달한다. 에이전트는 최종적으로 도구 실행 결과를 소비하여 텍스트 생성을 이어간다. [고수준 아키텍처 다이어그램]에서 보이듯 브라우저 확장 프로그램과 MCP 브리지는 단순한 릴레이 역할을 수행하며 클라우드와 로컬의 통신 단절을 해결한다.

네트워크 권한 없이 로컬 프로세스에 접근하는 네이티브 메시징

브라우저 확장 프로그램이 네트워크 권한 설정이나 사용자 승인 프롬프트 없이 로컬 프로세스와 통신하기 위해 Chrome 및 Firefox가 지원하는 네이티브 메시징(Native Messaging)을 활용한다. 브라우저는 사용자 기기의 특정 경로에 위치한 매니페스트 파일을 참조하여 실행할 바이너리를 결정한다. macOS 환경의 Chrome에서 MCP 브리지를 구동하기 위한 매니페스트 파일 구조는 다음과 같다.

{

"name": "com.example.mcp_bridge",

"description": "MCP Bridge for Chrome",

"path": "/Users/username/mcp-bridge/run_bridge.sh",

"type": "stdio"

}

확장 프로그램의 백그라운드 스크립트는 `chrome.runtime.connectNative("com.example.mcp_bridge")`를 호출하여 로컬 앱을 실행한다. 매니페스트에 지정된 `run_bridge.sh` 셸 스크립트는 파이썬 가상 환경을 활성화하고 브리지 프로세스를 구동하는 역할을 수행한다.

bash
#!/bin/bash
source /Users/username/mcp-bridge/venv/bin/activate
python3 /Users/username/mcp-bridge/bridge.py

네이티브 메시징 호스트 프로세스는 연결이 유지되는 동안 계속 활성화 상태를 유지한다. 모든 메시지는 JSON으로 직렬화되고 UTF-8로 인코딩되며, 리틀 엔디언 바이트 순서의 32비트 메시지 길이 헤더가 앞에 붙는다. 네이티브 호스트가 브라우저로 보내는 메시지의 최대 크기는 1MB로 제한되며, 브라우저가 호스트로 보내는 메시지는 최대 64MiB까지 가능하다. 이러한 제약 조건은 텍스트 기반의 JSON-RPC 메시지를 주고받는 MCP 환경에서 실무적인 병목으로 작용하지 않는다.

FastMCP 프록시와 2-루프 설계로 구현한 처리 성능

MCP 브리지는 Chrome의 네이티브 메시징 프로토콜과 MCP 표준(JSON-RPC 2.0 over stdio) 사이에서 프로토콜 번역기 역할을 수행한다. 처리 효율을 극대화하기 위해 브라우저 요청 수신과 MCP 서버 처리 공정을 분리한 2-루프 설계를 적용했다. 메인 루프는 브라우저로부터 들어오는 메시지에서 4바이트 길이 헤더를 제거하고 JSON 바디를 파싱하여 JSON-RPC 콘텐츠를 입력 큐에 배치한다.

브리지의 생명주기 동안 한 번 실행되어 유지되는 FastMCP 프록시는 입력 큐에서 메시지를 꺼내 MCP 서버의 표준 입력(stdin)으로 전달하고, 서버의 표준 출력(stdout)에서 나온 응답을 다시 출력 큐에 쌓는다. 두 번째 백그라운드 루프는 이 출력 큐를 실시간으로 읽어 다시 JSON 엔벨로프로 래핑하고 길이 헤더를 붙여 브라우저로 내보낸다. 이러한 구조 덕분에 특정 로컬 도구의 응답이 지연되더라도 브리지가 다음 요청을 받는 과정은 중단되지 않는다.

여러 도구 호출이 동시에 발생하는 비동기 환경에서의 데이터 혼선을 막기 위해 `asyncio.Future`를 활용한 상관관계 매칭 기법을 도입했다. 에이전트가 보내는 각 JSON-RPC 요청에는 고유 ID가 부여되며, 브리지는 이를 `(session_id, jsonrpc_id)` 쌍을 키로 하여 메모리에 등록한다. 응답이 WebSocket을 통해 돌아오면 해당 ID와 일치하는 Future를 찾아 결과를 매칭함으로써 여러 도구 호출이 동시에 진행되어도 정확한 응답 처리가 가능하다.

새로운 MCP 서버를 추가할 때 개발자는 파이썬 코드를 수정할 필요 없이 `mcp.json` 설정 파일에 서버 실행 경로와 인자값만 추가하면 된다. 브리지는 설정 파일을 통해 서버를 자동으로 연결하므로, 로컬 환경의 경로 제약이나 서버별 특이 사항이 발생했을 때 즉시 대응하여 에이전트의 능력을 확장할 수 있다. 전체 소스 코드는 GitHub에서 확인할 수 있다.

한국 금융·기업 환경에서의 데이터 거버넌스와 AI 도입

중앙 배포된 AI 에이전트가 로컬 엑셀 워크북을 직접 요약하는 방식은 데이터 원본을 클라우드로 업로드하지 않고 도구 실행 권한만 연결하는 구조다. 금융 분석가는 파일을 서버로 옮기는 번거로움 없이 브라우저에서 웹 페이지를 보며 동시에 내 컴퓨터의 엑셀 수치를 AI가 읽게 만들 수 있다. 데이터 거버넌스 제약이 엄격한 한국 기업 환경에서 데이터 이동 없이 기능만 호출하는 방식은 보안 심의 기간을 단축하고 데이터 유출 가능성을 원천적으로 차단한다.

기업은 AWS 기반의 셀프 호스팅을 통해 모델과 도구 서버를 직접 제어함으로써 외부 SaaS 벤더에 대한 의존도를 낮춘다. 자체 인프라 내에서 모델의 입출력을 관리하므로 내부 보안 정책에 따라 도구 서버의 권한을 세분화하고, 부서나 직급별로 접근 가능한 로컬 도구의 범위를 제한할 수 있다. 이는 인프라 소유권과 모델 가중치, 도구 실행 로직을 기업이 온전히 통제하면서 레거시 시스템과 AI를 안전하게 연결하는 구성이다.

연결 안정성을 위해 URL 만료나 네트워크 중단으로 연결이 끊기면 2초 후 자동으로 새로운 presigned URL을 요청해 재연결하는 메커니즘을 적용했다. 이를 통해 사용자는 URL의 5분 만료 주기를 인지하지 못한 채 끊김 없는 서비스 경험을 유지한다. 결과적으로 데이터 보안을 이유로 클라우드 AI 도입을 망설이는 기업은 데이터를 중앙 서버로 옮기는 대신, 로컬 실행 권한을 가진 브리지 아키텍처를 통해 데이터 접근 권한만 일시적으로 부여하는 방식을 채택하여 보안과 효율성을 동시에 확보해야 한다.