[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-prodeogseon-mcp-transport-injeung-scaling-gwaje":3},{"article":4,"author":55},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":35,"related_articles":36},"d0000000-0000-0000-0000-000000000511","a0000000-0000-0000-0000-000000000056","프로덕션에서의 MCP: Transport, 인증, 스케일링 과제 해결","prodeogseon-mcp-transport-injeung-scaling-gwaje","Model Context Protocol 서버를 프로덕션에서 운영하기 위한 심층 가이드 — 트랜스포트 선택, 인증 패턴, 스케일링 전략, 감사 로깅, 엔터프라이즈 배포를 위한 게이트웨이 아키텍처.","## 프로토타입에서 프로덕션으로: 무엇이 달라지는가\n\n노트북에서 작동하는 MCP 서버를 구축하는 것은 비교적 간단합니다. 분산 인프라 전체에서 수천 개의 AI 에이전트 세션을 동시에 처리하는 서버를 운영하는 것은 완전히 다른 엔지니어링 과제입니다. 프로덕션 MCP 배포는 프로토타입에서 무시할 수 있는 다섯 가지 문제를 해결해야 합니다: **트랜스포트 확장성**, **인증 및 권한 부여**, **대규모 세션 관리**, **감사 추적**, **멀티 서버 오케스트레이션**.\n\n이 문서는 MCP 서버를 개발에서 프로덕션으로 이전하는 엔지니어링 팀을 위한 기술 가이드입니다. 최소 하나의 MCP 서버를 구축하고 프로토콜의 기본 사항을 이해하고 있다고 가정합니다. 아직이라면 첫 번째 MCP 서버 구축에 관한 관련 문서부터 시작하세요.\n\n## 트랜스포트 확장성: stdio vs SSE vs Streamable HTTP\n\nMCP는 세 가지 트랜스포트 메커니즘을 정의합니다. 프로덕션에 적합한 것을 선택하는 것이 첫 번째 아키텍처 결정입니다.\n\n### stdio 트랜스포트\n\nstdio 트랜스포트는 표준 입출력 스트림을 통해 통신합니다. Host 애플리케이션이 MCP 서버를 자식 프로세스로 시작하고 stdin\u002Fstdout을 통해 JSON-RPC 메시지를 교환합니다.\n\n**장점:**\n- 네트워크 설정 불필요\n- 프로세스 수준 격리\n- 포트 충돌 없음\n- 최저 지연 시간(네트워크 스택 없음)\n\n**제한:**\n- 서버가 Host와 같은 머신에서 실행되어야 함\n- Client 세션당 하나의 서버 프로세스\n- 로드 밸런싱 불가\n- 수평 확장 불가\n\n**적합한 용도:** 로컬 개발 도구, IDE 확장, 단일 사용자 데스크톱 애플리케이션.\n\n### SSE(Server-Sent Events) 트랜스포트\n\nSSE 트랜스포트는 클라이언트에서 서버로의 메시지에 HTTP를 사용하고, 서버에서 클라이언트로의 메시지에 Server-Sent Events를 사용합니다. 서버는 HTTP 서비스로 동작합니다.\n\n**장점:**\n- 네트워크를 통해 접근 가능(원격 서버)\n- 기존 HTTP 인프라와 호환\n- 여러 클라이언트 동시 지원\n- 방화벽 및 프록시 통과\n\n**제한:**\n- 단방향 스트리밍(SSE는 서버에서 클라이언트만)\n- 세션 어피니티 필요(스테이트풀 연결)\n- 일부 로드 밸런서가 장기 SSE 연결에서 문제\n- 프로토콜에 내장된 재연결 시맨틱 없음\n\n**적합한 용도:** 소규모~중규모 배포, 내부 도구, 기존 HTTP 인프라가 있는 팀.\n\n### Streamable HTTP 트랜스포트\n\nStreamable HTTP는 최신 트랜스포트로, 프로덕션 배포를 위해 특별히 설계되었습니다. 모든 메시지에 표준 HTTP POST를 사용하고, 장기 실행 작업에는 선택적 SSE 스트리밍을 사용합니다.\n\n**장점:**\n- 완전히 스테이트리스한 요청\u002F응답 모델\n- 모든 HTTP 로드 밸런서와 동작\n- `Mcp-Session-Id` 헤더를 통한 내장 세션 관리\n- 스트리밍 및 비스트리밍 응답 모두 지원\n- CDN 및 프록시와 호환\n\n**제한:**\n- 서버 측 세션 스토리지 필요(Redis, 데이터베이스)\n- stdio보다 메시지당 오버헤드 약간 높음\n- 새로운 트랜스포트 — 에코시스템 도구가 적음\n\n**적합한 용도:** 프로덕션 클라우드 배포, 멀티테넌트 플랫폼, 엔터프라이즈 환경.\n\n### 트랜스포트 비교 매트릭스\n\n| 특성 | stdio | SSE | Streamable HTTP |\n|------|-------|-----|-----------------|\n| 네트워크 지원 | 아니오 | 예 | 예 |\n| 수평 확장 | 아니오 | 제한적 | 예 |\n| 로드 밸런싱 | 아니오 | 세션 어피니티 필요 | 표준 HTTP LB |\n| 세션 관리 | 프로세스별 | 서버 메모리 | 외부 스토어 |\n| 지연 시간 | 최저 | 낮음 | 낮음 |\n| 방화벽 호환 | N\u002FA | 예 | 예 |\n\n## 인증 및 권한 부여\n\n### OAuth 2.0 통합\n\n프로덕션 MCP 서버는 클라이언트가 자체 인증하고 특정 도구 및 리소스에 대한 접근을 제한하는 방법이 필요합니다. MCP 프로토콜은 원격 서버에 대해 OAuth 2.0을 지원합니다.\n\n흐름은 다음과 같습니다:\n\n1. MCP client가 서버에 연결하고 `initialize` 요청 전송\n2. 서버가 OAuth 메타데이터 URL이 포함된 `WWW-Authenticate` 헤더와 함께 `401 Unauthorized`로 응답\n3. Client가 `\u002F.well-known\u002Foauth-authorization-server`에서 OAuth 설정 가져오기\n4. Client가 브라우저 기반 인증 흐름을 사용하여 액세스 토큰 획득\n5. 이후 요청에 `Authorization` 헤더에 Bearer 토큰 포함\n\n### 도구 수준 권한 부여\n\n인증만으로는 충분하지 않습니다. 프로덕션 시스템에는 사용자가 어떤 도구를 호출하고 어떤 리소스에 접근할 수 있는지 제어하는 세밀한 권한 부여가 필요합니다.\n\n권장 접근 방식:\n\n- **역할 기반 접근 제어(RBAC)**: 역할에 도구 권한 할당. 예: `analyst` 역할은 읽기 전용 쿼리 도구에 접근, `admin` 역할은 쓰기 작업에 접근.\n- **스코프 기반 제어**: OAuth 스코프를 사용하여 도구 접근 제한. 예: `mcp:tools:query:read` 스코프는 SELECT 쿼리만 허용.\n- **동적 도구 필터링**: 인증된 사용자의 권한에 따라 사용 가능한 도구 목록 필터링.\n\n## Redis를 이용한 수평 확장\n\n스테이트리스 Streamable HTTP 트랜스포트를 사용하면 여러 MCP 서버 인스턴스를 로드 밸런서 뒤에서 실행할 수 있습니다. 세션 상태는 Redis에 저장되어 모든 인스턴스에서 공유됩니다.\n\n```\nClient → Load Balancer → MCP Server 1 ↔ Redis\n                       → MCP Server 2 ↔ Redis\n                       → MCP Server 3 ↔ Redis\n```\n\n각 요청에는 `Mcp-Session-Id` 헤더가 포함되며, 어떤 서버 인스턴스든 Redis에서 세션 상태를 가져와 처리를 계속할 수 있습니다.\n\n### Kubernetes에서의 오토스케일링\n\nMCP 서버를 Kubernetes에 배포하면 활성 세션 수 또는 CPU 사용률에 따라 Pod를 자동으로 확장할 수 있습니다. Horizontal Pod Autoscaler(HPA)에서 커스텀 메트릭을 사용합니다.\n\n## 감사 로깅\n\n엔터프라이즈 배포에서는 AI가 외부 도구를 호출할 때마다 상세한 감사 추적이 필요합니다. 각 도구 호출에 대해 다음을 기록합니다:\n\n- **타임스탬프**: 호출 시간\n- **사용자 ID**: AI 작업을 시작한 사용자\n- **도구 이름**: 호출된 MCP 도구\n- **입력 매개변수**: 도구에 전송된 데이터\n- **출력 결과**: 도구가 반환한 데이터\n- **실행 시간**: 도구 호출에 걸린 시간\n- **오류**: 발생한 오류\n\n구조화된 로깅(JSON 형식)을 사용하고, 로그를 중앙 로그 관리 시스템(ELK Stack, Datadog, CloudWatch)으로 전송합니다.\n\n## 게이트웨이 아키텍처\n\n대규모 배포에서는 MCP 게이트웨이 패턴 구현을 고려하세요. 게이트웨이는 MCP client와 백엔드 MCP 서버 사이의 리버스 프록시 역할을 합니다.\n\n게이트웨이 책임:\n\n- **인증 중앙화**: 모든 OAuth 검증을 게이트웨이에서 처리\n- **속도 제한**: 사용자별, 도구별 속도 제한 적용\n- **라우팅**: 도구 이름에 따라 요청을 적절한 백엔드 서버로 라우팅\n- **감사 로그 수집**: 모든 도구 호출을 게이트웨이 수준에서 기록\n- **서킷 브레이커**: 백엔드 서버 장애 시 폴백 처리\n\n## FAQ\n\n**Q: 프로덕션에서 stdio 트랜스포트를 사용할 수 있나요?**\nA: 네, 하지만 제한적인 시나리오에서만. 각 사용자가 자체 로컬 MCP 서버 프로세스를 실행하는 데스크톱 애플리케이션에 적합합니다. 공유 서버 인프라에는 Streamable HTTP를 사용하세요.\n\n**Q: MCP 세션을 영속화해야 하나요?**\nA: 네, Streamable HTTP를 사용하는 경우. 세션 상태에는 클라이언트 기능, 협상된 프로토콜 버전, 등록된 알림이 포함됩니다. Redis가 권장 세션 스토어입니다.\n\n**Q: MCP 서버의 버전 관리는 어떻게 해야 하나요?**\nA: `initialize` 응답의 서버 버전 필드를 사용합니다. 호환성을 깨는 변경(도구 제거, 스키마 변경)의 경우 메이저 버전을 범프하고 마이그레이션 기간 동안 이전 버전과 새 버전을 모두 지원합니다.\n\n**Q: MCP의 최대 메시지 크기는 얼마인가요?**\nA: 프로토콜은 최대 크기를 정의하지 않지만, 실제 제한은 트랜스포트에 따라 다릅니다. Streamable HTTP의 경우 응답을 10 MB 이하로 유지하세요. stdio의 경우 시스템 파이프 버퍼(일반적으로 64 KB)로 인해 큰 응답에는 청킹이 필요할 수 있습니다.","\u003Ch2 id=\"\">프로토타입에서 프로덕션으로: 무엇이 달라지는가\u003C\u002Fh2>\n\u003Cp>노트북에서 작동하는 MCP 서버를 구축하는 것은 비교적 간단합니다. 분산 인프라 전체에서 수천 개의 AI 에이전트 세션을 동시에 처리하는 서버를 운영하는 것은 완전히 다른 엔지니어링 과제입니다. 프로덕션 MCP 배포는 프로토타입에서 무시할 수 있는 다섯 가지 문제를 해결해야 합니다: \u003Cstrong>트랜스포트 확장성\u003C\u002Fstrong>, \u003Cstrong>인증 및 권한 부여\u003C\u002Fstrong>, \u003Cstrong>대규모 세션 관리\u003C\u002Fstrong>, \u003Cstrong>감사 추적\u003C\u002Fstrong>, \u003Cstrong>멀티 서버 오케스트레이션\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>이 문서는 MCP 서버를 개발에서 프로덕션으로 이전하는 엔지니어링 팀을 위한 기술 가이드입니다. 최소 하나의 MCP 서버를 구축하고 프로토콜의 기본 사항을 이해하고 있다고 가정합니다. 아직이라면 첫 번째 MCP 서버 구축에 관한 관련 문서부터 시작하세요.\u003C\u002Fp>\n\u003Ch2 id=\"stdio-vs-sse-vs-streamable-http\">트랜스포트 확장성: stdio vs SSE vs Streamable HTTP\u003C\u002Fh2>\n\u003Cp>MCP는 세 가지 트랜스포트 메커니즘을 정의합니다. 프로덕션에 적합한 것을 선택하는 것이 첫 번째 아키텍처 결정입니다.\u003C\u002Fp>\n\u003Ch3>stdio 트랜스포트\u003C\u002Fh3>\n\u003Cp>stdio 트랜스포트는 표준 입출력 스트림을 통해 통신합니다. Host 애플리케이션이 MCP 서버를 자식 프로세스로 시작하고 stdin\u002Fstdout을 통해 JSON-RPC 메시지를 교환합니다.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>장점:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>네트워크 설정 불필요\u003C\u002Fli>\n\u003Cli>프로세스 수준 격리\u003C\u002Fli>\n\u003Cli>포트 충돌 없음\u003C\u002Fli>\n\u003Cli>최저 지연 시간(네트워크 스택 없음)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>제한:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>서버가 Host와 같은 머신에서 실행되어야 함\u003C\u002Fli>\n\u003Cli>Client 세션당 하나의 서버 프로세스\u003C\u002Fli>\n\u003Cli>로드 밸런싱 불가\u003C\u002Fli>\n\u003Cli>수평 확장 불가\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>적합한 용도:\u003C\u002Fstrong> 로컬 개발 도구, IDE 확장, 단일 사용자 데스크톱 애플리케이션.\u003C\u002Fp>\n\u003Ch3>SSE(Server-Sent Events) 트랜스포트\u003C\u002Fh3>\n\u003Cp>SSE 트랜스포트는 클라이언트에서 서버로의 메시지에 HTTP를 사용하고, 서버에서 클라이언트로의 메시지에 Server-Sent Events를 사용합니다. 서버는 HTTP 서비스로 동작합니다.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>장점:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>네트워크를 통해 접근 가능(원격 서버)\u003C\u002Fli>\n\u003Cli>기존 HTTP 인프라와 호환\u003C\u002Fli>\n\u003Cli>여러 클라이언트 동시 지원\u003C\u002Fli>\n\u003Cli>방화벽 및 프록시 통과\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>제한:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>단방향 스트리밍(SSE는 서버에서 클라이언트만)\u003C\u002Fli>\n\u003Cli>세션 어피니티 필요(스테이트풀 연결)\u003C\u002Fli>\n\u003Cli>일부 로드 밸런서가 장기 SSE 연결에서 문제\u003C\u002Fli>\n\u003Cli>프로토콜에 내장된 재연결 시맨틱 없음\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>적합한 용도:\u003C\u002Fstrong> 소규모~중규모 배포, 내부 도구, 기존 HTTP 인프라가 있는 팀.\u003C\u002Fp>\n\u003Ch3>Streamable HTTP 트랜스포트\u003C\u002Fh3>\n\u003Cp>Streamable HTTP는 최신 트랜스포트로, 프로덕션 배포를 위해 특별히 설계되었습니다. 모든 메시지에 표준 HTTP POST를 사용하고, 장기 실행 작업에는 선택적 SSE 스트리밍을 사용합니다.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>장점:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>완전히 스테이트리스한 요청\u002F응답 모델\u003C\u002Fli>\n\u003Cli>모든 HTTP 로드 밸런서와 동작\u003C\u002Fli>\n\u003Cli>\u003Ccode>Mcp-Session-Id\u003C\u002Fcode> 헤더를 통한 내장 세션 관리\u003C\u002Fli>\n\u003Cli>스트리밍 및 비스트리밍 응답 모두 지원\u003C\u002Fli>\n\u003Cli>CDN 및 프록시와 호환\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>제한:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>서버 측 세션 스토리지 필요(Redis, 데이터베이스)\u003C\u002Fli>\n\u003Cli>stdio보다 메시지당 오버헤드 약간 높음\u003C\u002Fli>\n\u003Cli>새로운 트랜스포트 — 에코시스템 도구가 적음\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>적합한 용도:\u003C\u002Fstrong> 프로덕션 클라우드 배포, 멀티테넌트 플랫폼, 엔터프라이즈 환경.\u003C\u002Fp>\n\u003Ch3>트랜스포트 비교 매트릭스\u003C\u002Fh3>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>특성\u003C\u002Fth>\u003Cth>stdio\u003C\u002Fth>\u003Cth>SSE\u003C\u002Fth>\u003Cth>Streamable HTTP\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>네트워크 지원\u003C\u002Ftd>\u003Ctd>아니오\u003C\u002Ftd>\u003Ctd>예\u003C\u002Ftd>\u003Ctd>예\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>수평 확장\u003C\u002Ftd>\u003Ctd>아니오\u003C\u002Ftd>\u003Ctd>제한적\u003C\u002Ftd>\u003Ctd>예\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>로드 밸런싱\u003C\u002Ftd>\u003Ctd>아니오\u003C\u002Ftd>\u003Ctd>세션 어피니티 필요\u003C\u002Ftd>\u003Ctd>표준 HTTP LB\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>세션 관리\u003C\u002Ftd>\u003Ctd>프로세스별\u003C\u002Ftd>\u003Ctd>서버 메모리\u003C\u002Ftd>\u003Ctd>외부 스토어\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>지연 시간\u003C\u002Ftd>\u003Ctd>최저\u003C\u002Ftd>\u003Ctd>낮음\u003C\u002Ftd>\u003Ctd>낮음\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>방화벽 호환\u003C\u002Ftd>\u003Ctd>N\u002FA\u003C\u002Ftd>\u003Ctd>예\u003C\u002Ftd>\u003Ctd>예\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"\">인증 및 권한 부여\u003C\u002Fh2>\n\u003Ch3>OAuth 2.0 통합\u003C\u002Fh3>\n\u003Cp>프로덕션 MCP 서버는 클라이언트가 자체 인증하고 특정 도구 및 리소스에 대한 접근을 제한하는 방법이 필요합니다. MCP 프로토콜은 원격 서버에 대해 OAuth 2.0을 지원합니다.\u003C\u002Fp>\n\u003Cp>흐름은 다음과 같습니다:\u003C\u002Fp>\n\u003Col>\n\u003Cli>MCP client가 서버에 연결하고 \u003Ccode>initialize\u003C\u002Fcode> 요청 전송\u003C\u002Fli>\n\u003Cli>서버가 OAuth 메타데이터 URL이 포함된 \u003Ccode>WWW-Authenticate\u003C\u002Fcode> 헤더와 함께 \u003Ccode>401 Unauthorized\u003C\u002Fcode>로 응답\u003C\u002Fli>\n\u003Cli>Client가 \u003Ccode>\u002F.well-known\u002Foauth-authorization-server\u003C\u002Fcode>에서 OAuth 설정 가져오기\u003C\u002Fli>\n\u003Cli>Client가 브라우저 기반 인증 흐름을 사용하여 액세스 토큰 획득\u003C\u002Fli>\n\u003Cli>이후 요청에 \u003Ccode>Authorization\u003C\u002Fcode> 헤더에 Bearer 토큰 포함\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>도구 수준 권한 부여\u003C\u002Fh3>\n\u003Cp>인증만으로는 충분하지 않습니다. 프로덕션 시스템에는 사용자가 어떤 도구를 호출하고 어떤 리소스에 접근할 수 있는지 제어하는 세밀한 권한 부여가 필요합니다.\u003C\u002Fp>\n\u003Cp>권장 접근 방식:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>역할 기반 접근 제어(RBAC)\u003C\u002Fstrong>: 역할에 도구 권한 할당. 예: \u003Ccode>analyst\u003C\u002Fcode> 역할은 읽기 전용 쿼리 도구에 접근, \u003Ccode>admin\u003C\u002Fcode> 역할은 쓰기 작업에 접근.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>스코프 기반 제어\u003C\u002Fstrong>: OAuth 스코프를 사용하여 도구 접근 제한. 예: \u003Ccode>mcp:tools:query:read\u003C\u002Fcode> 스코프는 SELECT 쿼리만 허용.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>동적 도구 필터링\u003C\u002Fstrong>: 인증된 사용자의 권한에 따라 사용 가능한 도구 목록 필터링.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"redis\">Redis를 이용한 수평 확장\u003C\u002Fh2>\n\u003Cp>스테이트리스 Streamable HTTP 트랜스포트를 사용하면 여러 MCP 서버 인스턴스를 로드 밸런서 뒤에서 실행할 수 있습니다. 세션 상태는 Redis에 저장되어 모든 인스턴스에서 공유됩니다.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Client → Load Balancer → MCP Server 1 ↔ Redis\n                       → MCP Server 2 ↔ Redis\n                       → MCP Server 3 ↔ Redis\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>각 요청에는 \u003Ccode>Mcp-Session-Id\u003C\u002Fcode> 헤더가 포함되며, 어떤 서버 인스턴스든 Redis에서 세션 상태를 가져와 처리를 계속할 수 있습니다.\u003C\u002Fp>\n\u003Ch3>Kubernetes에서의 오토스케일링\u003C\u002Fh3>\n\u003Cp>MCP 서버를 Kubernetes에 배포하면 활성 세션 수 또는 CPU 사용률에 따라 Pod를 자동으로 확장할 수 있습니다. Horizontal Pod Autoscaler(HPA)에서 커스텀 메트릭을 사용합니다.\u003C\u002Fp>\n\u003Ch2 id=\"\">감사 로깅\u003C\u002Fh2>\n\u003Cp>엔터프라이즈 배포에서는 AI가 외부 도구를 호출할 때마다 상세한 감사 추적이 필요합니다. 각 도구 호출에 대해 다음을 기록합니다:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>타임스탬프\u003C\u002Fstrong>: 호출 시간\u003C\u002Fli>\n\u003Cli>\u003Cstrong>사용자 ID\u003C\u002Fstrong>: AI 작업을 시작한 사용자\u003C\u002Fli>\n\u003Cli>\u003Cstrong>도구 이름\u003C\u002Fstrong>: 호출된 MCP 도구\u003C\u002Fli>\n\u003Cli>\u003Cstrong>입력 매개변수\u003C\u002Fstrong>: 도구에 전송된 데이터\u003C\u002Fli>\n\u003Cli>\u003Cstrong>출력 결과\u003C\u002Fstrong>: 도구가 반환한 데이터\u003C\u002Fli>\n\u003Cli>\u003Cstrong>실행 시간\u003C\u002Fstrong>: 도구 호출에 걸린 시간\u003C\u002Fli>\n\u003Cli>\u003Cstrong>오류\u003C\u002Fstrong>: 발생한 오류\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>구조화된 로깅(JSON 형식)을 사용하고, 로그를 중앙 로그 관리 시스템(ELK Stack, Datadog, CloudWatch)으로 전송합니다.\u003C\u002Fp>\n\u003Ch2 id=\"\">게이트웨이 아키텍처\u003C\u002Fh2>\n\u003Cp>대규모 배포에서는 MCP 게이트웨이 패턴 구현을 고려하세요. 게이트웨이는 MCP client와 백엔드 MCP 서버 사이의 리버스 프록시 역할을 합니다.\u003C\u002Fp>\n\u003Cp>게이트웨이 책임:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>인증 중앙화\u003C\u002Fstrong>: 모든 OAuth 검증을 게이트웨이에서 처리\u003C\u002Fli>\n\u003Cli>\u003Cstrong>속도 제한\u003C\u002Fstrong>: 사용자별, 도구별 속도 제한 적용\u003C\u002Fli>\n\u003Cli>\u003Cstrong>라우팅\u003C\u002Fstrong>: 도구 이름에 따라 요청을 적절한 백엔드 서버로 라우팅\u003C\u002Fli>\n\u003Cli>\u003Cstrong>감사 로그 수집\u003C\u002Fstrong>: 모든 도구 호출을 게이트웨이 수준에서 기록\u003C\u002Fli>\n\u003Cli>\u003Cstrong>서킷 브레이커\u003C\u002Fstrong>: 백엔드 서버 장애 시 폴백 처리\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"faq\">FAQ\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Q: 프로덕션에서 stdio 트랜스포트를 사용할 수 있나요?\u003C\u002Fstrong>\nA: 네, 하지만 제한적인 시나리오에서만. 각 사용자가 자체 로컬 MCP 서버 프로세스를 실행하는 데스크톱 애플리케이션에 적합합니다. 공유 서버 인프라에는 Streamable HTTP를 사용하세요.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Q: MCP 세션을 영속화해야 하나요?\u003C\u002Fstrong>\nA: 네, Streamable HTTP를 사용하는 경우. 세션 상태에는 클라이언트 기능, 협상된 프로토콜 버전, 등록된 알림이 포함됩니다. Redis가 권장 세션 스토어입니다.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Q: MCP 서버의 버전 관리는 어떻게 해야 하나요?\u003C\u002Fstrong>\nA: \u003Ccode>initialize\u003C\u002Fcode> 응답의 서버 버전 필드를 사용합니다. 호환성을 깨는 변경(도구 제거, 스키마 변경)의 경우 메이저 버전을 범프하고 마이그레이션 기간 동안 이전 버전과 새 버전을 모두 지원합니다.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Q: MCP의 최대 메시지 크기는 얼마인가요?\u003C\u002Fstrong>\nA: 프로토콜은 최대 크기를 정의하지 않지만, 실제 제한은 트랜스포트에 따라 다릅니다. Streamable HTTP의 경우 응답을 10 MB 이하로 유지하세요. stdio의 경우 시스템 파이프 버퍼(일반적으로 64 KB)로 인해 큰 응답에는 청킹이 필요할 수 있습니다.\u003C\u002Fp>\n","ko","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:38.937460Z","프로덕션에서의 MCP: Transport, 인증, 스케일링 과제","MCP 서버를 프로덕션에서 운영하기 위한 기술 가이드. 트랜스포트 선택, OAuth 인증, Redis 세션을 이용한 수평 확장, 감사 로깅, 게이트웨이 패턴 해설.","mcp 프로덕션 스케일링",null,"index, follow",[22,27,31],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000008","AI","ai","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000012","DevOps","devops",{"id":32,"name":33,"slug":34,"created_at":26},"c0000000-0000-0000-0000-000000000013","Security","security","엔지니어링",[37,43,49],{"id":38,"title":39,"slug":40,"excerpt":41,"locale":12,"category_name":35,"published_at":42},"d0000000-0000-0000-0000-000000000674","2026년, Bali가 동남아시아의 임팩트 테크 허브가 되고 있는 이유","bali-2026-dongnamasia-impaekteu-tekeu-heobeu-iyu","Bali는 동남아시아 스타트업 생태계에서 16위를 차지하고 있습니다. Web3 빌더, AI 지속가능성 스타트업, 에코 여행 테크 기업이 집중되면서, 이 섬은 지역 임팩트 테크의 수도로 자리매김하고 있습니다.","2026-03-28T10:44:49.294484Z",{"id":44,"title":45,"slug":46,"excerpt":47,"locale":12,"category_name":35,"published_at":48},"d0000000-0000-0000-0000-000000000673","ASEAN 데이터 보호 패치워크: 개발자를 위한 컴플라이언스 체크리스트","asean-deiteo-boho-paechiwokeu-gaebaljaleul-wihan-keompeullaieonseuchekeuriseuteu","7개 ASEAN 국가가 포괄적인 데이터 보호법을 시행하고 있으며, 각각 다른 동의 모델, 현지화 요건, 벌칙 구조를 가지고 있습니다. 다중 국가 애플리케이션을 구축하는 개발자를 위한 실용적인 컴플라이언스 체크리스트입니다.","2026-03-28T10:44:49.286400Z",{"id":50,"title":51,"slug":52,"excerpt":53,"locale":12,"category_name":35,"published_at":54},"d0000000-0000-0000-0000-000000000672","Indonesia 290억 달러 디지털 전환: 소프트웨어 기업을 위한 기회","indonesia-290eok-dallleo-dijiteol-jeonhwan-sopeuteuweo-gieopui-gihoe","Indonesia IT 서비스 시장은 2026년 290.3억 달러에 달할 것으로 예상되며, 이는 2025년 243.7억 달러에서 증가한 수치입니다. 클라우드 인프라, AI, 전자상거래, 데이터센터가 동남아시아에서 가장 빠른 성장을 주도하고 있습니다.","2026-03-28T10:44:49.265609Z",{"id":13,"name":56,"slug":57,"bio":58,"photo_url":19,"linkedin":19,"role":59,"created_at":60,"updated_at":60},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]