피드로 돌아가기
MCP Connection Issues: Why My MCP Server Kept Dropping Connections and How I Fixed It (After 86 Production Outages)
Dev.toDev.to
Backend

SSE Heartbeat 도입을 통한 MCP 서버 연결 끊김 제로화 달성

MCP Connection Issues: Why My MCP Server Kept Dropping Connections and How I Fixed It (After 86 Production Outages)

KevinTen2026년 6월 25일8intermediate

Context

LLM의 응답 처리 시간 동안 SSE Connection이 Idle 상태로 유지되어 Proxy 서버의 Timeout 설정에 의해 연결이 강제 종료되는 현상 발생. 플랫폼별(Fly.io 75s, Cloudflare 100s, Heroku 55s) 상이한 Idle Timeout 제약으로 인한 간헐적 Connection Drop 문제 직면.

Technical Solution

  • SSE 표준 사양의 Comment 라인(:)을 활용한 Heartbeat 메커니즘 설계
  • 30초 간격의 정기적인 Heartbeat 패킷 전송을 통한 Proxy 서버의 Idle 상태 판정 방지
  • SseEmitter(0L) 설정을 통한 서버측 Timeout 제거 및 자체 Scheduler 기반의 연결 유지 로직 구현
  • LLM 연산 중 발생하는 전송 공백기를 Heartbeat로 충전하여 연결 지속성 확보
  • Client 단에서 무시 가능한 Comment 형식을 채택하여 기존 JSON-RPC 통신 프로토콜의 무결성 유지

Impact

  • 배포 후 한 달간 Connection Drop 발생 횟수 0건 달성

1. SSE 기반 서버 설계 시 Proxy/Load Balancer의 Idle Timeout 설정값 확인

2. LLM과 같이 응답 지연 시간이 불규칙한 서비스에는 Heartbeat 전송 로직 필수 적용

3. 로컬 환경과 프로덕션 환경의 네트워크 인프라 차이(Reverse Proxy 등)를 고려한 E2E 테스트 수행

원문 읽기