NxtCloud NxtCloud Workshop / Claude Code & MCP 핸즈온
로그인

Lab 05. MCP 이론 심화

이 랩에서 다루는 것
  • 왜 MCP 인가: LLM 의 한계와 USB-C 비유로 본 표준화의 가치
  • 구성 요소: Host · Client · Server 의 역할과 비유
  • 작동 원리: 모델이 도구를 부르고(tool call) 결과를 받아 답하기까지
  • 통신 방식: JSON-RPC 와 전송(stdio / http)
  • MCP vs 일반 API: 무엇이 다른가
  • 활용 사례 · scope · 보안: 어디에 쓰고, 어디에 저장하고, 무엇을 조심하나
왜 MCP 인가: AI 를 위한 USB-C

MCP(Model Context Protocol) 는 LLM 애플리케이션이 외부 시스템(데이터·도구)과 표준화된 방식으로 상호작용하도록 설계된 개방형 프로토콜입니다. Anthropic 이 2024년 11월 공개했고, 다양한 기기를 하나의 포트로 잇는 USB-C 에 비유됩니다.

왜 필요할까요? LLM 단독으로는 한계가 분명합니다.

한계설명
제한된 데이터 접근학습 시점에 주입된 데이터에만 의존
실시간 정보 부족학습 컷오프 이후의 최신 정보를 반영하지 못함
확장성 제한새 도구·기능을 더하려면 모델을 다시 학습해야 하는 경우가 많음

플랫폼마다 제각각이던 플러그인 방식은 오히려 혼란을 키웠고, MCP 는 이를 하나의 표준으로 정리합니다. 연결할 도구가 늘수록 개별 통합은 폭발합니다 — 호스트 M개 × 서비스 N개 = M×N 개의 일회용 연결. MCP 는 그 사이에 표준 어댑터를 끼워 M+N 으로 줄입니다.

한 줄: MCP ≈ RAG(외부 지식 검색) + 도구 실행(API·DB·파일) + 표준화. 셋을 한 규격으로 묶은 것.

표준이 주는 가치는 네 가지로 요약됩니다.

속성설명
확장성(Extensibility)외부 도구·서비스로 모델 기능을 확장
최신성(Recency)실시간 데이터 접근으로 최신 정보 제공
상호운용성(Interoperability)다양한 시스템·도구 간 일관된 통신
개방성(Openness)개방형 표준으로 생태계 확장 촉진
구성 요소: Host · Client · Server

MCP 는 세 역할로 구성됩니다. USB 에 빗대면 직관적입니다.

구성역할비유
Host에이전트를 실행하는 애플리케이션. LLM 이 입력을 이해해 도구를 고르고 입력을 작성하면, 오케스트레이션 레이어가 Client 에 지시노트북 — 데이터를 요청
ClientHost 안에서 서버 1개와 1:1 로 연결되는 커넥터. 요청을 표준 형식으로 가공해 전달하는 중개자(주로 stdio)USB-C 허브
Server실제 도구·데이터를 노출(DB·검색·계산 등). Tool·Resource 를 제공하고 결과를 반환USB 장치 — 마우스·키보드·외장하드

Host 는 서버마다 클라이언트를 하나씩 두고, 각 서버가 외부 시스템과 이야기합니다.

graph TD
H["Host — Claude Code (LLM + 오케스트레이터)"]
H --> C1["Client A"]
H --> C2["Client B"]
C1 --> S1["Server: Playwright"]
C2 --> S2["Server: PostgreSQL"]
S1 --> E1["브라우저"]
S2 --> E2["데이터베이스"]
🎯 체크포인트
  • Host · Client · Server 를 각각 한 문장으로 설명할 수 있다
작동 원리: 모델이 도구를 부르는 흐름

한 문장으로 요약하면 이렇습니다.

Model generates ‘tool call’ → Host executes → Model receives result → Model answers 모델이 도구 호출을 만들고 → 호스트가 실행하고 → 모델이 결과를 받아 → 모델이 답한다.

기본 작동 흐름 5단계

  1. 요청 생성 — 모델(호스트)이 특정 정보·기능에 대한 요청을 생성
  2. 요청 전송 — MCP 클라이언트가 이 요청을 표준 형식으로 변환해 서버로 전송
  3. 요청 처리 — 서버가 요청을 해석하고 필요한 외부 데이터·도구에 접근
  4. 응답 반환 — 처리 결과를 서버가 표준 형식으로 클라이언트에 반환
  5. 응답 활용 — 모델이 받은 정보를 종합해 사용자에게 최종 답변

시나리오: 실시간 날씨 질문

  1. 사용자가 “이번 주 서울 날씨를 알려줘”라고 질문
  2. LLM 이 입력을 해석하고 어떤 Tool 이 필요한지 판단
  3. 그 Tool 을 어떻게 호출할지 결정 — 예: "이번 주 서울 날씨를 알려줘"weather_api.getForecast(location="Seoul", range=7)
  4. LLM 의 Tool 호출 요청이 오케스트레이션 레이어를 거쳐 MCP 클라이언트로 전달
  5. 지정된 Tool(MCP Server)에 HTTP 등으로 요청 전달 (예: 기상청 API)
  6. 서버 응답을 클라이언트가 받아 다시 LLM 으로 반환
  7. LLM 이 종합해 “이번 주 서울 평균 기온은 24도이고, 수요일에 강한 비가 올 예정입니다” 라고 답변
sequenceDiagram
  participant User as 사용자
  participant Host as Host
  participant Client as Client
  participant Server as Server
  User->>Host: "이번 주 서울 날씨 알려줘"
  Note right of Host: 모델이 입력 해석 → Tool 선택 + Input 생성
  Host->>Client: tool 호출 전달 (weather_api.getForecast)
  Client->>Server: 표준 요청 전송 (HTTP 등)
  Server-->>Client: 날씨 데이터 응답
  Client-->>Host: Tool 응답 전달
  Host-->>User: 자연어로 종합 답변
🎯 체크포인트
  • “tool call → 실행 → 결과 수신 → 답변” 흐름을 직접 설명할 수 있다
통신 방식: JSON-RPC 와 전송

MCP 메시지는 JSON-RPC 2.0 형식입니다. 클라이언트가 서버에 “어떤 도구가 있니”(tools/list), “이 도구 실행해”(tools/call) 같은 요청을 보내고 서버가 응답합니다. 대체로 JSON 으로 주고받아 웹 시스템과의 호환성이 높습니다.

요청

{
  "action": "get_weather",
  "parameters": { "location": "Seoul", "units": "metric" }
}

응답

{
  "status": "success",
  "data": { "temperature": 25, "conditions": "Sunny", "humidity": 60 }
}

전송 방식은 두 가지입니다.

전송 방식설명쓰임
stdio로컬 프로세스와 표준 입출력으로 통신로컬 서버(기본)
http원격 서버와 HTTP 로 통신원격 서버

서버가 노출하는 것은 크게 세 가지: Tools(실행 가능한 동작), Resources(읽을 수 있는 데이터), Prompts(미리 만든 프롬프트).

MCP vs 일반 API
특성일반 APIMCP
목적특정 기능 제공AI 모델의 컨텍스트 확장
통합 방식서비스마다 개별 코드표준 프로토콜 하나
도구 발견문서 보고 직접 구현서버가 자기 도구를 기술(self-describing), 동적 발견
데이터 형식구조화된 데이터자연어 처리에 최적화된 형식
상호작용주로 단방향대화형(conversational)

한 줄: API 가 “각자 말이 다른 외국어들” 이라면, MCP 는 “공용어” 입니다.

활용 사례: 어디에 쓰나
  • 정보 검색·최신화 — 검색 엔진 통합, DB 쿼리, 뉴스·주가·날씨 같은 실시간 업데이트
  • 외부 도구·서비스 — 코드 실행, 이미지 생성, 문서 변환(PDF 파싱·요약·번역), 수학 계산
  • 기업 시스템 통합 — CRM·ERP 연동, 내부 지식베이스 접근, 이메일·일정 등 업무 자동화
  • 개인화 서비스 — 일정 관리, 웨어러블 건강 데이터, 개인 금융 조언

공통점: 모델이 모르거나 시시각각 바뀌는 정보를, 표준 통로로 그때그때 가져온다는 것.

scope: 어디에 저장하나

claude mcp add 로 붙인 서버는 scope 에 따라 저장 위치와 공유 범위가 다릅니다.

scope저장 위치적용 범위비밀값
local(기본)~/.claude.json(프로젝트별)이 프로젝트, 나만안전(커밋 안 됨)
project./.mcp.json이 프로젝트, 팀 공유(커밋)⚠️ 비밀값 금지
user~/.claude.json(전역)내 모든 프로젝트안전

원칙: 자격증명이 들어가는 서버는 local 또는 user 로. project.mcp.json 은 커밋되므로 비밀값을 넣으면 유출됩니다.

보안: MCP 는 기본 인증이 없다

MCP 는 강력하지만, 프로토콜 자체에 기본 인증이 없습니다. 그래서 무엇을 연결하느냐만큼 어떤 권한으로 연결하느냐가 중요합니다.

  • 읽기 전용 우선: 쓰기가 필요 없으면 읽기 전용으로 (DB 는 Lab 06 에서 이중 방어)
  • 최소 권한: 노출하는 도구를 꼭 필요한 것만
  • 신뢰된 서버만: archived · 취약 이력이 있는 서버는 금지
  • 간접 프롬프트 인젝션 주의: 외부 콘텐츠(웹·문서)가 지시문처럼 작동할 수 있음
  • 비밀값은 local/user scope: .mcp.json 커밋 금지
🎯 체크포인트
  • “무엇을 + 어떤 권한으로 연결하나” 관점에서 MCP 보안을 설명할 수 있다

다음 단계

이론을 잡았으니 본격 실습입니다. Lab 06. MCP 실습 에서 읽기 전용 DB 를 붙이고, 직접 만든 MCP 서버를 호출해 봅니다.