리소스란 무엇인가요?
MCP에서 리소스는 서버가 AI 모델에게 제공하는 데이터와 콘텐츠입니다. 쉽게 말해, AI 모델이 참고할 수 있는 모든 종류의 정보라고 생각하면 됩니다.
리소스의 예시:
- 파일 내용 (코드, 문서, 로그 등)
- 데이터베이스 레코드
- API 응답 데이터
- 시스템 상태 정보
- 이미지나 스크린샷
- 그 외 다양한 데이터
리소스 식별 방법 (URI)
각 리소스는 고유한 URI(Uniform Resource Identifier)로 식별됩니다. 이는 웹 주소(URL)와 비슷한 개념입니다:
[프로토콜]://[호스트]/[경로]
예시:
file:///home/user/documents/report.pdf
(파일)postgres://database/customers/schema
(데이터베이스)screen://localhost/display1
(화면 캡처)
리소스 유형
MCP 리소스는 두 가지 주요 유형이 있습니다:
- 텍스트 리소스: UTF-8 인코딩된 텍스트 데이터
- 소스 코드, 설정 파일, 로그, JSON/XML 데이터 등
- 바이너리 리소스: base64로 인코딩된 바이너리 데이터
- 이미지, PDF, 오디오/비디오 파일 등
리소스 발견 방법
클라이언트가 사용 가능한 리소스를 찾는 방법은 두 가지입니다:
- 직접 리소스 목록: 서버가
resources/list
엔드포인트를 통해 구체적인 리소스 목록을 제공
{
"uri": "file:///logs/app.log",
"name": "애플리케이션 로그",
"description": "앱 로그 파일",
"mimeType": "text/plain"
}
- 리소스 템플릿: 동적 리소스를 위한 URI 템플릿 제공
{
"uriTemplate": "file:///logs/{date}.log",
"name": "날짜별 로그 파일",
"description": "특정 날짜의 로그 접근"
}
리소스 읽기
클라이언트가 리소스를 읽으려면:
resources/read
요청을 리소스 URI와 함께 보냅니다- 서버는 리소스 내용을 응답합니다:
{
"contents": [
{
"uri": "file:///logs/app.log",
"mimeType": "text/plain",
"text": "로그 내용이 여기에..."
}
]
}
리소스 업데이트
MCP는 리소스의 실시간 업데이트도 지원합니다:
- 목록 변경 알림: 서버가 사용 가능한 리소스 목록이 변경되면 클라이언트에 알림
- 내용 변경 구독:
- 클라이언트가 특정 리소스를 구독 (
resources/subscribe
) - 리소스가 변경되면 서버가 알림 (
notifications/resources/updated
) - 클라이언트가 최신 내용을 가져옴 (
resources/read
) - 필요 없으면 구독 해제 (
resources/unsubscribe
)
실생활 예시로 이해하기
회사에서 일하는 상황을 가정해 봅시다:
- 당신(사용자)이 AI 어시스턴트에게 “우리 회사 최신 분기 보고서를 분석해줘”라고 요청합니다.
- AI 어시스턴트(클라이언트)는 파일 시스템 MCP 서버에 어떤 파일이 있는지 물어봅니다 (
resources/list
). - 서버는 사용 가능한 파일 목록을 보내줍니다:
- file:///company/reports/Q3_2024.pdf (3분기 보고서)
- file:///company/reports/Q2_2024.pdf (2분기 보고서)
- AI는 가장 최신 보고서를 선택하고 내용을 요청합니다 (
resources/read
). - 서버가 PDF 내용을 바이너리 데이터로 보내줍니다.
- AI는 이 데이터를 처리하여 분석 결과를 제공합니다.
보안 고려사항
리소스를 안전하게 제공하기 위한 중요 사항:
- 모든 리소스 URI 검증
- 적절한 접근 제어 구현
- 디렉토리 탐색 공격 방지를 위한 경로 검사
- 바이너리 데이터 처리 시 주의
- 리소스 접근에 대한 속도 제한 고려
- 민감한 데이터 전송 시 암호화
이렇게 MCP 리소스는 AI 모델이 다양한 데이터 소스의 정보를 참조하여 더 정확하고 맥락에 맞는 응답을 제공할 수 있도록 돕는 핵심 메커니즘입니다.