Sign in to save your progressYou can keep reading without an account, but completed lessons won't be saved.
Sign in

MCP 서버의 stateless_httpjson_response 플래그는 서버가 작동하는 방식의 근본적인 측면을 제어합니다. 특히 서버를 확장하거나 프로덕션에 배포할 계획이 있다면, 이를 언제 그리고 왜 사용해야 하는지 이해하는 것이 중요합니다.

Stateless HTTP가 필요한 경우

인기를 얻게 된 MCP 서버를 구축한다고 상상해 보세요. 처음에는 단일 서버 인스턴스에 연결하는 클라이언트가 몇 개뿐일 수 있습니다:

서버가 성장하면서 수천 개의 클라이언트가 연결을 시도할 수 있습니다. 단일 서버 인스턴스를 실행하는 것으로는 그 모든 트래픽을 처리할 만큼 확장되지 않습니다:

일반적인 해결책은 수평 확장입니다 - 로드 밸런서 뒤에서 여러 서버 인스턴스를 실행하는 것입니다:

하지만 여기서 상황이 복잡해집니다. MCP 클라이언트는 두 개의 별도 연결이 필요하다는 것을 기억하세요:

  • 서버에서 클라이언트로의 요청을 수신하기 위한 GET SSE 연결
  • 도구를 호출하고 응답을 받기 위한 POST 요청

로드 밸런서를 사용하면 이러한 요청이 서로 다른 서버 인스턴스로 라우팅될 수 있습니다. 도구가 (샘플링을 통해) Claude를 사용해야 하는 경우, POST 요청을 처리하는 서버는 GET SSE 연결을 처리하는 서버와 조율해야 합니다. 이는 서버 간에 복잡한 조율 문제를 만들어냅니다.

Stateless HTTP가 이를 해결하는 방법

stateless_http=True로 설정하면 이 조율 문제가 해결되지만, 상당한 트레이드오프가 있습니다:

stateless HTTP가 활성화되면:

  • 클라이언트가 세션 ID를 받지 못합니다 - 서버가 개별 클라이언트를 추적할 수 없습니다
  • 서버에서 클라이언트로의 요청이 없습니다 - GET SSE 경로를 사용할 수 없게 됩니다
  • 샘플링이 불가능합니다 - Claude나 다른 AI 모델을 사용할 수 없습니다
  • 진행 상황 보고가 불가능합니다 - 장시간 작업 중 진행 상황 업데이트를 보낼 수 없습니다
  • 구독이 불가능합니다 - 리소스 업데이트에 대해 클라이언트에 알릴 수 없습니다

하지만 한 가지 이점이 있습니다: 클라이언트 초기화가 더 이상 필요하지 않습니다. 클라이언트는 초기 핸드셰이크 과정 없이 직접 요청할 수 있습니다.

JSON Response 이해하기

json_response=True 플래그는 더 단순합니다 - POST 요청 응답에 대한 스트리밍을 비활성화할 뿐입니다. 도구가 실행되는 동안 여러 SSE 메시지를 받는 대신, 일반 JSON 형태의 최종 결과만 받게 됩니다.

스트리밍이 비활성화되면:

  • 중간 진행 상황 메시지가 없습니다
  • 실행 중 로그 문장이 없습니다
  • 최종 도구 결과만 있습니다

이 플래그들을 사용해야 하는 경우

다음의 경우 stateless HTTP를 사용하세요:

  • 로드 밸런서를 사용한 수평 확장이 필요한 경우
  • 서버에서 클라이언트로의 통신이 필요하지 않은 경우
  • 도구가 AI 모델 샘플링을 필요로 하지 않는 경우
  • 연결 오버헤드를 최소화하고 싶은 경우

다음의 경우 JSON response를 사용하세요:

  • 스트리밍 응답이 필요하지 않은 경우
  • 더 단순한, 스트리밍이 아닌 HTTP 응답을 선호하는 경우
  • 일반 JSON을 기대하는 시스템과 통합하는 경우

개발 환경 대 프로덕션 환경

표준 I/O 전송으로 로컬에서 개발하고 있지만 HTTP 전송으로 배포할 계획이라면, 프로덕션에서 사용할 것과 동일한 전송 방식으로 테스트하세요. stateful 모드와 stateless 모드 간의 동작 차이는 상당할 수 있으며, 배포 후가 아니라 개발 중에 문제를 발견하는 것이 더 좋습니다.

이 플래그들은 MCP 서버가 작동하는 방식을 근본적으로 변경하므로, 특정 확장 및 기능 요구 사항에 따라 선택하세요.