REST에서 MCP로: 무엇이 바뀌나요
Source: Dev.to
번역을 진행하려면 번역하고자 하는 본문 텍스트를 제공해 주세요.
본문을 알려주시면 그대로 마크다운 형식과 코드 블록, URL 등을 유지하면서 한국어로 번역해 드리겠습니다.
소개
REST는 20 년 동안 표준이었습니다. 사용하고 있는 모든 API, 구축하는 모든 통합 — 아마도 REST일 것입니다.
하지만 상황이 변하고 있습니다. AI는 원시 엔드포인트를 호출하고 싶어 하지 않으며, 도구를 호출하고 싶어 합니다. 바로 그때 MCP (Machine‑Callable Procedures)가 등장합니다.
REST: 설계 목적
- 일반적인 호출
GET /users/123
POST /orders
PUT /products/456
DELETE /comments/789
- 예측 가능하고, 무상태이며, 어디서든 동작합니다.
- 호출자는 정확히 원하는 것이 무엇인지 알고 있다고 가정합니다: 고정된 매개변수를 가진 특정 엔드포인트를 호출하는 코드를 작성합니다.
왜 REST는 AI에게 어색한가
Claude와 같은 LLM에게 “사용자의 최근 주문을 가져와줘”라고 물어보면, 모델은 엔드포인트가 아니라 행동을 생각합니다:
- 제가 해야 할 일은 무엇인가요? → 주문 가져오기
- 어떤 정보가 필요한가요? → 사용자 ID
- 제약 조건은? → 최근 주문
REST는 AI가 자연어를 고정된 엔드포인트에 매핑하도록 강요하는데, 이는 가능하지만 어색합니다.
MCP: 도구‑중심 모델
엔드포인트를 노출하는 대신 도구를 노출합니다:
tools:
- name: get_user_orders
description: Get orders for a user, optionally filtered by date
parameters:
- name: user_id
type: string
required: true
- name: since
type: string
description: ISO date to filter orders from
AI는 설명을 읽고 매개변수를 이해한 뒤 언제 도구를 사용할지 결정합니다—문서를 파싱하거나 엔드포인트 경로를 외울 필요가 없습니다.
런타임에서 도구 발견
{
"tools": [
{
"name": "get_user_orders",
"description": "Get orders for a user",
"inputSchema": { /* ... */ }
},
{
"name": "create_order",
"description": "Create a new order",
"inputSchema": { /* ... */ }
}
]
}
AI는 “어떤 도구가 있나요?”라고 묻고 명확한 설명이 포함된 목록을 받아, 하드코딩 없이 동적 발견을 가능하게 합니다.
REST와 MCP 호출 비교
REST 예시
GET /api/v2/users/123/orders?status=completed&limit=10&sort=desc
정확한 경로, 쿼리 매개변수 및 API 버전을 알아야 합니다.
MCP 예시
{
"tool": "get_user_orders",
"arguments": {
"user_id": "123",
"status": "completed",
"limit": 10
}
}
AI는 자연어(예: “John의 마지막 10개의 완료된 주문을 보여줘”)에서 직접 인수를 추출합니다.
효과적인 도구 설명 작성
- Bad – 너무 모호해서 AI가 언제 사용해야 할지 모름
- name: proc_txn
description: Process transaction
- Good – 명확한 사용 사례와 필요한 매개변수
- name: process_payment
description: >-
Charge a customer's saved payment method. Use this when the user wants
to complete a purchase. Requires `order_id` and `payment_method_id`.
설명이 풍부할수록 AI가 더 똑똑하게 동작합니다.
MCP와 스트리밍 결과
MCP는 점진적인 출력을 위해 Server‑Sent Events (SSE)를 지원합니다:
AI: "Analyze this large dataset"
Tool: [streaming] Processing chunk 1/10...
Tool: [streaming] Processing chunk 2/10...
...
Tool: [complete] Analysis ready
이를 통해 진행 상황 업데이트와 장시간 실행 작업을 처리할 수 있습니다.
호출 간 컨텍스트 유지
REST는 상태 비저장이며, 각 요청은 독립적으로 작동합니다. MCP는 컨텍스트를 유지할 수 있어 다단계 워크플로우를 가능하게 합니다:
get_performance_metrics호출- 가장 느린 엔드포인트 식별
- 해당 엔드포인트와 함께
get_logs호출 - 결과 요약
단일 사용자 요청이 여러 도구 호출을 조정하여 일관된 결과를 생성할 수 있습니다.
통합 모델: REST + MCP
MCP는 REST를 대체하지 않습니다. 애플리케이션은 여전히 기존 방식대로 API를 호출합니다. MCP는 래퍼 역할을 하여 위에 위치합니다:
Your REST API → MCP Server → AI Agent
엔드포인트보다 도구 관점으로 생각하세요:
- 엔드포인트 – 어떤 작업이 존재합니까?
- 도구 – AI가 이를 가지고 무엇을 할 수 있습니까?
스마트한 인턴에게 시스템을 설명하듯이 도구 설명을 작성하세요.
MCP 레이어의 이점
- 간단한 도구 뒤에 복잡성을 숨깁니다
- 가드레일 추가 (예: 읽기 전용, 속도 제한)
- AI가 시스템과 상호 작용하는 방식을 설계합니다
새로운 생태계
- Now: 개발자들이 AI와 REST API를 수동으로 통합합니다.
- Soon: 인기 서비스(Stripe, GitHub 등)를 위한 MCP 래퍼가 제공됩니다.
- Later: API가 REST와 함께 MCP 서버와 함께 제공됩니다.
예시: Gantz Run으로 REST API 래핑하기
tools:
- name: get_weather
description: Get current weather for a city
parameters:
- name: city
type: string
required: true
http:
method: GET
url: "https://api.weather.com/current"
query:
q: "{{city}}"
몇 줄만으로 전통적인 REST 엔드포인트를 AI가 접근할 수 있게 만들 수 있습니다.
결론
이것은 REST vs. MCP가 아니라 REST + MCP입니다.
- REST는 앱‑서버 간 통신을 담당합니다.
- MCP는 AI‑툴 간 통신을 담당합니다.
AI‑우선 세상을 구축한다면, MCP 인터페이스가 핵심입니다.
이미 REST API를 MCP와 함께 래핑하고 계신가요? 경험을 공유해주세요!