PromleeBlog
sitemapaboutMe

posting thumbnail
Model Context Protocol 쉽게 이해하기 (MCP)
Mastering Model Context Protocol (MCP)

📅

🚀

들어가기 전에🔗

요즘 AI 모델, 특히 ChatGPT 같은 대형 언어 모델(LLM, Large Language Model)은 점점 더 똑똑해지고 있습니다. 하지만, 이 모델이 언제 어디서 어떤 정보를 가지고 작동하는지를 파악하기는 여전히 어렵습니다. 예를 들어, 모델이 어떤 문맥을 바탕으로 대화를 이어가는지, 어디서 얻은 데이터를 참고하고 있는지 등은 사용자 입장에서는 보이지 않는 '블랙박스'처럼 느껴지기도 합니다
이 문제를 해결하기 위해 등장한 개념이 바로
Model Context Protocol
, 줄여서 MCP입니다. 쉽게 말해 "모델이 어떤 맥락(Context)을 기반으로 작동하는지 정리하고 전달해주는 약속된 형식"이라고 보시면 됩니다
이번 글에서는 MCP가 무엇인지, 왜 필요한지, 어떻게 구성되고, 실제 애플리케이션에서는 어떻게 구현할 수 있는지까지 순서대로 살펴보겠습니다

🚀

모델과 문맥: 왜 '맥락'이 중요한가요?🔗

AI 모델이 문장을 생성하거나 질문에 답할 때, 단순히 질문만 보고 대답하는 것이 아니라 앞에 주어진 문맥이나 사용자의 의도, 설정된 환경 등을 함께 고려합니다. 이런 문맥(Context)은 생각보다 매우 다양합니다
예를 들어,
이처럼 다양한 정보가 모델에게 주어질 수 있으며, 이걸
일관되게 관리하고 연결해주는 규칙
이 필요합니다. MCP는 바로 이런 정보들을 표준화된 방식으로 묶어서 모델에게 전달할 수 있게 해주는
프로토콜
, 즉 '약속된 구조'입니다
👨‍💻
문맥은 쉽게 말해 ChatGPT에서 이전 대화 내용을 기억하는 것과 비슷합니다. 하지만 MCP는 그 기억을 더 체계적이고 일관되게 관리할 수 있도록 도와주죠

🚀

MCP란 무엇인가요?🔗

MCP(Model Context Protocol)는 OpenAI가 제안한 구조로, 대형 언어 모델에게 주어지는 문맥(Context)을 계층적으로 정리하는 형식입니다. 다양한 정보(사용자 정보, 대화 이력, 외부 문서, 시스템 지침 등)를 정해진 구조에 따라 구성하여 모델에게 전달하면, 모델이 더욱 일관성 있고 정확하게 작동할 수 있게 됩니다
MCP의 대표적인 구성 요소는 다음과 같습니다:
이 요소들을 기반으로 모델은 '지금 내가 누구와, 어떤 문맥에서, 어떤 역할로' 대화하는지를 이해하게 됩니다

🚀

왜 필요한가요?🔗

기존에는 이런 정보가 system prompt에 뭉뚱그려 들어가거나, 대화 로그에 섞여 들어가곤 했습니다. 하지만 이런 방식은
MCP
는 이런 단점을 보완하면서, 특히
GPTs
,
AI Assistant
,
워크플로우 자동화
같은 작업에서 강력한 도구로 활용됩니다

🚀

서버-클라이언트 관점에서 본 MCP🔗

실제 서비스에서는 대화형 모델이 단독으로 작동하지 않고, 대부분 클라이언트-서버 구조로 운용됩니다. 이때 MCP는 다음과 같은 구조로 작동합니다:

MCP 서버🔗

MCP 클라이언트🔗


🚀

실제 적용 사례🔗

ChatGPT의 Custom GPTs🔗

OpenAI에서 제공하는 GPT Builder를 이용하면 사용자는 UI 상에서 바로 system prompt, 도구, 파일, 지식 등을 지정할 수 있습니다. 이 UI에서 지정한 정보들이 실제로는 모두 MCP 형태로 내부에서 처리되고 있습니다
GPT를 만들면서 다음을 구성해볼 수 있습니다:

기업용 Assistant API🔗

기업들은 OpenAI API를 활용해 사내 문서나 정책을 기반으로 작동하는 AI 어시스턴트를 만들 수 있습니다. 이때 다음과 같은 방식으로 MCP를 구성합니다:
이런 식으로 구성하면 AI는 각각의 사용자나 상황에 맞는 맥락을 파악하고, 더 정확하고 일관성 있는 답변을 하게 됩니다

🚀

개인이 직접 MCP를 구성해보기🔗

OpenAI 플랫폼에서 GPTs(사용자 정의 GPT)를 만들 때, MCP는 자동으로 생성되고 관리됩니다. 하지만 사용자가 직접 MCP에 해당하는 구성 요소를 정의해보는 것도 가능합니다. 예시를 들어 설명해 보겠습니다

예제 1: 나만의 코드 도우미 GPT 만들기🔗

const mcp = {
  system: "당신은 친절한 TypeScript 전문가입니다. 코드를 자세히 설명해 주세요.",
  tools: ["code_interpreter"],
  files: ["ts-guide.pdf", "my-project/index.ts"],
  user: {
    name: "Lee",
    role: "학생",
    goal: "타입스크립트 학습을 돕는 코드 리뷰",
  },
  threads: [
    {
      role: "user",
      content: "제 제너릭 함수에서 타입이 왜 추론되지 않는지 모르겠어요"
    }
  ]
}
이런 식으로 MCP를 구성하면, 모델은 이 정보를 기반으로 일관되게 친절하고 구체적인 설명을 제공합니다

예제 2: 제품 기획 GPT 만들기🔗

이렇게 구성된 MCP는 실제로 사용자의 목적에 따라 모델의 행동과 답변 스타일까지 바꿔줍니다

🚀

예시: 나만의 MCP 기반 코드 리뷰 GPT 만들기🔗

다음은 Node.js + Express 서버와 React 클라이언트를 통해 MCP 기반 AI 코드 리뷰 서비스를 구현하는 간단한 예시입니다

서버 (Express)🔗

// server/mcpRouter.ts
import express from 'express'
import { OpenAI } from 'openai'
const router = express.Router()
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY! })
router.post('/ask', async (req, res) => {
  const { question, fileContent } = req.body
    const context = {
    system: '당신은 친절하고 꼼꼼한 TypeScript 코드 리뷰어입니다.',
    tools: ['code_interpreter'],
    files: [
      {
        name: 'index.ts',
        content: fileContent
      }
    ],
    user: {
      name: 'Lee',
      role: '학생'
    },
    threads: [
      { role: 'user', content: question }
    ]
  }
    const completion = await openai.chat.completions.create({
    model: 'gpt-4',
    messages: [
      { role: 'system', content: context.system },
      { role: 'user', content: `파일 내용:
${fileContent}` },
      ...context.threads
    ]
  })
    res.json({ answer: completion.choices[0].message.content })
})
export default router

클라이언트 (React)🔗

// client/components/Ask.tsx
import { useState } from 'react'
import axios from 'axios'
export default function Ask() {
  const [question, setQuestion] = useState('')
  const [file, setFile] = useState<File | null>(null)
  const [answer, setAnswer] = useState('')
    const handleSubmit = async () => {
    const text = await file?.text()
    const res = await axios.post('/api/ask', {
      question,
      fileContent: text
    })
    setAnswer(res.data.answer)
  }
    return (
    <div className="space-y-4">
      <input type="file" onChange={e => setFile(e.target.files?.[0] || null)} />
      <input
        value={question}
        onChange={e => setQuestion(e.target.value)}
        placeholder="질문을 입력하세요"
        className="border px-2 py-1"
      />
      <button onClick={handleSubmit} className="bg-blue-500 text-white px-4 py-2">요청하기</button>
      <pre className="bg-gray-100 p-2 whitespace-pre-wrap">{answer}</pre>
    </div>
  )
}

🚀

결론🔗

MCP는 단순한 기술 개념을 넘어서,
AI를 실제 업무에 투입하기 위한 설계 철학
에 가깝습니다. 문맥을 명확하게 분리하고, 재사용 가능하게 만들며, 모델의 동작을 투명하게 만든다는 점에서 개발자에게 매우 강력한 도구입니다
개인 개발자든 팀이든, 이 MCP 구조를 이해하고 활용한다면 더 안정적이고 일관된 AI 서비스를 구현할 수 있습니다

더 생각해 보기🔗

참고🔗