대규모 MCP 인증 문제 해결하기

MCP 서버를 구축했습니다. 노트북에서는 잘 작동합니다. AI 어시스턴트가 Jira 티켓을 생성하고 데이터베이스를 조회할 수도 있습니다. 팀원이 사용해보고 싶다고 말하기 전까지는 모든 것이 완벽했습니다.

만약 MCP를 제품으로 판매하고 싶다면, 새로운 문제에 직면하게 됩니다. 바로 여러 사용자를 지원해야 한다는 점입니다. 각 사용자는 자신만의 API 키와 보안 액세스 권한이 필요합니다.

대부분의 개발자가 여기서 실패합니다. 그들은 두 가지 잘못된 접근 방식을 시도합니다.

첫 번째는 수동 설정입니다. 사용자에게 저장소를 클론하고, 의존성을 설치하며, 로컬 환경 키를 설정하라고 안내하는 방식입니다. 이 작업에는 몇 시간이 걸립니다. 대부분의 사용자는 완료하기도 전에 포기할 것입니다.

두 번째는 서버리스의 악몽입니다. Cloud Run이나 Vercel에 배포하는 경우입니다. 서버리스 플랫폼은 세션을 저장하지 않기 때문에, 모든 요청이 새로운 인스턴스에 도달합니다. 사용자는 무한 루프에 빠지게 됩니다. 인증을 마쳤는데, 다음 클릭 시 다시 인증을 요구받는 식입니다. 이것은 제품이 아니라 망가진 프로토타입일 뿐입니다.

BrainGrid에서 우리는 이 문제를 해결했습니다. 로컬 도구에서 프로덕션급 인프라로 전환했습니다. 그 방법은 다음과 같습니다.

  • Redis 세션 스토어 사용: 서버리스 인스턴스는 종료되고 다시 시작됩니다. 메모리에 세션을 저장할 수 없습니다. Redis를 사용하여 모든 인스턴스에서 세션 데이터가 유지되도록 하세요.
  • 멀티 티어 캐싱 구현: 먼저 로컬 메모리를 확인합니다. 거기에 없다면 Redis를 확인합니다. 이를 통해 매 요청마다 발생하는 비용이 큰 JWT 검증을 방지할 수 있습니다.
  • 민감한 데이터 암호화: 세션 데이터를 Redis에 넣기 전에 AES-256-GCM을 사용하여 암호화하세요. 이를 통해 사용자 정보를 안전하게 보호할 수 있습니다.
  • 적절한 OAuth 패턴 사용: MCP 클라이언트는 특정 디스커버리 흐름(discovery flows)을 기대합니다. 오류를 방지하려면 WWW-Authenticate 헤더를 올바르게 구성해야 합니다.
  • 속도 최적화: JWT 검증은 지연 시간(latency)을 유발합니다. 검증된 세션을 캐싱함으로써 응답 시간을 크게 단축했습니다.

그 결과, 사용자 한 명에서 천 명까지 확장 가능한 시스템을 구축했습니다. 운영 비용이 매우 저렴하며 WorkOS나 Auth0와 같은 제공업체와 쉽게 통합됩니다.

자신만을 위한 도구를 만드는 것을 멈추세요. 고객을 위한 인프라를 만들기 시작하세요.

출처: https://dev.to/braingrid/from-local-hack-to-production-ready-how-we-solved-the-braingrids-mcp-multi-tenant-authentication-1m5e