-
마이크로서비스 게이트웨이를 넘어: 에이전트 게이트웨이와 MCP 호출 통제 아키텍처
AI 2026. 10. 22. 09:03반응형대규모 언어 모델(LLM)이 단독 챗봇을 넘어 시스템 외부 세계와 상호작용하는 에이전트로 진화하면서, 도구 호출(Tool Calling) 표준으로 Model Context Protocol(MCP)이 급부상했다. 엔터프라이즈 환경에서 팀별로 수십, 수백 개의 MCP 서버를 배포하기 시작하자 마이크로서비스 초기와 유사한 인프라 혼란이 재현된다.
각 에이전트 클라이언트는 개별 MCP 서버의 연결 주소를 직접 관리하고, 보안 정책과 권한 통제는 서버마다 제각각 흩어진다. 모델이 생성하는 도구 호출은 비결정론적이어서 기존 정적 방화벽이나 API 게이트웨이 규칙으로 방어하기 어렵다.
이 문제를 해결하기 위해 에이전트와 도구 서버 사이의 단일 길목(Chokepoint)을 통제하는 에이전트 게이트웨이(Agent Gateway) 아키텍처가 빠르게 표준 인프라로 자리잡는다.
1. 개별 서버 방어의 한계: Lethal Trifecta와 침해 사고
2025년 5월 보안 연구팀 Invariant Labs가 공개한 침해 사례는 에이전트 환경의 구조적 취약점을 드러냈다. 공격자는 공개 깃허브 저장소 이슈 본문에 악의적인 프롬프트를 숨겼다. 피해 사용자의 에이전트는 정상 인가된 공식 GitHub MCP 도구를 사용해 해당 이슈를 읽은 뒤, 사용자 비공개 저장소의 소스코드를 조회하여 외부 웹훅 주소로 탈취했다.
[ Invariant Labs 침해 흐름: 치명적 삼합체(Lethal Trifecta) ] 1. 공격자 프롬프트 주입 ──> 공개 이슈 본문에 악성 지시문 삽입 2. 정상 GitHub MCP 호출 ──> 사용자의 에이전트가 이슈 조회 (신뢰 불가능한 외부 입력) 3. 비결정론적 도구 체이닝 ──> 에이전트가 비공개 저장소 읽기 도구 자동 실행 (높은 시스템 접근권) 4. 외부 데이터 반출 ──> 외부 통신 도구로 소스코드 전송 (외부 데이터 변경/유출)이 사고에서 GitHub MCP 서버 코드 자체의 버그나 권한 탈취는 없었다. 서버는 요청자가 전달한 정상 토큰을 확인하고 정당한 API를 호출했을 뿐이다.
보안 아키텍처에서는 이를 치명적 삼합체(Lethal Trifecta)라 부른다.
- 신뢰 불가능한 외부 입력(Untrusted Input): 웹 검색 결과, 외부 문서, 이슈 본문에 섞인 간접 프롬프트 주입(Indirect Prompt Injection).
- 광범위한 내부 시스템 접근 권한(High Access Privilege): 사내 데이터베이스, 비공개 소스코드 저장소 조회 권한.
- 외부 환경 변경 권한(State Changing Ability): 외부 메일 발송, 웹 요청 전송, 슬랙 메시지 게시.
이 세 요소가 하나의 에이전트 실행 컨텍스트에 모이면, 개별 도구 서버는 악의적 의도를 판단하지 못한다. 도구를 제공하는 개별 서버를 고치는 방식으로는 시스템 수준의 데이터 유출을 차단하기 어렵다. 모든 도구 호출이 집결하고 나가는 단일 길목에서 호출 주체, 호출 파라미터, 도구 체이닝 흐름을 총체적으로 감시하는 게이트웨이가 필수적인 이유다.
2. API 게이트웨이와 에이전트 게이트웨이의 본질적 차이
마이크로서비스 아키텍처(MSA)의 API 게이트웨이나 서비스 메시(Service Mesh)는 에이전트 통제에 그대로 쓰이기 어렵다. 두 영역 간의 결정적인 차이는 예측 가능성(Predictability)에 기인한다.
🔍 클릭하여 확대flowchart TD subgraph MSA["전통적 마이크로서비스 (결정론적)"] ClientA["사용자 요청"] --> APIGW["API Gateway"] APIGW -->|"고정된 라우팅 규칙<br>(/orders -> OrderSvc)"| SvcA["Order Service"] SvcA -->|"코드로 정의된 RPC"| SvcB["Payment Service"] end subgraph Agentic["에이전트 시스템 (비결정론적)"] UserPrompt["사용자 프롬프트"] --> LLM["LLM 추론 엔진"] LLM -.->|"동적 도구 선택<br>(매번 순서와 대상 변경)"| AgentGW["에이전트 게이트웨이"] AgentGW -->|"L7 헤더 검사 & 파라미터 정책 평가"| MCPA["DB Query MCP"] AgentGW -->|"인가 실패 시 차단"| MCPB["Production Delete MCP"] end마이크로서비스 환경의 통신 경로는 애플리케이션 소스코드에 결정론적으로 선언된다. 엔드포인트와 HTTP 메서드 기반의 정적 접근 제어 목록(ACL)만으로 충분한 통제가 가능하다.
반면 에이전트는 동일한 사용자 질문을 받아도 실행 시점마다 선택하는 도구 종류와 실행 순서, 호출 빈도가 달라진다. 고정된 URL 매핑 기반 게이트웨이는 LLM이 어떤 파라미터로 도구를 조작하는지 파악하지 못한다.
에이전트 게이트웨이는 다음과 같은 전용 기능을 요구한다.
- 비결정론적 도구 호출의 실시간 인자(Argument) 평가: 단순히
db_execute도구 호출을 허용하는 수준을 넘어, 인자로 전달된 쿼리가production환경인지, 파라미터에DROP이나DELETE가 포함되는지 검사한다. - 도구 목록 카탈로그 및 동적 마스킹: 에이전트가 연결할 때 전체 도구 5,000개를 무차별 노출하면 컨텍스트 윈도우가 낭비되고 환각률이 상승한다. 에이전트의 역할과 권한에 맞춰 인가된 도구만 선별 노출한다.
- 호출 감사 로그 및 세션 추적: 단일 사용자 세션에서 어떤 입력이 들어와 어떤 도구 체인을 거쳤는지 엔드투엔드로 기록한다.
이러한 요구를 수용하기 위해 2026년 7월 개정된 MCP 공식 스펙은 요청 헤더에 호출 메서드와 도구 이름을 포함하도록 규정했다. 중간 게이트웨이 계층이 무거운 JSON-RPC 본문을 매번 파싱하지 않고도 L7 레이어에서 초저지연 필터링을 수행하도록 설계가 개선되었다.
3. 대표 아키텍처 비교: agentgateway vs Agent Router
리눅스 재단 산하 Agentic AI Foundation(AAIF)에 기부된 대표적인 오픈소스 에이전트 게이트웨이는 Solo.io의 agentgateway와 Bloomberg/Tetrate 진영의 Agent Router(구 Envoy AI Gateway)로 나뉜다.
🔍 클릭하여 확대flowchart LR subgraph PatternA["Solo.io agentgateway (단독 프록시)"] Agent1["Agent Client"] --> AGW["agentgateway (Go/Rust 단독)"] AGW --> MCP1["Internal MCP Servers"] end subgraph PatternB["Agent Router (Envoy 확장 구조)"] Agent2["Agent Client"] --> EnvoyIn["Envoy Ingress"] EnvoyIn --> Filter["AI Gateway Extension Filter"] Filter --> EnvoyOut["Envoy Egress"] EnvoyOut --> MCP2["Internal MCP Servers"] end1) Solo.io agentgateway
- 구조: 단독 프록시(Standalone Proxy) 형태. 요청을 직접 수신해 즉시 라우팅 및 인가를 판정한다.
- 특징: Istio 앰비언트 메시와 kgateway 설계 경험을 바탕으로 경량 단일 홉 처리에 집중한다.
- 인가 방식: 초기 v1.5.0에서는 정교한 파라미터 검사를 위해 외부 검사 서버(External Authorizer)를 별도 운영해야 했다. 2026년 10월 배포된 v1.6.0부터 라우트 단위 인가 엔진을 내장하여 외부 의존성 없이 인자 조건 기반 차단을 처리한다.
2) Agent Router (구 Envoy AI Gateway)
- 구조: Envoy 프록시의 확장 모듈 구조. 트래픽이 Envoy 인프라 파이프라인을 두 번 통과하는 2-홉 구조를 취한다.
- 특징: 기존 쿠버네티스 인프라에서 Envoy를 운영하던 조직에 자연스럽게 통합된다. LLM 호출과 MCP 도구 호출을 단일 Envoy 데이터 플레인에서 처리한다.
- 인가 방식: 초창기 버전부터 인가 정책(Authorization Policy) 설정 파일만으로 호출 인자 수준의 조건부 통제가 가능했다.
4. 실전 도입 시 검증해야 할 3가지 체크리스트
프로덕션 클러스터에 에이전트 게이트웨이를 배치할 때 문서와 실제 런타임 간의 괴리로 인해 운영 장애가 빈번히 발생한다. 엔지니어링 단계에서 반드시 확인해야 할 세 가지 항목을 짚는다.
[ 에이전트 게이트웨이 프로덕션 검증 3대 축 ] 1. 도구 카탈로그 동기화 검증 └─ 정책 적용 후 client/tools/list 결과 확인 (목록 증발 버그 차단) 2. 인자(Argument) 정책 런타임 평가 확인 └─ 정책 구문 파싱 성공 != 실제 런타임 필터 동작 (드라이런 검증) 3. 세션 암호화 및 P50 지연시간 기본값 튜닝 └─ 무작위 시드/반복 연산 기본값(20ms) -> 인프라에 맞춰 최적화(0.5ms)1) 정책 적용 후 도구 목록 반환값 검증
에이전트는 구동 시 게이트웨이에
tools/list를 요청해 자신이 호출 가능한 도구 목록을 수신한다. 게이트웨이 파드가 정상(Healthy) 상태를 반환하더라도, 내부 정책 설정 충돌로 인해 에이전트에게 빈 배열([])을 반환하는 현상이 발생하기도 한다. 도구 목록이 비어 있으면 LLM은 도구를 쓰지 못하고 텍스트로만 응답하거나 오류를 뱉는다. 배포 파이프라인에 정책 적용 직후 클라이언트 입장에서 도구 목록이 의도한 대로 조회되는지 검증하는 헬스체크를 둔다.2) 인자 조건 인가 정책의 드라이런(Dry-run)
게이트웨이 설정 파일(YAML) 검증기를 통과했다고 해서 런타임 조건 평가가 보장되지 않는다. 예컨대
delete_record도구에서env == 'production'인자만 차단하는 규칙을 작성했을 때, 설정 로딩은 오류 없이 성공하지만 런타임에 인자 파싱이 무시되어 운영 환경 삭제 요청이 그대로 통과할 위험이 존재한다. 배포 전 차단 대상 호출과 허용 대상 호출을 목(Mock) 요청으로 직접 쏴서 조건식이 정확히 평가되는지 확인한다.3) 세션 암호화 반복 횟수와 레이턴시 튜닝
프록시 계층 추가는 필연적으로 네트워크 지연을 유발한다. Agent Router 초기 테스트 시 측정된 약 20ms의 P50 지연 시간은 프록시 라우팅 연산이 아니라 세션 암호화 키 생성 시의 해시 반복 횟수 기본값에서 기인했다. 보안 요구 수준에 맞춰 반복 횟수를 조정하면 추가 지연 시간은 약 0.5ms 수준으로 단축된다. 기본 설정을 맹신하지 않고 네트워크 지연 프로파일을 측정해 환경에 맞게 튜닝한다.
5. 도입 기준: 언제 게이트웨이를 세워야 하는가
모든 에이전트 시스템에 게이트웨이가 필요하지는 않다. 단일 MCP 서버를 소규모 팀 내부에서 전용으로 쓰거나, 도구 이름 수준의 단순 온/오프 제어만으로 충분하다면 게이트웨이 도입은 불필요한 네트워크 홉과 인프라 복잡성만 가중한다.
반면 다음과 같은 임계점을 넘는 순간 게이트웨이는 선택이 아닌 필수 인프라가 된다.
- 도구를 제공하는 사내 MCP 서버가 여러 팀으로 나뉘어 수십 개 이상으로 증가할 때
- 에이전트 클라이언트가 이종 도구에 접근하면서 인증 토큰과 엔드포인트 관리가 파편화될 때
- 운영 환경 데이터 삭제나 외부 통신 등 고위험 도구 호출에 대해 세부 파라미터 수준의 감사와 인가가 강제될 때
우버(Uber)는 800개 이상의 사내 MCP 서버와 5,000개 이상의 도구를 통합 관리하기 위해 게이트웨이를 세우고, 신규 등록된 도구는 기본 비활성(Default-Disabled) 상태로 둔 뒤 도구 소유 팀의 승인을 거쳐 노출하는 통제 방식을 택했다. 에이전트의 자율성이 커질수록 호출 길목을 장악하는 게이트웨이가 시스템의 안전성과 가용성을 지탱하는 핵심 경계선으로 작동한다.
반응형'AI' 카테고리의 다른 글
Playwright를 두고 왜 Ego Lite가 등장했을까: 드라이버에서 에이전틱 브라우저 런타임으로의 진화 (0) 2026.10.23 AI 클러스터에서 TCP의 종말: GPU 아이들링을 끝내는 차세대 전송 프로토콜 Homa (0) 2026.10.20 로컬 장난감에서 클라우드 웹 표준으로: MCP v2 아키텍처 대개편과 무상태(Stateless) 전환 (0) 2026.10.17 컨텍스트 윈도우 확장이 해결하지 못하는 인지 인프라: 에이전트 4계층 기억 모델과 망각 정책 설계 (0) 2026.10.14 계획 모드는 왜 죽었는가: 거대 계획 문서의 종말과 Understand-Act-Inspect 루프 (0) 2026.10.13