최근 회사 월례조회시간에 진행된 기술 강의에서 MCP(Model Context Protocol)라는 흥미로운 개념을 접하게 되었다. 강의에서는 Azure Container Apps와 Node.js/TypeScript를 활용한 일정관리 MCP 구현 사례와 날씨 정보를 제공하는 MCP 예시를 통해 이 기술의 실용성을 확인할 수 있었다. 이에 MCP에 대한 더 깊은 이해를 위해 상세한 내용을 정리해보고자 한다.
❓MCP란 무엇인가
MCP(Model Context Protocol)는 AI 모델이 외부 데이터 소스와 안전하고 효율적으로 상호작용할 수 있도록 하는 표준화된 프로토콜이다. AI와 외부 프로그램이나 데이터베이스를 연결해주는 다리 역할을 한다. Claude와 같은 대화형 AI가 실시간 정보에 접근하고, 특정 도메인(회사 db, 각종 앱)의 데이터를 활용하여 더욱 정확하고 맥락적으로 적절한 응답을 제공할 수 있게 해주는 핵심 기술이다.
MCP의 주요 특징
표준화된 인터페이스: MCP는 AI 모델과 데이터 소스 간의 통신을 위한 일관된 규격을 제공한다. 이를 통해 개발자는 다양한 AI 모델에서 동일한 MCP 서버를 재사용할 수 있다.
보안성: 데이터 접근에 대한 명시적인 권한 관리와 샌드박스 환경을 제공하여 안전한 데이터 교환이 가능하다.
확장성: 플러그인 방식으로 새로운 기능을 쉽게 추가할 수 있으며, 기존 시스템과의 통합도 간편하다.
실시간성: 정적인 학습 데이터가 아닌 실시간 데이터에 접근하여 최신 정보를 활용한 응답 생성이 가능하다.
MCP가 필요한 이유
기존 AI는 학습된 데이터만 알고 있어서 실시간 정보나 개인 데이터에 접근하기 어려웠다. 예를 들어:
- "오늘 날씨 어때?" → AI가 모름 (실시간 정보 없음)
- "내 일정 확인해줘" → AI가 모름 (개인 데이터 접근 불가)
- "회사 재고 현황은?" → AI가 모름 (회사 시스템 연결 안됨)
MCP는 이런 한계를 해결해준다. AI가 필요할 때마다 외부 시스템에 직접 연결해서 최신 정보를 가져온다.
MCP 서버의 구조
MCP 서버는 크게 3가지 요소로 구성된다:
- 도구(Tools): AI가 사용할 수 있는 기능들. 예를 들어 '날씨조회', '일정확인', '이메일발송' 등
- 리소스(Resources): AI가 읽을 수 있는 데이터들. 예를 들어 '회사문서', '제품정보', '고객데이터' 등
- 프롬프트(Prompts): 특정 작업을 위한 지시사항 템플릿들
📚MCP 구현 방법
1. 개발 환경 설정
MCP 서버를 만들려면 Node.js와 TypeScript가 필요하다. 패키지도 몇 개 설치해야 한다:
npm init -y
npm install @modelcontextprotocol/sdk typescript @types/node
MCP 서버 개발을 위해서는 다음과 같은 환경이 필요하다:
// package.json 예시
{
"name": "my-mcp-server",
"version": "1.0.0",
"main": "dist/index.js",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0",
"typescript": "^5.0.0",
"@types/node": "^20.0.0"
}
}
2. 기본 MCP 서버 구조
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
class MyMCPServer {
private server: Server;
constructor() {
this.server = new Server({
name: 'my-mcp-server',
version: '1.0.0',
});
this.setupHandlers();
}
private setupHandlers() {
// 도구(tools) 등록
this.server.setRequestHandler('tools/list', async () => {
return {
tools: [
{
name: 'get_schedule',
description: '사용자의 일정 정보를 조회합니다',
inputSchema: {
type: 'object',
properties: {
date: { type: 'string', description: '조회할 날짜' }
}
}
}
]
};
});
// 도구 실행 핸들러
this.server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params;
switch (name) {
case 'get_schedule':
return await this.getSchedule(args.date);
default:
throw new Error(`알 수 없는 도구: ${name}`);
}
});
}
private async getSchedule(date: string) {
// 실제 일정 데이터베이스 조회 로직
return {
content: [
{
type: 'text',
text: `${date}의 일정: 오전 9시 회의, 오후 2시 프로젝트 검토`
}
]
};
}
}
3. Azure Container Apps 배포
강의에서 소개된 Azure Container Apps를 활용한 배포 과정은 다음과 같다:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/index.js"]
# Azure CLI를 통한 배포
az containerapp create \
--name my-mcp-server \
--resource-group my-resource-group \
--environment my-container-env \
--image my-registry/my-mcp-server:latest \
--target-port 3000 \
--ingress external
4. 날씨 MCP 구현 예시
강의에서 언급된 날씨 MCP의 간단한 구현 예시는 다음과 같다:
private async getWeather(location: string) {
const weatherAPI = 'https://api.openweathermap.org/data/2.5/weather';
// 실제로 OpenWeather API 같은 걸 호출
const response = await fetch(`${weatherAPI}?q=${location}&appid=${API_KEY}`);
const data = await response.json();
return {
content: [
{
type: 'text',
text: `${location}의 현재 날씨: ${data.weather[0].description}, 온도: ${data.main.temp}°C`
}
]
};
}
MCP와 API의 차이점
목적의 차이
API(Application Programming Interface)는 일반적인 소프트웨어 간 통신을 위한 인터페이스로, 다양한 용도와 형태를 가진다. 반면 MCP는 AI 모델이 외부 데이터에 접근할 때 발생하는 특수한 요구사항을 해결하기 위해 설계된 전용 프로토콜이다.
- 일반 API: 프로그램끼리 데이터를 주고받는 용도. 개발자가 직접 코드로 호출한다.
- MCP: AI가 필요할 때 자동으로 사용하는 용도. AI가 스스로 판단해서 호출한다.
일반 API 사용법:
// 개발자가 직접 작성
const response = await fetch('/api/weather?city=seoul');
const data = await response.json();
console.log(data.temperature);
MCP 사용법:
사용자: "서울 날씨 어때?"
AI: (알아서 MCP 서버에 날씨 조회 요청)
AI: "서울은 맑고 22도입니다"
🔹통신 방식의 차이
REST API는 HTTP 기반의 요청-응답 패턴을 사용하며, 클라이언트가 명시적으로 엔드포인트를 호출해야 한다. MCP는 AI 모델과 서버 간의 양방향 통신을 지원하며, 모델이 필요에 따라 동적으로 도구를 발견하고 활용할 수 있다.
🔹보안 및 권한 관리
일반적인 API는 API 키나 토큰 기반의 인증을 사용한다. MCP는 AI 모델의 특성을 고려한 세밀한 권한 관리와 샌드박스 환경을 제공하여, AI가 실행할 수 있는 작업의 범위를 명확히 제한한다.
🔹데이터 형태의 차이
API: JSON 형태로 자유롭게 데이터를 보낸다
{"temperature": 22, "condition": "sunny", "humidity": 60}
MCP: AI가 이해하기 쉬운 구조로 보낸다
{
"content": [{
"type": "text",
"text": "서울 날씨: 맑음, 기온 22도"
}]
}
🔹연결 방식의 차이
API: HTTP로 요청-응답 한 번 하고 끝
MCP: AI와 계속 연결되어 있으면서 필요할 때마다 소통
🔹보안 차이
API: API 키나 토큰으로 인증
MCP: AI가 할 수 있는 일을 미리 정해두고 제한한다
🔹에러 처리
API는 HTTP 상태 코드와 에러 메시지를 통해 오류를 처리한다. MCP는 AI 모델이 이해할 수 있는 구조화된 오류 정보를 제공하여, 모델이 적절한 대안을 선택할 수 있도록 지원한다.
🎯MCP의 장점과 활용 사례
주요 장점
컨텍스트 유지: AI 모델이 대화 중에 일관된 외부 데이터 접근이 가능하다.
개발 효율성: 표준화된 인터페이스로 개발 시간 단축과 코드 재사용성을 높인다.
유연성: 다양한 데이터 소스를 플러그인 형태로 쉽게 통합할 수 있다.
안정성: 명확한 프로토콜 규격으로 예측 가능한 동작을 보장한다.
실제 활용 사례
기업 내부 시스템: 직원 디렉토리, 프로젝트 관리 도구, 문서 관리 시스템과의 연동
고객 서비스: CRM 데이터, 주문 정보, 제품 카탈로그에 접근하여 개인화된 응답 제공
개발 도구: 코드 저장소, 이슈 트래킹, 배포 시스템과의 통합
콘텐츠 관리: 블로그, 뉴스, 문서 데이터베이스와의 연동을 통한 정보 제공
회사에서:
- "이번 달 매출 얼마야?" → 회계 시스템에서 데이터 가져옴
- "김대리 연락처 알려줘" → 직원 명부에서 찾아줌
- "회의실 예약해줘" → 예약 시스템에 자동 등록
고객 서비스:
- "내 주문 언제 배송돼?" → 배송 시스템 확인해서 알려줌
- "이 제품 재고 있어?" → 재고 관리 시스템 조회
- "환불 처리해줘" → 환불 시스템에 자동 요청
개발 업무:
- "이 버그 언제 고쳐졌지?" → Git 히스토리 검색
- "서버 상태 어때?" → 모니터링 시스템 확인
- "배포해줘" → 자동 배포 시스템 실행
강의에서 본 것처럼 일정관리 MCP를 실제로 쓰면:
- "내일 일정 어떻게 돼?"
- AI가 MCP로 캘린더 시스템 조회
- "오전 10시 팀회의, 오후 3시 고객 미팅 있습니다"
날씨 MCP도 마찬가지:
- "오늘 우산 가져갈까?"
- AI가 MCP로 날씨 API 호출
- "오늘 비 올 예정이니까 우산 챙기세요"
💿MCP의 동작 방식
- 사용자가 질문: "오늘 서울 날씨 어때?"
- AI가 MCP 서버에 요청: "날씨 정보 가져와줘"
- MCP 서버가 날씨 API 호출: 실제 날씨 데이터 조회
- AI가 답변 생성: "서울은 맑고 기온은 22도입니다"
📌결론
MCP는 AI를 실무에서 제대로 활용할 수 있게 해주는 핵심 기술이다. 그동안 AI는 일반적인 질문에만 답할 수 있었는데, 이제는 실시간 데이터에 접근해서 실용적인 도움을 줄 수 있다.
월례조회 강의에서 본 일정관리와 날씨 정보 사례처럼, 일상 업무나 개인 생활에서 바로 쓸 수 있는 기능들을 만들 수 있다. Azure Container Apps 같은 클라우드 서비스로 쉽게 배포도 가능하다.
아직은 새로운 기술이지만, AI가 점점 더 많은 곳에서 쓰이면서 MCP 같은 연결 기술의 중요성도 커질 것 같다. 개발자라면 미리 익혀두면 나중에 도움이 될 거다.
특히 회사에서 AI를 도입하려고 할 때, 기존 시스템과 연결하는 방법으로 MCP를 고려해볼 만하다. 생각보다 구현이 어렵지 않고, 한 번 만들어두면 계속 재사용할 수 있다는 점이 큰 장점이다.
다만 현재 MCP는 R&D나 금융, 의료처럼 대규모 데이터 처리와 높은 보안이 필요한 사업에는 바로 적용하기 어렵다. 실시간 데이터 연결 과정에서 발생할 수 있는 보안 취약점과 안정성 문제 때문이며, 아직 표준화와 검증이 충분히 이루어지지 않았기 때문이다. 그럼에도 불구하고 MCP는 계속 발전하고 있으며, 향후 보안과 신뢰성이 보완된다면 보다 폭넓게 활용될 수 있을 것으로 기대된다.
'CS(ComputerScience)' 카테고리의 다른 글
LLM / RAG란? (0) | 2025.09.03 |
---|---|
클로저(Closure)란 무엇일까? – 함수가 기억하는 환경 (0) | 2025.09.01 |