피드로 돌아가기
Dev.toBackend
원문 읽기
MCP SDK의 In-Memory 한계를 극복한 Durable EventStore 설계 및 구현
The MCP SDK's EventStore Lives in Memory. Here's What Happens When Your Server Restarts.
AI 요약
Context
MCP SDK의 기본 EventStore가 In-Memory 방식으로 설계되어 서버 재시작이나 Multi-worker 환경에서 SSE 세션 유실이 발생하는 구조적 한계 존재. Last-Event-ID 헤더를 통한 Resumability 기능을 구현했으나, 프로세스 로컬 저장소 사용으로 인해 분산 환경에서의 상태 동기화 불가능.
Technical Solution
- SQLite, Redis, PostgreSQL을 지원하는 Pluggable Backend 아키텍처 도입을 통한 데이터 영속성 확보
- FastMCP 인스턴스를 ASGI app으로 래핑하는 with_persistence() 헬퍼 함수를 통한 보일러플레이트 제거 및 설정 추상화
- Third-party 서버 수정을 배제하고 SSE 응답을 가로채 저장하는 PersistenceProxy 구조 설계를 통한 비침습적 Resumability 제공
- Redis Pub/Sub 및 Postgres LISTEN/NOTIFY 기반의 실시간 이벤트 스트리밍 및 subscribe() 인터페이스 구현
- Gzip 압축 옵션 적용을 통한 대용량 Payload 저장 효율 최적화 및 Rolling Deploy 대응
- migrate() 함수 구현을 통한 데이터 정렬 유지 및 저장소 간 마이그레이션 경로 제공
실천 포인트
- 단일 프로세스 환경인 경우 네트워크 홉이 없는 SQLite 사용 권장 - Load Balancer 하단의 다중 포드 환경인 경우 Redis 또는 PostgreSQL과 같은 Shared Store 필수 적용 - 서버 코드 수정이 불가능한 레거시/외부 시스템인 경우 Proxy 패턴을 통한 Sidecar 방식의 상태 관리 검토