IT, MIND & CAREER / EDITORIAL DESK

흐름을 읽고, 다음 선택을 설계합니다.

기술의 변화와 사람의 판단, 그리고 오래 가는 커리어를 한 장의 리포트로 정리합니다.

EDITOR'S SELECTION

지금, 먼저 읽을 리포트

변화의 신호를 읽는 네 편의 이야기

THE ARCHIVE

최근 리포트

IT 최신동향 조회 27

Model Context Protocol(MCP): 무상태 요청·응답 코어 기반 서버리스 게이트웨이 아키텍처 설계

Model Context Protocol(MCP): 무상태 요청·응답 코어 기반 서버리스 게이트웨이 아키텍처 설계
EDITORIAL BRIEF

이 글에서 먼저 가져갈 세 가지

AI 에이전트 인프라의 사실상 표준인 MCP가 상태 유지형 세션 결합도를 벗어던지고 무상태 분산 아키텍처로 진화한 핵심 배경과 엔터프라이즈 도입 가이드를 정리합니다.

  1. 01
    세션 결합도(Session Affinity) 제거와 클라우드 네이티브 스케일아웃

    초기 핸드셰이크와 세션 ID 강제를 폐지하고 모든 요청을 `_meta` 기반 자체 완결형으로 구성하여 서버리스 및 쿠버네티스 환경에서 수평 확장을 달성합니다. 본문 1절, 2절

  2. 02
    L7 헤더 기반 라우팅과 인프라 수준 거버넌스 하드닝

    `Mcp-Method` 및 `Mcp-Name` 헤더 규격화를 통해 무거운 JSON-RPC 본문을 열어보지 않고도 게이트웨이 레벨에서 즉시 레이트리밋과 인가를 통제합니다. 본문 2절, 4절

  3. 03
    MRTR(다중 왕복 요청)과 서명 토큰을 통한 상태 외부화

    지속적인 TCP/SSE 스트림 없이도 일회용 암호화 트랜잭션 토큰을 통해 중간 사용자 승인과 추가 입력을 안전하게 처리하는 재진입 설계를 확립합니다. 본문 3절, 5절


1절. 세션 지옥(Session Affinity Hell)의 종말: Stateful MCP가 초래했던 클라우드 인프라의 병목

대규모 언어 모델(LLM)과 자율 AI 에이전트가 엔터프라이즈 데이터베이스, 내부 마이크로서비스 API, 그리고 개발 도구와 상호작용하기 위한 개방형 인터페이스로 자리 잡은 Model Context Protocol(MCP)은 지난 1년 반 동안 개발자 생태계에 폭발적인 표준화를 이끌어냈습니다. 그러나 2024년 말 초기 스펙 발표 이후 엔터프라이즈 프로덕션 환경에서 대규모 동시 사용자 트래픽을 감당해 온 클라우드 플랫폼 엔지니어들은 지속적으로 심각한 인프라 병목과 운영상 장애를 마주해야 했습니다. 그 근본적인 원인은 프로토콜 최하단에 깊게 각인되어 있던 상태 유지형(Stateful) 세션 아키텍처였습니다.

기존 MCP 규격에서는 클라이언트가 특정 MCP 서버와 통신을 개시할 때 우선적으로 클라이언트 버전과 도구 기능을 협상하는 initialize 요청을 먼저 보내야 했습니다. 서버는 이 요청을 처리한 후 고유한 Mcp-Session-Id를 발급하고, 이후 해당 세션 동안 유지되는 모든 도구 호출(tools/call)과 리소스 조회(resources/read)에서 이 세션 ID를 검증했습니다.

이 설계는 개발자가 로컬 PC의 데스크탑 앱(Claude Desktop 등)에서 표준 입출력(stdio)이나 로컬 단일 프로세스 HTTP/SSE를 통해 에이전트를 구동할 때는 매우 단순하고 직관적이었습니다. 서버 프로세스가 메모리에 현재 세션의 상태, 활성화된 도구 목록, 인증 토큰을 영속적으로 쥐고 있을 수 있었기 때문입니다. 하지만 수만 명의 직원이 사내 멀티테넌트 AI 에이전트 게이트웨이에 동시 접속하는 클라우드 분산 환경에서는 이 '세션 유지' 조건이 재앙에 가까운 인프라 복잡성을 야기했습니다.

Stateful MCP에서 스티키 세션이 서버 장애 뒤 404 Session Not Found로 이어지는 흐름
Stateful MCP 세션 장애 흐름 · 선택하면 확대

위 구조에서 볼 수 있듯이, 로드밸런서는 특정 클라이언트의 세션이 만료될 때까지 모든 후속 HTTP 요청을 우선적으로 최초 핸드셰이크를 수행했던 그 파드로만 보내야 하는 스티키 세션(Sticky Session, 세션 선호도)을 강제해야 했습니다. 이로 인해 프로덕션 인프라에서는 다음과 같은 네 가지 구조적 파탄이 일어났습니다:

  1. 서버리스(Serverless) 및 엣지(Edge) 인프라 도입의 원천적 불가능: AWS Lambda, Cloudflare Workers, Google Cloud Run과 같은 현대적 서버리스 환경은 호출 단위로 컨테이너가 기동되고 소멸하는 무상태 라이프사이클을 전제로 합니다. 언제든지 새로운 샌드박스로 라우팅될 수 있는 환경에서는 initialize로 맺어진 로컬 세션 ID를 신뢰할 수 없었기에, 엔터프라이즈 기업들은 값비싼 24/7 전용 컨테이너 클러스터를 상시 유지해야만 했습니다.
  2. 쿠버네티스 HPA(Horizontal Pod Autoscaler)의 부하 불균형과 핫스팟: 트래픽이 폭증하여 파드 수를 10개에서 50개로 스케일아웃하더라도, 기존 활성 사용자들의 대규모 세션은 여전히 초기 10개 파드에 고착되어 있었습니다. 신규 파드들은 유휴 상태로 놀고 있는 반면, 기존 파드들은 메모리 고갈과 CPU 쓰로틀링으로 다운되는 전형적인 '세션 핫스팟' 장애가 일어났습니다.
  3. 무중단 롤링 배포 및 카나리 배포의 극심한 지연: 새로운 도구나 버그 수정을 배포할 때, 기존 파드를 종료하려면 활성 세션이 모두 자연 종료될 때까지 대기하는 세션 드레이닝(Session Draining) 타임아웃을 수십 분씩 설정해야 했습니다. 이는 빠른 배포 주기를 가로막는 치명적인 병목이었습니다.
  4. 분산 세션 동기화로 인한 레이턴시 급증: 세션 유실을 막기 위해 모든 세션 컨텍스트를 Redis 클러스터에 중앙 집중화하려는 시도도 이어졌습니다. 그러나 이는 에이전트가 도구를 한 번 호출할 때마다 매번 Redis 네트워크 왕복(Round-trip) 지연을 유발했고, 동시 다발적인 세션 락(Lock) 경합으로 인해 전체 파이프라인의 응답 지연(P99 Latency)이 수백 밀리초 단위로 악화되는 대가를 치러야 했습니다.

결국 AI 에이전트 기술이 진정한 엔터프라이즈 분산 인프라로 도약하기 위해서는, 프로토콜 자체가 세션의 족쇄를 끊어내고 웹의 근본 원리인 완전한 무상태성으로 회귀해야 한다는 공감대가 엔지니어링 커뮤니티 전반에 형성되었습니다.


2절. MCP 2026-07-28 스펙의 핵심: _meta 컨텍스트와 무상태 요청·응답 코어의 작동 기전

이러한 전 세계 엔지니어링 현장의 강력한 요구를 수용하여, Agentic AI Foundation과 Anthropic은 2026년 7월 28일 Model Context Protocol의 근본적인 인프라 패러다임을 전환하는 'MCP 2026-07-28' 정식 표준 규격을 발표했습니다. 이 표준의 핵심은 장기 지속 세션과 양방향 스트림에 얽매여 있던 프로토콜 코어를 완전한 무상태(Stateless) 단일 요청·응답 모델로 전면 재설계한 것입니다. 자세한 표준 명세는 Model Context Protocol Specification (2026-07-28) 공식 문서에서 확인할 수 있습니다.

새로운 규격에서는 클라이언트와 서버 간의 필수적인 initialize 세션 핸드셰이크와 Mcp-Session-Id 의존성이 완전히 제거되었습니다. 대신 통신에 참여하는 모든 인입 요청은 자체 완결형(Self-contained) 구조로 전환되어, 프로토콜 버전과 클라이언트 기능 명세가 개별 요청의 _meta 객체에 포함되어 전달됩니다.

{
  "jsonrpc": "2.0",
  "id": "req-20260917-8841",
  "method": "tools/call",
  "params": {
    "name": "query_database_read_replica",
    "arguments": {
      "query": "SELECT user_id, status FROM account_ledger WHERE balance_cents < 0",
      "limit": 50
    },
    "_meta": {
      "mcpVersion": "2026-07-28",
      "client": {
        "name": "enterprise-agent-runtime",
        "version": "4.2.0"
      },
      "capabilities": {
        "roots": { "listChanged": false },
        "sampling": {}
      },
      "securityContext": {
        "principalId": "user_sec_9941a",
        "tenantId": "org_enterprise_kr",
        "issuedAt": 1789603200
      }
    }
  }
}

위의 페이로드 예시에서 확인할 수 있듯이, 서버는 사전에 핸드셰이크를 거치지 않고도 인입된 단일 JSON-RPC 요청의 _meta 블록만을 파싱하여 클라이언트의 지원 프로토콜 버전, 가용 기능(Capabilities), 그리고 보안 테넌트 컨텍스트를 즉시 검증할 수 있습니다. 클라이언트와 서버 간에 사전 교환된 상태가 존재하지 않으므로, 요청이 1번 파드로 들어가든 1,000번 서버리스 인스턴스로 들어가든 상관없이 동일한 결정론적(Deterministic) 실행 결과를 보장합니다.

또한, 이번 규격 업데이트에서 인프라 엔지니어링 관점의 가장 혁신적인 변화는 HTTP 헤더 레벨의 프로토콜 메타데이터 노출 규격화입니다:

  • Mcp-Method: 호출하려는 MCP 메서드 명칭을 명시합니다 (예: tools/call, resources/read, tools/list).
  • Mcp-Name: 호출 대상 도구(Tool) 또는 리소스(Resource)의 고유 식별자를 헤더에 노출합니다 (예: querydatabaseread_replica).
  • Mcp-Version: 클라이언트가 준수하는 MCP 스펙 버전을 명시합니다 (2026-07-28).

_meta 객체 내부의 세부 필드 규격 역시 엔터프라이즈 환경에 맞추어 엄격하게 정형화되었습니다:
1. mcpVersion: 클라이언트 런타임이 채택한 정확한 프로토콜 스펙 날짜를 명시하여, 하위 호환성 핸들러가 적절한 직렬화 파이프라인을 선택하도록 보장합니다.
2. client: 에이전트 프레임워크의 식별 명칭과 세부 버전을 포함하여, 운영 관제 시스템에서 클라이언트 SDK별 호출량과 에러 분포를 추적할 수 있는 원격 측정(Telemetry) 기반을 제공합니다.
3. capabilities: 클라이언트가 지원하는 기능 집합(roots, sampling 등)을 선언합니다. 과거에는 양방향 핸드셰이크를 통해 주고받던 능력치 목록을 단일 요청 시점에 즉시 선언(Self-declaration)함으로써 불필요한 사전 협상 왕복을 완전히 제거했습니다.
4. securityContext: 제로 트러스트(Zero Trust) 환경을 위한 테넌트 식별자, 호출 주체(Principal) 정보, 발급 시각을 포함하여, 서버리스 인스턴스가 독립적인 권한 인가를 집행할 수 있는 컨텍스트를 제공합니다.

이 헤더 규격 덕분에 API 게이트웨이(Kong, Envoy, AWS API Gateway 등)는 거대한 JSON 본문을 메모리에 버퍼링하고 파싱하는 값비싼 역직렬화 연산 없이도, HTTP L7 헤더 라우팅 규칙만으로 특정 위험 도구(executeshell, writedatabase)에 대한 접근을 차단하거나 파드 그룹별로 트래픽을 지능적으로 분기(Routing)할 수 있게 되었습니다.

다음은 Envoy 게이트웨이에서 Mcp-MethodMcp-Name 헤더를 기반으로 읽기 전용 도구와 위험 쓰기 도구를 서로 다른 보안 클러스터로 무상태 분기하는 실제 설정 예시입니다:

# envoy-mcp-routing-filter.yaml

routes:
  - match:
      prefix: "/mcp/v1"
      headers:
        - name: "Mcp-Method"
          exact_match: "tools/call"
        - name: "Mcp-Name"
          prefix_match: "write_"
    route:
      cluster: mcp_isolated_privileged_cluster
      timeout: 10s
      rate_limits:
        - actions:
            - request_headers:
                header_name: "X-Tenant-Id"
                descriptor_key: "tenant"

  - match:
      prefix: "/mcp/v1"
      headers:
        - name: "Mcp-Method"
          exact_match: "tools/call"
    route:
      cluster: mcp_serverless_readonly_cluster
      timeout: 5s

이와 같이 인프라 최전선의 리버스 프록시가 애플리케이션 코드를 거치지 않고도 헤더 수준에서 속도 제한(Rate Limiting)과 라우팅을 신속하게 통제할 수 있게 됨으로써, 전체 에이전트 인프라의 처리 용량과 보안 거버넌스 수준이 획기적으로 개선되었습니다.

💡 아키텍처 관점의 전환
MCP 2026-07-28의 무상태 전환은 단순한 포맷 변경이 아닙니다. AI 에이전트 도구 인터페이스를 '웹소켓/데스크탑 프로세스 파이프'라는 특수 환경에서 '표준 클라우드 마이크로서비스 REST API'의 범용 생태계로 편입시킨 인프라적 독립 선언입니다.

3절. 무상태 환경에서의 양방향 상호작용: 다중 왕복 요청(MRTR)과 재진입 설계

엔지니어들이 무상태 전환 소식을 접했을 때 가장 먼저 제기한 기술적 우려는 "인간의 개입(Human-in-the-Loop)이나 추가 권한 승인이 필요한 복잡한 상호작용을 세션 없이 어떻게 처리하는가?"였습니다. 금융 결제 승인이나 위험 데이터 삭제와 같은 작업에서는 도구 실행 도중에 에이전트가 사용자에게 2차 인증(OTP)이나 추가 매개변수를 요구해야 합니다. 과거에는 이를 열려 있는 양방향 스트림을 통해 해결했습니다.

MCP 2026-07-28 규격은 이 난제를 해결하기 위해 다중 왕복 요청(Multi-Round-Trip Requests, MRTR) 메커니즘을 정식으로 도입했습니다. 규격에 명시된 다중 왕복 요청(Multi-Round-Trip Requests, MRTR)은 지속적인 연결 스트림을 유지하지 않고도 서버가 실행 도중 추가적인 사용자 입력이나 매개변수를 요청할 수 있도록 지원합니다.

Stateless MCP에서 resumptionToken으로 새 인스턴스에 재개 요청을 보내는 흐름
Stateless MCP 재개 흐름 · 선택하면 확대

MRTR의 핵심 기전은 서버가 작업을 일시 중단할 때, 진행 상태를 서버 내부 메모리에 두지 않고 서명된 재개 토큰(resumptionToken)의 형태로 클라이언트에게 반환한 뒤 실행 런타임을 즉시 종료하는 것입니다:

  1. 상태의 암호화 캡슐화 및 상태 외부화(State Externalization): resumptionToken은 작업 고유 식별자(UUID), 완료된 중간 단계 식별자, 파라미터 체크섬, 만료 시간(TTL)을 포함하며 서버 비밀키(HMAC-SHA256)로 서명됩니다. 대용량 컨텍스트나 보안상 클라이언트에 노출되어서는 안 되는 민감 데이터는 외부 분산 캐시(Redis/DynamoDB)에 짧은 TTL(예: 300초)로 저장하고, 토큰에는 해당 참조 키와 HMAC 서명만을 담습니다.
  2. 연결 자원의 즉시 해제와 비용 제로화: 토큰이 반환되는 순간 HTTP 200 OK 응답과 함께 서버리스 인스턴스는 즉시 유휴 상태가 되거나 소멸합니다. 사용자가 스마트폰으로 전송된 OTP를 확인하고 입력하기 위해 1분간 고민하더라도 클라우드 컨테이너 과금이 발생하지 않으며, 데이터베이스 커넥션 풀(Connection Pool)이나 게이트웨이 소켓을 단 1밀리초도 점유하지 않습니다.
  3. 무작위 인스턴스로의 안전한 재진입(Re-entrancy): 클라이언트가 사용자 입력을 수신한 후 tools/resume 요청에 resumptionToken을 담아 전송하면, 로드밸런서는 가용한 완전히 다른 신규 인스턴스 B로 해당 요청을 전달합니다. 인스턴스 B는 토큰의 암호학적 서명을 검증하고 외부 저장소에서 상태를 복원하여 중단된 지점부터 안전하게 로직을 속개합니다.
  4. 타임아웃 및 멱등성 롤백(Rollback) 가드레일: 만약 사용자가 지정된 TTL(예: 5분) 이내에 추가 입력을 제공하지 못할 경우, 토큰은 암호학적으로 즉시 만료됩니다. 후속 tools/resume 요청이 들어오더라도 서버는 410 Gone 혹은 유효하지 않은 토큰 에러를 반환하며, 분산 캐시에 선점되어 있던 임시 자원 락(Resource Lock)은 TTL 만료와 함께 백그라운드에서 자동으로 해제되어 시스템 자원 누수를 원천 차단합니다.

이 방식은 웹 아키텍처의 오랜 지혜인 RESTful Stateless 원칙을 AI 에이전트 도구 상호작용에 효과적으로 이식한 결과물입니다.


다중 왕복 요청 상태 외부화 구조도

▲ MRTR 다중 왕복 요청에서 지속 연결 없이 서명된 재개 토큰(resumptionToken)과 외부 상태 저장소를 통해 도구 실행 상태를 안전하게 복원하는 아키텍처 인포그래픽


4절. 엔터프라이즈 서버리스 MCP 게이트웨이 참조 아키텍처: AWS Lambda & Kubernetes 환경 구현

필자가 프로덕션 환경에 제안하는 '서버리스 MCP 게이트웨이(Serverless MCP Gateway)' 아키텍처는 AWS Lambda, Cloudflare Workers, 그리고 쿠버네티스 표준 L7 인그레스 뒤에 무상태 도구 파이프라인을 배치하는 것을 골자로 합니다.

+-----------------------------------------------------------------------------------+
| [ 엔터프라이즈 무상태 MCP 게이트웨이 시스템 구성도 ]                                  |
+-----------------------------------------------------------------------------------+
                     +--------------------------+
                     |  AI 에이전트 오케스트레이터 |
                     +--------------------------+
                                  | (HTTPS POST / JSON-RPC 2.0 with Mcp-Method)
                                  v
+-----------------------------------------------------------------------------------+
|  L7 API 게이트웨이 (Kong / Envoy / AWS API Gateway)                                 |
|  - JWT / OIDC 토큰 무결성 검증 (OAuth 2.0)                                          |
|  - Header-based Routing (Mcp-Method, Mcp-Name 기반 테넌트 분기)                      |
|  - Token Bucket Rate Limiting (도구별 분당 호출 한도 제어)                            |
+-----------------------------------------------------------------------------------+
             |                                       |
             +-------------------+                   +-------------------+
             | (tools/call)      | (resources/*)     | (tools/resume)    |
             v                   v                   v                   v
+-------------------------+ +-------------------------+ +-------------------------+
| AWS Lambda: 결제·금융 도구| | Cloudflare Worker: 지식 | | AWS Lambda: 비동기 재진입|
| [무상태 실행 & 감사 로깅] | | [글로벌 엣지 캐시 연동]  | | [서명 토큰 검증 & 복원]  |
+-------------------------+ +-------------------------+ +-------------------------+
             |                                                           |
             +-----------------------------+-----------------------------+
                                           v
                        +-------------------------------------+
                        | 분산 인프라 계층                     |
                        | - ElastiCache Redis (비동기 상태 저장) |
                        | - AWS KMS (HMAC 서명 및 토큰 암호화)   |
                        | - OpenSearch (도구 카탈로그 벡터 인덱스) |
                        +-------------------------------------+

아래는 무상태 환경에서 동작하는 Node.js/TypeScript 기반의 AWS Lambda MCP 도구 핸들러 프로덕션 참조 코드입니다. _meta 유효성 검증과 헤더 검증, 그리고 MRTR 토큰 처리 로직이 단일 무상태 함수 안에 완결되어 있습니다:

// serverless-mcp-handler.ts
import { APIGatewayProxyEventV2, APIGatewayProxyResultV2 } from 'aws-lambda';
import * as crypto from 'crypto';

interface McpMeta {
  mcpVersion: string;
  client: { name: string; version: string };
  securityContext?: { principalId: string; tenantId: string; issuedAt: number };
}

interface McpJsonRpcRequest {
  jsonrpc: '2.0';
  id: string | number;
  method: string;
  params: {
    name?: string;
    arguments?: Record<string, unknown>;
    resumptionToken?: string;
    userInput?: unknown;
    _meta: McpMeta;
  };
}

const SIGNING_SECRET = process.env.MCP_SIGNING_SECRET || 'temporary-dev-secret-key-32bytes';

function verifyAndSignToken(payload: object, expiresInSec: number): string {
  const header = Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT' })).toString('base64url');
  const exp = Math.floor(Date.now() / 1000) + expiresInSec;
  const body = Buffer.from(JSON.stringify({ ...payload, exp })).toString('base64url');
  const signature = crypto.createHmac('sha256', SIGNING_SECRET)
    .update(`${header}.${body}`).digest('base64url');
  return `${header}.${body}.${signature}`;
}

function decodeToken(token: string): any {
  const [header, body, signature] = token.split('.');
  if (!header || !body || !signature) throw new Error('Malformed token format');
  const expectedSig = crypto.createHmac('sha256', SIGNING_SECRET)
    .update(`${header}.${body}`).digest('base64url');
  if (signature !== expectedSig) throw new Error('Invalid token signature');
  const parsed = JSON.parse(Buffer.from(body, 'base64url').toString('utf8'));
  if (parsed.exp < Math.floor(Date.now() / 1000)) throw new Error('Token expired');
  return parsed;
}

export const handler = async (event: APIGatewayProxyEventV2): Promise<APIGatewayProxyResultV2> => {
  // 1. L7 헤더 검증 (Mcp-Method)
  const mcpMethodHeader = event.headers['mcp-method'];
  if (!mcpMethodHeader) {
    return {
      statusCode: 400,
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ error: 'Missing required Mcp-Method header' })
    };
  }

  const payload: McpJsonRpcRequest = JSON.parse(event.body || '{}');
  const { method, params, id } = payload;

  // 2. _meta 객체 및 프로토콜 버전 호환성 검증
  if (!params?._meta || params._meta.mcpVersion !== '2026-07-28') {
    return {
      statusCode: 422,
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id,
        error: { code: -32600, message: 'Unsupported MCP Version. Required: 2026-07-28' }
      })
    };
  }

  // 3. 다중 왕복 요청(MRTR) 재진입 핸들링
  if (method === 'tools/resume') {
    try {
      const state = decodeToken(params.resumptionToken || '');
      // 중간 사용자 입력을 병합하여 비즈니스 트랜잭션 완결
      const finalResult = {
        executionId: state.txId,
        status: 'completed',
        appliedInput: params.userInput,
        processedBy: 'lambda-stateless-worker'
      };
      return {
        statusCode: 200,
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id,
          result: { content: [{ type: 'text', text: JSON.stringify(finalResult) }] }
        })
      };
    } catch (err: any) {
      return {
        statusCode: 401,
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ jsonrpc: '2.0', id, error: { code: -32001, message: err.message } })
      };
    }
  }

  // 4. 일반 도구 실행 및 MRTR 중간 승인 트리거 예시
  if (method === 'tools/call' && params.name === 'execute_wire_transfer') {
    const amount = Number(params.arguments?.amount || 0);
    if (amount >= 1000000) {
      // 100만 원 이상 송금 시 MRTR 토큰 발급 및 일시 중단
      const resumptionToken = verifyAndSignToken({
        txId: crypto.randomUUID(),
        amount,
        targetAccount: params.arguments?.targetAccount,
        step: 'AWAITING_2FA'
      }, 300); // 5분 유효

      return {
        statusCode: 200,
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id,
          result: {
            status: 'needs_input',
            resumptionToken,
            prompt: '고액 이체를 위한 SMS 2차 인증번호 6자리를 입력해 주십시오.'
          }
        })
      };
    }
  }

  // 기본 성공 응답
  return {
    statusCode: 200,
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id,
      result: { content: [{ type: 'text', text: 'Operation completed deterministically.' }] }
    })
  };
};

이 핸들러는 호출 간에 메모리 상태를 전혀 남기지 않으므로, AWS Lambda의 동시성(Concurrency) 정책에 따라 초당 수만 건의 에이전트 도구 호출로 급증하더라도 인프라가 자동으로 탄력 확장됩니다.


5절. 실무 마이그레이션 전략과 엔지니어링 트레이드오프

무상태 MCP 아키텍처가 제공하는 막대한 인프라적 이점에도 불구하고, 기존 프로덕션 시스템을 마이그레이션할 때는 신중한 엔지니어링 트레이드오프 검토가 선행되어야 합니다.

⚠️ 마이그레이션 핵심 경계 지점: 페이로드 증폭과 도구 카탈로그 캐싱
모든 요청에 `_meta`와 보안 컨텍스트가 실려 전송됨에 따라 단일 HTTP 패킷의 헤더 및 페이로드 크기가 증가합니다. 특히 수백 개의 도구 스키마 전체를 매 요청마다 주고받는 안티패턴을 피하고, 도구 검색(Tool Discovery)을 게이트웨이 캐시 계층으로 철저히 분리해야 합니다.

실무 엔지니어링 팀이 점검해야 할 주요 트레이드오프와 대응 방안은 다음과 같습니다:

  1. 페이로드 오버헤드와 게이트웨이 압축:
  2. 기존에는 initialize 시점에 한 번 교환했던 클라이언트 정보와 인증 컨텍스트가 모든 개별 요청에 포함됩니다. 헤더 및 JSON 오버헤드가 요청당 약 1~2KB 증가할 수 있으므로, 내부 게이트웨이 통신에서는 HTTP/2 또는 HTTP/3의 HPACK/QPACK 헤더 압축을 필수적으로 활성화해야 합니다. 또한 클라이언트 SDK 수준에서 불필요한 장황한 메타데이터를 필터링하는 파이프라인이 권장됩니다.
  3. 레거시 클라이언트를 위한 브릿지(Bridge) 프록시 운영:
  4. Agentic AI Foundation은 생태계의 충격을 완화하기 위해 12개월의 유예 기간(Deprecation Policy)을 명시했습니다. 기존 2024년형 Stateful 클라이언트(예: 구형 데스크탑 에이전트 및 레거시 CLI)를 계속 지원해야 하는 엔터프라이즈 환경에서는, 인그레스 계층에 Stateful-to-Stateless Bridge Proxy를 배치해야 합니다. 이 프록시는 외부 레거시 클라이언트와는 가상 세션을 맺어주고, 내부 마이크로서비스 MCP로는 요청을 무상태 JSON-RPC로 변환하여 중계하는 완충 계층 역할을 수행합니다.
  5. 재진입 토큰의 리플레이 공격(Replay Attack) 방어:
  6. MRTR 환경에서 발급된 resumptionToken이 탈취되어 중복 실행되는 것을 방지하기 위해, 분산 캐시에 해당 토큰의 JTI(JWT ID)를 1회용(One-time Nonce)으로 등록하고 소비 즉시 무효화하는 원자적(Atomic) 검증 로직이 요구됩니다. Redis의 SET key value NX EX 300 명령을 활용하여 토큰 재사용을 마이크로초 단위로 차단할 수 있습니다.
  7. 카나리 트래픽 이관 로드맵:
  8. 운영 중인 서비스를 한 번에 전환하는 대신, 게이트웨이의 Mcp-Version 헤더를 기준으로 신규 에이전트 트래픽의 5%를 먼저 무상태 서버리스 풀로 라우팅하는 카나리(Canary) 배포를 거쳐 점진적으로 이관 비율을 높여야 합니다.

인프라 비용 모델 비교 분석 (TCO Comparison)

엔터프라이즈 클라우드 인프라 관점에서 상시 가동형 컨테이너 클러스터와 무상태 서버리스 게이트웨이 간의 총소유비용(TCO) 변화를 비교하는 것은 매우 중요한 의사결정 기준입니다. 다음 비교 표는 실무 엔지니어링 조직의 예산 산정을 돕기 위해 작성된 모델입니다.

설명을 위한 가정 예시이며 실제 측정 결과가 아닙니다 (일간 500,000회 도구 호출, 평균 실행 시간 200ms, 메모리 512MB 기준 가정 모델)

좌우로 스크롤하여 확인하세요
비교 항목기존 Stateful MCP (EKS 전용 파드 상시 가동)신규 Stateless MCP (AWS API Gateway + Lambda)인프라적 차이점 및 절감 요인
유휴 자원 과금트래픽이 없는 심야·주말에도 최소 파드 풀(20대) 유지 비용 발생호출이 없을 때는 컴퓨팅 비용 0원 (완전 종량제 과금)세션 유지용 상시 인스턴스 불필요
피크 부하 대응스티키 세션 병목으로 인해 최대 트래픽 기준 과도한 오버프로비저닝 필요수천 개의 동시 인보케이션으로 지연 없이 신속하게 자동 확장파드 스케일아웃 대기 시간(수 분) 소멸
세션 캐시 인프라모든 파드 간 세션 동기화를 위한 고사양 Redis 클러스터 상시 유지일회용 MRTR 재개 토큰 검증용 경량 Redis 캐시만 필요세션 메모리 락 경합 및 I/O 오버헤드 완화
운영 유지보수 공수파드 재시작 시 세션 드레이닝 관리 및 노드 패치 장애 대응클라우드 제공업체가 런타임 보안 패치 및 고가용성 전담플랫폼 엔지니어의 인프라 온콜 부담 경감

위 가정 모델에서 볼 수 있듯이, 야간이나 업무 외 시간에 트래픽 변동 폭이 큰 기업용 사내 AI 도구 환경에서는 무상태 서버리스 아키텍처로의 전환을 통해 유휴 컴퓨팅 자원에 낭비되던 인프라 비용을 극적으로 최적화할 수 있습니다.

프로덕션 관측 가능성(Observability) 및 모니터링 지표

무상태 MCP 게이트웨이를 프로덕션에 성공적으로 안착시키기 위해서는, 분산된 도구 호출의 건전성을 실시간으로 감시할 수 있는 관측 가능성 파이프라인이 필수적입니다:

  • 도구별 실행 시간 분포 (p95 / p99 Latency): Mcp-Name 헤더별로 메트릭 레이블을 분리 수집하여, 특정 백엔드 데이터베이스나 외부 API의 응답 지연이 에이전트 전체 턴 타임아웃을 유발하지 않는지 감시합니다.
  • MRTR 재개 성공률 (Resumption Success Rate): 발급된 resumptionToken 대비 정상적으로 tools/resume으로 완결된 비율을 추적하여, 사용자가 중간 승인 단계에서 이탈하거나 토큰 만료 에러(410 Gone)를 겪는 비율을 모니터링합니다.
  • 헤더 라우팅 거부율 (403 Forbidden Rate): 미인가된 도구 호출 시도나 테넌트 경계를 침범한 인입 트래픽을 집계하여, 보안 위협 및 프롬프트 인젝션에 의한 도구 오남용을 조기에 탐지합니다.

다음은 엔터프라이즈 팀이 MCP 2026-07-28 규격으로 전환할 때 점검해야 할 아키텍처 체크리스트입니다.

# 📋 MCP 2026-07-28 무상태 전환 아키텍처 체크리스트

- [ ] **프로토콜 스펙 검증 및 헤더 라우팅**
  - [ ] 인입 요청의 `params._meta.mcpVersion`이 '2026-07-28'인지 확인하는 진입 가드레일 구현
  - [ ] L7 인그레스(Envoy/Kong)에서 `Mcp-Method` 및 `Mcp-Name` 헤더 라우팅 규칙 정의
  - [ ] 내부 통신 구간 HTTP/2 또는 HTTP/3 압축 프로토콜 활성화

- [ ] **인프라 및 서버리스 런타임 최적화**
  - [ ] 로드밸런서의 Sticky Session(쿠키/IP 해시) 설정 완전 비활성화 및 라운드로빈 전환
  - [ ] 도구 서버를 서버리스(AWS Lambda / Cloudflare Workers) 또는 일반 K8s 무상태 파드로 전환
  - [ ] HPA 메트릭을 활성 세션 수가 아닌 순수 HTTP 요청량(RPS) 및 CPU 사용률 기반으로 재조정

- [ ] **보안 및 MRTR 트랜잭션 무결성**
  - [ ] 다중 왕복 요청용 HMAC-SHA256 토큰 서명 키의 KMS 관리 및 주기적 자동 로테이션 파이프라인
  - [ ] 재진입 토큰의 TTL을 최대 5분 이내로 강제하고 Redis 원자적 Nonce 검증으로 중복 실행 차단
  - [ ] OAuth 2.0 / OIDC 베어러 토큰을 게이트웨이 레벨에서 사전 검증(Auth Offloading)

- [ ] **하위 호환성 및 카나리 배포**
  - [ ] 구형 2024년형 클라이언트를 위한 Stateful-to-Stateless Bridge 프록시 배포
  - [ ] Mcp-Version 헤더 기반 카나리 트래픽 분기(5% ➔ 25% ➔ 100%) 및 에러율 모니터링

MCP 2026-07-28 규격의 등장은 AI 에이전트 시스템이 초기 로컬 프로토타입 단계를 벗어나, 클라우드 네이티브 엔터프라이즈 인프라의 핵심 구성 요소로 완전히 성숙했음을 알리는 중대한 이정표입니다. 스티키 세션이라는 과거의 유산을 털어내고 진정한 무상태 아키텍처를 도입할 때, 비로소 엔지니어링 팀은 무한히 확장 가능하고 장애 회복 탄력성을 갖춘 차세대 AI 에이전트 플랫폼을 완성할 수 있습니다.

참고 자료

원문 참고 자료

이 글의 사실 확인과 추가 읽기를 위한 원문입니다. Model Context Protocol (MCP) Official Specification & GitHub Repository

테크 아키텍처 데스크
IT & Mind Trends 에디토리얼 팀 — 클라우드 분산 아키텍처 및 행동 과학 트렌드를 연구하고 실무 트레이드오프를 검증하여 전달합니다.
이전 글
다음 글