비슷해 보이지만 서로 다른 질문에 답하는 셋이야. 이 차이가 한 번 또렷해지면 '이거 MCP 로 해야 하나' 를 두고 빙빙 도는 논쟁이 사라져.
- Function calling 은 LLM API 하나가 가진 기능이야. 네 코드 와 모델 provider 사이를 잇는 선의 모양을 정해. Provider 는 네가 요청에 실어 보냈으니까 네 tool 을 알고, 그 밖에는 아무도 몰라. 한 application 안의 배관이지.
- MCP 는 어느 client 든 어느 server 든 갖다 쓸 수 있게 해주는 protocol 이야. Contract 가 서로 따로 만들어진 host 와 server 사이에 놓여. Server 의 tool 은 붙어 있는 client 전부에게 보이고, 그 연결을 지배하는 건 모델이 아니라 protocol 이야. Application 과 application 사이의 배관인 셈이지.
- REST/OpenAPI 는 고전적인 웹 API contract 야. 아무 HTTP client 나 쓸 수 있게 resource 와 method 와 status code 를 정해. 한쪽 끝에 LLM 이 앉아 있든 말든 상관 안 해. LLM 이 있기 한참 전부터 정확성을 따져온 물건이야. 범용 배관이고.
짧은 결정 트리는 이래. App 하나 안에서 모델 하나로 만든다면 function calling. 여러 AI product 가 갖다 쓸 tool 을 만든다면 MCP. 브라우저든 모바일이든 통합 스크립트든 AI agent 든 아무나 쓸 공개 API 라면 REST/OpenAPI. 그리고 이 셋은 층으로 쌓여. MCP server 의 tool 은 안에서 REST API 를 감싸고 있는 경우가 많고, LLM 은 그 MCP server 의 tool 을 provider 의 function-calling 모양으로 받아 써. 층마다 자기 값이 있어.