[MCP] MCP 리소스(Resources)




이번 포스트에서는 MCP(Model Context Protocol)의 핵심 구성요소 중 하나인 리소스(Resources)에 대해 더욱 상세히 알아보겠습니다.


리소스란 무엇인가?

리소스는 MCP 서버가 클라이언트에게 제공하고 노출하는 데이터나 콘텐츠를 의미합니다. MCP는 클라이언트가 이러한 리소스를 읽고 LLM(Large Language Model)과의 상호작용에서 컨텍스트로 사용할 수 있도록 표준화된 방식을 제공합니다.

리소스는 애플리케이션 제어가 가능하도록 설계되어 있어, 클라이언트 애플리케이션이 리소스를 언제, 어떻게 사용할지 결정할 수 있습니다. 예를 들어, Claude Desktop과 같은 일부 클라이언트는 사용자가 명시적으로 리소스를 선택하도록 요구하며, 다른 클라이언트는 자동으로 리소스를 선택할 수도 있습니다. 서버 작성자는 이러한 다양한 상호작용 패턴을 고려하여 리소스를 구현해야 합니다.


리소스의 특징과 중요성

  • 표준화된 접근 방식: 각 리소스는 고유한 URI(Uniform Resource Identifier)를 통해 접근됩니다.
  • 다양한 데이터 포맷 지원: 텍스트, 이미지, JSON, 바이너리 등 다양한 데이터 형식을 지원합니다.
  • 보안과 효율적 관리: 접근 권한을 명확히 설정하여 데이터 관리의 효율성과 보안을 높입니다.

MCP의 리소스 유형

리소스는 다양한 유형을 지원하며, 주로 다음과 같은 형태가 포함됩니다.

1. 파일 콘텐츠

  • 텍스트 파일, 문서 등 파일 형태의 데이터입니다.

2. 데이터베이스 레코드

  • 데이터베이스에서 조회되는 레코드 데이터입니다.

3. API 응답

  • 외부 API로부터 실시간으로 가져오는 데이터입니다.

4. 라이브 시스템 데이터

  • 실시간 시스템 상태 및 모니터링 정보입니다.

5. 스크린샷 및 이미지

  • 이미지나 화면 캡처 등의 시각적 데이터를 제공합니다.

6. 로그 파일

  • 시스템이나 애플리케이션의 로그 데이터입니다.

7. 텍스트 리소스

  • UTF-8로 인코딩된 텍스트 데이터로 소스 코드, JSON, XML, 일반 텍스트 등이 포함됩니다.

8. 바이너리 리소스

  • base64로 인코딩된 바이너리 데이터로 이미지, PDF, 오디오, 비디오 등이 포함됩니다.

리소스 식별 및 접근 방식

리소스는 다음 형식의 URI를 통해 식별됩니다:

[protocol]://[host]/[path]

예시:

  • 파일 시스템: file:///home/user/documents/report.pdf
  • 데이터베이스: postgres://database/customers/schema
  • API: https://api.example.com/data
  • 화면 캡처: screen://localhost/display1

리소스 발견(Discovery)

클라이언트는 다음 두 가지 방식으로 사용 가능한 리소스를 찾을 수 있습니다.

직접 리소스 목록

서버는 resources/list 엔드포인트를 통해 명시적으로 리소스 목록을 제공합니다.

{
  "uri": "string",
  "name": "string",
  "description": "optional",
  "mimeType": "optional"
}

리소스 템플릿

동적 리소스의 경우 서버는 클라이언트가 유효한 URI를 구성할 수 있는 URI 템플릿을 제공합니다.

{
  "uriTemplate": "string",
  "name": "string",
  "description": "optional",
  "mimeType": "optional"
}

리소스 읽기

클라이언트가 리소스를 읽으려면 resources/read 요청을 보냅니다. 서버는 다음과 같은 응답을 반환합니다.

{
  "contents": [
    {
      "uri": "string",
      "mimeType": "optional",
      "text": "optional",
      "blob": "optional (base64 encoded)"
    }
  ]
}

리소스 업데이트 및 구독

MCP는 리소스에 대한 실시간 업데이트를 두 가지 방식으로 지원합니다.

목록 변경 알림

서버는 notifications/resources/list_changed 알림으로 리소스 목록 변경을 클라이언트에 알립니다.

콘텐츠 변경 구독

클라이언트는 특정 리소스에 대한 변경 사항을 resources/subscribe로 구독하고, 서버는 notifications/resources/updated로 변경 사항을 알립니다. 클라이언트는 언제든지 resources/unsubscribe를 통해 구독을 취소할 수 있습니다.


리소스 구현 모범 사례

  • 명확하고 설명적인 이름과 URI 사용
  • 설명과 MIME 유형을 명확히 제공
  • 동적 콘텐츠에는 리소스 템플릿 사용
  • 자주 변경되는 리소스에 구독 기능 제공
  • 오류 처리 시 명확한 오류 메시지 제공
  • 대규모 리소스 목록에는 페이징 고려
  • 리소스 콘텐츠를 적절히 캐시
  • 사용자 정의 URI 체계는 명확히 문서화

보안 고려 사항

  • 모든 리소스 URI 검증
  • 적절한 접근 제어 구현
  • 디렉터리 탐색 방지를 위한 파일 경로 정리
  • 민감 데이터 전송 시 암호화
  • MIME 유형과 데이터 처리에 주의
  • 속도 제한 및 감사 기능 구현
  • 장기 실행 읽기에 대한 타임아웃 설정

결론

리소스는 MCP 프로토콜에서 AI 모델이 외부 데이터를 효율적이고 안전하게 활용할 수 있도록 지원하는 중요한 요소입니다. 이러한 표준화된 접근 방식은 AI 애플리케이션의 성능을 크게 향상시키는 데 기여합니다.


참고 자료

  • https://modelcontextprotocol.io/introduction



Leave a Comment