MCP vs REST API 차이: 언제 무엇을 써야 하나요?
REST API는 여러분의 코드가 호출하는 엔드포인트이고, MCP는 AI 앱이 실행 중에 서버의 도구를 찾아 호출하게 해 줍니다. 둘의 차이와 각각 언제 쓰는지 정리합니다.

REST API는 여러분의 코드가 호출하는 HTTP 엔드포인트의 모음이며, 그 코드는 해당 서비스 하나의 문서를 보고 작성합니다. MCP(Model Context Protocol)는 AI 애플리케이션을 위한 표준입니다. MCP 서버는 자신의 도구를 JSON Schema 입력과 함께 나열하고, 어떤 MCP 클라이언트든 실행 중에 그 도구를 찾아 호출할 수 있습니다. MCP 도구는 내부에서 API를 호출할 수 있으므로, 실제로 고를 것은 각 호출을 누가 주도하느냐, 즉 여러분의 코드냐 AI 모델이냐입니다.
MCP 쪽 내용은 MCP의 소개, 아키텍처, 서버 개념 페이지와 2025-11-25 명세의 도구, 트랜스포트 페이지에서 가져왔습니다. 예시로 든 Sume 호스팅 MCP 서버와 Developer API 내용은 MCP 도구와 게이트, Image API (영문) 문서, 그리고 서버의 현재 코드에서 가져왔습니다. 모두 2026-09-28에 확인했습니다.
API와 MCP의 차이는 무엇인가요?
REST API는 문서를 읽고 그에 맞춰 코드를 작성하는 개발자를 위해 만들어졌습니다. MCP는 실행 중에 서버가 무엇을 제공하는지 알아내는 프로그램을 위해 만들어졌습니다. MCP 문서의 용어로 호스트는 Claude Code 같은 AI 애플리케이션이며, 호스트는 연결하는 MCP 서버마다 MCP 클라이언트를 하나씩 만듭니다. MCP가 모델 자체의 도구 호출과 어떤 관계인지는 별개의 질문으로, MCP vs 함수 호출에서 다룹니다.
| 질문 | REST API | MCP |
|---|---|---|
| 누가 호출하나요? | 개발자가 이 서비스 하나를 위해 작성한 코드 | AI 애플리케이션 안의 MCP 클라이언트(서버마다 클라이언트 하나) |
| 호출하는 쪽은 무엇이 있는지 어떻게 아나요? | 코드를 작성하면서 읽는 문서나 API 레퍼런스 | 스키마가 포함된 도구 정의 배열을 반환하는 tools/list |
| 요청은 어떤 모습인가요? | POST /v1/images처럼 리소스 URL에 보내는 HTTP 메서드 | 도구 name과 arguments를 담은 tools/call 같은 JSON-RPC 2.0 메시지 |
| 무엇으로 전달되나요? | HTTP | 로컬 서버는 표준 입출력(stdio), 원격 서버는 Streamable HTTP |
| 실패는 어떻게 드러나나요? | HTTP 상태 코드 | 프로토콜 문제는 JSON-RPC 오류, 도구가 실패하면 isError: true인 결과 |
MCP 서버는 API를 감싼 래퍼일 뿐인가요?
그럴 수도 있지만, 꼭 그래야 하는 것은 아닙니다. MCP 문서에 따르면 도구는 데이터베이스에 쓰거나, 외부 API를 호출하거나, 파일을 수정하거나, 다른 로직을 실행할 수 있습니다. 또한 문서는 MCP가 컨텍스트를 주고받는 프로토콜만 다룰 뿐, AI 애플리케이션이 모델을 어떻게 쓰는지는 다루지 않는다고 설명합니다. 그래서 MCP 서버는 이미 있는 API 앞에 놓여 모델에게 필요한 것을 더할 수 있습니다. 이름이 붙은 도구, 설명, 입력 스키마입니다.
Sume 호스팅 MCP 서버가 그 예입니다. Sume 문서에 따르면 이 도구들은 선별된 공개 API 기능을 감싸며, HTTP API와 완전히 동일하지는 않습니다(어떤 Sume 인터페이스가 무엇을 다루는지).
같은 호출은 REST와 MCP에서 각각 어떤 모습인가요?
Sume에서 이미지 요청 하나를 두 방식으로 보내 보겠습니다. REST에서는 여러분의 코드가 POST /v1/images에 model과 prompt를 담아 보내며, 문서는 model을 필수로 표시합니다. model: "sume/auto"로 두면 Sume가 모델 계열을 고릅니다. 이 호출은 최대 30초 동안 블로킹된 뒤 이미지를 반환하고, 생성이 더 오래 걸리면 202와 함께 Job을 반환합니다.
MCP에서는 AI 클라이언트가 generate_image에 대한 tools/call을 보냅니다. Sume MCP 문서는 sume/auto로 라우팅하려면 payload.model을 생략하라고 하며, 모든 쓰기·유료 도구에는 idempotency_key가 필요합니다. 현재 코드에서 이 도구는 기본적으로 비동기로 제출하고 Job id로 응답하며, 에이전트는 그 Job을 jobs_wait로 기다립니다.
# REST: your code calls the endpoint
curl -X POST https://api.sume.com/v1/images \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "sume/auto", "prompt": "a red panda astronaut, studio lighting"}'
# MCP: the AI client sends this JSON-RPC message to https://mcp.sume.com/mcp
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "generate_image",
"arguments": {
"idempotency_key": "panda-001",
"payload": { "prompt": "a red panda astronaut, studio lighting" }
}
}
}API를 직접 호출하지 않고 MCP를 써야 할 때는 언제인가요?
다음에 무슨 일이 일어날지 누가 정하는지를 기준으로 고르세요. MCP 사이트가 내세우는 이 프로토콜의 장점은, AI 애플리케이션을 만들거나 그와 연동할 때 개발 시간과 복잡도를 줄여 주고, 한 번 만들어 어디에나 쉽게 연동할 수 있게 해 준다는 것입니다. 두 장점 모두 AI 애플리케이션이 호출한다는 것을 전제로 합니다.
- 백엔드, 스크립트, 큐 워커처럼 여러분의 코드가 정할 때는 API를 호출하세요. 각 요청과 재시도, 오류 처리를 직접 제어할 수 있습니다. Sume 기초 페이지는
api.sume.com을 공개 Developer API로 소개하며, 호스팅 MCP는 여전히 동작하지만 현재 주 경로에는 속하지 않는다고 설명합니다. AI 에이전트용 MCP vs CLI vs API는 에이전트 종류별로 맞는 Sume 인터페이스를 정리합니다. - 어떤 호출을 할지 AI 애플리케이션이 정할 때는 MCP 서버를 연결하세요. MCP 사이트는 MCP를 지원하는 클라이언트로 Claude, ChatGPT, Visual Studio Code, Cursor 등을 꼽습니다.
- 코드와 AI 클라이언트가 같은 서비스를 써야 할 때는 둘 다 쓰세요. 코드는 API를 호출하고, AI 클라이언트는 그 API를 감싼 MCP 서버를 통해 같은 기능에 접근합니다.
- 무언가를 바꾸거나 비용을 쓰는 호출에는 사람이 개입하도록 하세요. MCP 도구 명세는 도구 호출을 거부할 수 있는 사람이 항상 루프 안에 있어야 한다(SHOULD)고 말합니다.
출처
관련 글
에이전트 카테고리의 다른 글
- 원격 MCP 서버 URL: 무엇이고 어디서 찾나요?
원격 MCP 서버 URL은 서버 MCP 엔드포인트의 HTTPS 주소입니다. 어디서 받고 어디에 붙여 넣는지, 왜 열어 보는 페이지가 아닌지 설명합니다.
- 영상 에이전트 API: 브리프 하나로 편집된 완성 영상 받기
네, 영상 에이전트 API는 브리프를 편집까지 끝난 완성 영상으로 바꿉니다. Sume Agent Completions와 Format이 받는 것, 돌려주는 것, 비용, 하지 않는 일을 정리합니다.
- Agent Completions로 백엔드에서 Sume 영상 에이전트 실행
POST /v1/agent/completions는 Sume 에이전트 채팅과 같은 에이전트를 도구·미디어 생성과 함께 실행하고, 폴링하거나 웹훅으로 받는 비동기 실행 영수증을 돌려줍니다.
- 유료 API를 호출하는 AI 에이전트의 안전한 자동화
에이전트는 기본적으로 읽기 전용으로 두고 비밀 값은 로그에서 빼세요. 호스팅 MCP에서는 idempotency_key를 보내고, dry_run으로 미리 보고, max_spend_usd로 상한을 두세요.
작성자 Sume