
혁신과도 같은 모습으로 LLM이 등장한 이래, 하루가 다르게 새로운 기술들이 등장하고 있습니다. 과거에는 질문을 입력받아 요약하고 답변을 생성하는 이른바 챗봇 기능 위주의 LLM이 주를 이뤘다면, 이제는 차세대 LLM으로써 Agentic AI가 각광을 받고 있습니다. 스스로 판단하고, 피드백을 입력받아 결과를 보정하고 연계 작업을 수행할 수 있는 AI이죠.
AI가 빠르게 발전하면서 한계도 명확히 드러났습니다. 맥락(Context)의 부족으로 인해 엉뚱한 답변을 하거나, 매번 답변이 달라지는 등의 즉흥성이 문제가 된 것인데요, 이에 Agentic AI가 충분히 성능을 발휘하기 위한 보조 기술도 많은 연구가 있었습니다.
대표적인 결과물이 MCP(Model Context Protocol)입니다. AI가 응답을 할 때 필요한 컨텍스트를 읽어오도록 하기 위한 프로토콜을 정의한 것이라고 할 수 있죠.
이번 글에서는 MCP의 개념과 등장 배경, 구성 요소, 그리고 향후 활용 가능성에 대해 정리해보겠습니다.
왜 MCP가 필요한가?
생성형 AI를 업무에 활용해 보신 분이라면, 종종 이런 상황을 겪으셨을 겁니다. 간단한 질문을 던졌을 뿐인데 굉장히 장황한 답변이 돌아오거나 원하는 결과와는 전혀 다른 답변이 돌아오는 경우, 또는 같은 질문인데도 매번 다른 답이 나오는 경우 말입니다.
이유는 명확합니다. AI 모델이 사용자의 상황이나 맥락을 정확히 알지 못한 채, 입력된 텍스트만 보고 답변을 생성하기 때문이죠.
이 문제를 해결하기 위해서 얼마 전 까지 사용하던 방법이 바로 프롬프트 엔지니어링(prompt engineering) 기법이었습니다. LLM이 이해하기 쉬운 프롬프트를 작성하기 위한 공학적 접근이죠.
너는 숙련된 Python 백엔드 개발자야.
지금부터 사용자 인증 API를 설계해야 해.
Spring Boot 환경에서 AccessToken/RefreshToken 기반으로 구성할 수 있는 방법을 설명해줘.
이런 방식은 분명 직관적이고 유용했으며 비교적 간단했지만, 다음과 같은 한계도 존재했습니다.
- 역할, 목적, 지시사항이 모두 자연어 안에 뒤섞여 있어 구조적으로 분리하기 어려움
- 모델이 어느 부분을 더 중요하게 여겨야 하는지 우선순위를 명확히 이해하지 못할 수 있음
- 같은 요청이라도 작성 방식에 따라 응답의 품질이 달라짐
특히 복잡한 태스크나 협업형 시스템에서는 이러한 자연어 기반 프롬프트만으로는 컨텍스트 일관성 유지가 쉽지 않았습니다.
비슷한 맥락에서, LLM을 이용한 응용 서비스를 만들다 보면 마주하게 되는 문제 중에 다음과 같은 것 들도 있었습니다.
- 입력 프롬프트 내에 모든 컨텍스트를 압축해야 하다 보니 문장이 길어지고 구조가 복잡해짐
- 유저의 요청, 역할, 과거 대화 기록 등을 일관되게 관리하기 어려움
- 멀티턴 대화나 멀티에이전트 시스템에서 상태 전달이 불안정하게 이루어짐
예를 들어, 어떤 사용자가
이전에 말했던 코드에서 로그인 부분만 다시 설명해줘
라고 요청했다고 가정해 봅시다. 해당 이전 대화나 맥락을 명확히 기억하거나 재구성하려면 프롬프트만으로는 부족합니다. 관련된 문서가 함께 전달되어야 비로소 제대로 동작할 수 있죠. 이는 AI를 큰 규모에서 활용함에 있어서 큰 어려움으로 다가왔습니다.
바로 이런 문제를 시스템 수준에서 해결하고자 만들어진 프로토콜이 Model Context Protocol(MCP)입니다. MCP를 사용하면 위와 같은 정보를 구조화된 데이터 형태로 별도로 전달하고, 프롬프트는 단지 위에서 한 것과 동일하게 "로그인 부분만 다시 설명해줘"라고 해도 됩니다.
MCP를 적용했을 때 얻을 수 있는 효과는 다음과 같습니다.
1. AI가 상황을 정확히 이해하고 일관된 응답을 제공합니다.
2. 반복 작업 시 매번 같은 정보를 입력할 필요가 없습니다.
3. 팀 단위로 문맥을 공유하고 재사용할 수 있습니다.
이같은 MCP의 장점은 팀 단위 작업, 혹은 프로젝트를 수행할 때 강하게 드러납니다. 프로젝트 전체에서 AI가 일관된 응답과 결과를 생성하기 위해서는 MCP와 같은 체계적인 컨텍스트 관련 서비스가 필수적이죠.
MCP의 정의
Model Context Protocol (MCP)의 정의는 아래와 같습니다.
LLM과의 상호작용에서 *"문맥(Context)"을 구조적으로 정의하고 주고받기 위한 형식화된 규약(protocol)*
다시 말해, "AI 모델이 무엇을 알고 있어야 하는지를 명시적으로 기술하고 전달하는 방법"이라고 할 수 있죠. 가령
커머스 프로덕트를 만들기 위해서 개발자 몇 명이나 프로젝트에 투입되어야 할까?
라는 질문에 AI가 답을 하기 위해서는 어떤 커머스 프로덕트를 만들 것인지, 그 기능은 어떻게 될지, 기간은 얼마나 될지, 투입 가능한 예산이나 기대하는 고객 층은 어떻게 될지 등등을 AI가 알고 있어야 합니다. 이 정보를 MCP에 맞추어 구성해두면 손쉽게 컨텍스트를 전달할 수 있다는 거죠.
다만 MCP는 단순한 API 포맷이 아닙니다. 역할, 컨텍스트, 대상 객체, 명령, 출력 포맷 등을 명확히 분리하고 구조화된 형태로 모델에 전달함으로써, 일관된 동작과 응답을 가능하게 하는 프로토콜이라고 할 수 있습니다.
MCP가 바꾼 방식: 명시적 구조화
MCP는 이런 문제를 구조적이고 선언적인 방식으로 해결합니다.
앞서 본 것처럼 role, context, instruction 등을 별도로 분리해 전달함으로써, 이제는 "너는 ~~이고, ~~ 해야 해" 같은 서술형 프롬프트 없이도 모델이 정확히 어떤 역할로, 어떤 배경에서, 무엇을 해야 하는지를 인식할 수 있게 된 것이죠. 덕분에 MCP가 있는 환경에서는 더 이상 장황한 역할 부여, 배경 설명, 지시 문장을 자연어로 작성하지 않아도 됩니다.
모델은 이미 구조화된 문맥 정보를 바탕으로 동작하며, 개발자는 오히려 비즈니스 로직 자체에 집중할 수 있게 된 것이죠. 이 변화는 단순한 문장 방식의 변화가 아니라, LLM을 활용하는 방식 자체가 패러다임 전환을 맞이하고 있다는 신호이기도 합니다.
MCP의 구성 요소
MCP는 보통 다음과 같은 필드로 구성됩니다:
| 항목 | 설명 |
|---|---|
role |
이 요청에서 모델이 수행할 역할 (예: ‘프론트엔드 개발자’, ‘데이터 분석가’) |
context |
지금 모델이 알아야 할 핵심 문맥 또는 배경지식 |
instruction |
사용자의 실제 요청이나 지시 |
input |
사용자가 제공한 원본 데이터 (예: 코드, 텍스트, 이미지 등) |
output_format |
원하는 응답 포맷 (예: JSON, 표, 마크다운 등) |
이 구조 덕분에 모델은 더 적은 혼란으로 요청을 이해하고, 예측 가능한 형태의 응답을 생성할 수 있습니다.
기존 방식과의 차이점
| 비교 항목 | 기존 프롬프트 방식 | Model Context Protocol |
|---|---|---|
| 문맥 전달 | 자연어 안에 암시적으로 포함 | 별도 필드로 명시 |
| 역할 설정 | 지시문 내에 서술 ("너는 지금…") | role 필드에 명확히 지정 |
| 응답 형식 | 모델 재량에 따름 | output_format으로 고정 가능 |
| 복잡한 작업 | 일관성 낮음 | 추론 가능성 높아짐 |
실제 활용 예시
아래는 MCP 포맷으로 구성된 예시입니다. 예전의 프롬프트 엔지니어링에서 다루었던 항목이 MCP 포맷으로 들어간 것을 볼 수 있죠?
{
"role": "Java Backend Developer",
"context": "Spring Boot 3 기반의 API 서버에서 로그인 기능 구현 중입니다. Access Token과 Refresh Token 구조를 사용합니다.",
"instruction": "비밀번호 변경 시 Refresh Token을 무효화하는 코드를 작성해줘",
"input": "",
"output_format": "Java Code + 간단한 설명"
}
이렇게 명확히 구조화된 요청을 받으면, 모델은 더 정확하고 일관된 코드를 생성할 수 있습니다.
왜 MCP가 중요해질까?
앞으로 LLM을 단순 질의응답이 아니라 하나의 구성요소로 통합해 나가려면, 다음과 같은 니즈가 생깁니다.
- 멀티턴 대화에서 상태의 분리 및 유지
- 다양한 역할(Role)을 가진 에이전트 기반 시스템
- 명확한 출력 포맷을 요구하는 파이프라인 자동화
- 코드, 문서, 이미지 등 멀티모달 입력의 통합 처리
이러한 모든 요구사항을 만족시키기 위해서는 자연어만으로는 한계가 있으며, 명시적이고 형식화된 컨텍스트 관리 방식, 즉 MCP 같은 프로토콜 기반 접근이 필수적입니다.
다음 포스팅에서는 MCP의 구조에 대해서 좀더 기술적으로 알아보도록 하겠습니다.