MCP 프로토콜 팀은 2026년 7월 28일에 프로토콜 수준의 세션을 제거하고 모든 요청을 상태 비저장(stateless) 방식으로 강제하는 새 버전을 출시했습니다. MCP 클라이언트, 서버 또는 에이전트를 운영 중이라면, 지속적인 세션 ID를 가정하는 코드를 반드시 재작성해야 합니다. 그렇지 않으면 라우팅 오류, 캐시 미스, 제어 불가능한 백그라운드 작업 등의 문제에 직면하게 됩니다.

변화가 중요한 이유

이전의 MCP는 핸드셰이크를 통해 세션 식별자를 생성해야 했습니다. 다운스트림 서비스는 이 ID를 기반으로 일련의 요청이 동일한 프로세스에 도달할 것이라고 가정하고, 로드 밸런서의 스티키 라우팅(sticky routing)을 활용하며, 세션별 데이터를 메모리에 저장했습니다. 7월 릴리스는 이 모델을 순수 요청-응답(request-response) 흐름으로 교체합니다. 이제 세션 손실을 걱정하지 않고 서버를 추가하거나 제거할 수 있습니다. 프로토콜은 더 이상 컨텍스트를 유지하지 않으며, 애플리케이션이 이를 직접 관리해야 합니다.

기존의 세션 중심 코드를 유지하는 팀은 요청이 잘못된 인스턴스로 튀거나, 캐시 미스가 발생하고, 백그라운드 작업이 쌓이는 현상을 겪게 될 것입니다. 반면 상태 비저장 패턴을 채택하는 팀은 비 스티키(non-sticky) 로드 밸런서 뒤에서 MCP를 실행할 수 있으며, 전체 요청 체인에 대해 더욱 정밀한 관측성을 확보할 수 있습니다.

주요 변경 사항

  • 프로토콜 라이프사이클 – 핸드셰이크와 세션 ID가 사라집니다. 모든 요청은 서버에 필요한 모든 정보를 포함해야 하며, 후속 요청이 동일한 프로세스에 도달한다는 보장이 없습니다.
  • HTTP 라우팅 – 게이트웨이는 이제 Mcp-MethodMcp-Name이라는 두 개의 새로운 헤더를 읽어 요청을 전달할 위치를 결정합니다. 세션 쿠키 기반 라우팅은 더 이상 작동하지 않습니다.
  • 캐싱 – 스펙에 읽기 작업을 위한 ttlMs(밀리초 단위의 유효 시간) 및 cacheScope 필드가 추가되었습니다. 오래된 데이터(stale data)를 허용할지 여부를 결정하고 그에 따라 캐시를 구성할 수 있습니다.
  • 관측성(Observability)_meta 블록은 이제 W3C Trace Context 페이로드를 기대하며, 이를 통해 트레이싱 시스템이 에지 게이트웨이, 툴링 및 백엔드 작업을 하나의 엔드 투 엔드(end-to-end) 트레이스로 연결할 수 있습니다.
  • 구성(Composition) – 확장 기능이 공식화되었습니다. 핵심 스펙을 수정하지 않고도 새로운 기능을 추가할 수 있어 플러그인 스타일의 아키텍처를 장려합니다.
  • 장기 실행 작업 – 몇 분 또는 몇 시간 동안 실행되는 작업에는 단순한 요청/응답만으로는 부족합니다. 프로토콜은 이제 라이프사이클 제어 기능이 포함된 비동기 작업을 위한 Task 객체를 정의합니다.

레거시 코드에 숨겨진 위험

빠른 감사를 통해 상태 유지(statefulness)를 가정하는 다음과 같은 패턴을 찾아낼 수 있습니다:

  • 세션 ID를 키로 사용하는 인메모리 맵(In-memory maps).
  • 스티키 세션(sticky sessions)으로 설정된 로드 밸런서.
  • 세션별 데이터를 로컬 메모리에 미리 로드하는 시작 루틴.
  • 세션이 종료될 때 비즈니스 데이터를 삭제하는 정리(cleanup) 로직.

이 중 하나라도 마이그레이션 과정에서 남게 되면, 부하 발생 시 시스템이 데이터를 손실하거나 리소스를 누수할 수 있습니다.

구체적인 마이그레이션 체크리스트

1. 현재 가정 사항 파악

코드에서 세션 ID, 스티키 라우팅 규칙 또는 프로세스 로컬 캐시에 접근하는 모든 곳을 매핑합니다. 각 구성 요소가 무엇에 의존하는지 문서화하십시오.

2. ID를 명시적으로 처리

모든 요청 페이로드 또는 헤더에 테넌트 ID(tenant ID), 실행 ID(run ID), 사용자 ID(user ID)를 추가합니다. 이러한 식별자를 권한 부여 및 데이터 파티셔닝의 신뢰할 수 있는 원천(source of truth)으로 취급하십시오.

3. 라우팅 구성 업데이트

세션 기반 라우팅을 Mcp-MethodMcp-Name을 읽는 규칙으로 교체합니다. 비 스티키(non-sticky) 로드 밸런서 뒤에 최소 두 개의 인스턴스를 배치하여 새로운 게이트웨이 로직을 테스트하십시오.

4. 캐싱 로직 리팩토링

새로운 ttlMscacheScope 필드로 전환합니다. 다양한 TTL 값이 히트율(hit rates)과 데이터 신선도 요구 사항에 어떤 영향을 미치는지 성능 테스트를 수행하십시오.

5. 엔드 투 엔드 트레이싱 활성화

_meta 블록에 W3C Trace Context 헤더를 채웁니다. 트레이스가 에지 게이트웨이에서 백엔드 서비스까지 끊김 없이 흐르는지 확인하십시오.

6. 비동기 작업을 위한 Task 모델 채택

작업을 생성할 수 있는 주체를 정의하고, 최대 실행 시간을 설정하며, 큐 제한을 강제합니다. 명시적인 취소 및 재시도 정책을 추가하고, 작업이 대기 중인 동안 에이전트가 할 수 있는 작업을 제한하십시오.

7. SDK 및 클라이언트 라이브러리 릴리스 노트 검토

7월 28일 이전에 검토를 완료하십시오.

8. 실패 경로를 대상으로 하는 회귀 테스트 실행

정상 경로(happy-path) 테스트 외에도 누락된 헤더, 만료된 작업, 잘못된 형식의 캐시 지시문 등을 주입하여 테스트하십시오. 시스템이 우아하게 성능 저하(degrade gracefully)되는지 확인하십시오.

향후 주의 사항

안전하게 마이그레이션하는 팀은 정상 경로뿐만 아니라 경계 조건(boundaries)을 테스트할 것입니다. 7월 28일 이후에도 여전히 세션 ID를 기대하는 프로덕션 배포 환경은 새로운 MCP 서버와 상호 운용하는 데 실패할 수 있습니다.