[00:00]
요즘 모든 사람들이 MCP 서버를 사용하고 있지만
[00:02]
실제로 프로덕션 준비가 된
[00:04]
MCP를 구축하고 배포하는 방법을 아는 사람은 거의 없습니다.
[00:07]
이것이 바로 이 영상에서
[00:08]
처음부터 다룰 내용입니다.
[00:11]
그리고 여러분이 지금 당장 사용할 수 있는
[00:12]
템플릿을 사용해서
[00:14]
놀라울 정도로 간단하게 만들어보겠습니다.
[00:16]
Anthropic이 지난 11월에
[00:18]
모델 컨텍스트 프로토콜을 출시했을 때
[00:20]
정말 인상적이었습니다.
[00:23]
마침내 우리의 AI 에이전트를 외부 도구와 연결할 수 있는
[00:26]
방법이 생겼습니다.
[00:28]
이것은 우리의 에이전트와
[00:30]
Cursor와 Claude 같은 코딩 어시스턴트에게
[00:32]
우리의 시스템과 데이터에 연결해서
[00:35]
슈퍼파워를 제공하는 방법입니다.
[00:37]
그리고 MCP는 올해 3월부터
[00:39]
정말 폭발적으로 성장했습니다.
[00:41]
모든 사람이 주목하고 있었고
[00:43]
지금도 여전히 주목받고 있으며
[00:45]
모든 곳에서 채택되고 있습니다.
[00:48]
하지만 처음 인기를 끌었을 때
[00:50]
여전히 큰 문제가 있었습니다.
[00:52]
본질적으로 아직 장난감 수준이었습니다.
[00:54]
보안 취약점이 있었고
[00:57]
인증이 없었으며
[00:59]
문서화는 기껏해야
[01:01]
부족한 상태였고
[01:03]
원격 MCP 서버를 배포할 방법이 없었습니다.
[01:06]
직접 실행하려면
[01:08]
MCP 서버를 다운로드해서
[01:09]
자신의 컴퓨터에 호스팅해야 했습니다.
[01:12]
하지만 친구들, 이제 모든 것이 바뀌었습니다.
[01:14]
모든 사람이 Cloud Code에
[01:17]
집중하고 있는 동안
[01:19]
그리고 그럴 만한 이유가 있지만
[01:22]
Anthropic은 조용히
[01:23]
우리 모두가 기다려온
[01:26]
MCP를 위한 프로덕션 인프라를
[01:28]
구축해왔습니다.
[01:30]
그들은 실제로 확장 가능한
[01:32]
프로토콜을 위한 새로운 전송 방식인
[01:34]
스트리밍 HTTP를 가지고 있습니다.
[01:36]
정말 간단하게 만들어주는
[01:38]
Cloudflare 같은 플랫폼과 함께 말이죠.
[01:41]
그래서 Anthropic은 정말로
[01:43]
MCP를 멀리 밀어붙이고 있습니다.
[01:46]
그리고 제가 말씀드리고 싶은 것은
[01:48]
그들이 최근에 Claude, Cloud Code,
[01:50]
그리고 MCP로 정말 압도적인 성과를
[01:52]
거두고 있다는 것입니다.
[01:54]
지금부터 저는 여러분께
[01:56]
프로덕션 준비가 된 MCP 서버를
[01:58]
처음부터 구축하는 방법을
[02:00]
정확히 보여드리겠습니다.
[02:01]
이것이 우리가 모든 AI 에이전트에
[02:03]
힘을 실어주게 될 미래의 방법입니다.
[02:05]
그리고 이것은 여러분을 위해
[02:08]
제가 만든 이 매우 포괄적인
[02:10]
템플릿으로 시작됩니다.
[02:12]
이것이 오늘 우리가 다룰 내용입니다.
[02:14]
그리고 여기서 저는 MCP 서버에
[02:16]
도구를 추가하고 인증과
[02:19]
모니터링, 보안, 배포를
[02:20]
처리하는 모든 모범 사례를
[02:22]
따르고 있습니다.
[02:23]
이것은 단순한 튜토리얼이 아닙니다.
[02:26]
이것은 여러분이 가져다가
[02:27]
원하는 어떤 MCP 서버든
[02:29]
구축하는 데 사용할 수 있는
[02:31]
완전한 블루프린트입니다.
[02:32]
우리는 함께 구축하고,
[02:35]
Cloudflare에 배포하고,
[02:37]
그리고 AI 코딩 어시스턴트를 사용해서
[02:39]
이것을 시작점으로 사용하여 원하는 것을 구축하는 방법까지 보여드리겠습니다.
[02:42]
프로덕션 환경에서 사용할 수 있도록 배포할 것입니다. 그리고 Cloudflare에 배포할 예정입니다.
[02:44]
Cloudflare가 이 영상을 후원하는 것은 아닙니다.
[02:46]
그들은 단순히
[02:48]
원격 MCP 배포를 위한 최고의 플랫폼일 뿐입니다.
[02:49]
그리고 저는 특히 이 플랫폼을 다뤄달라는
[02:51]
많은 요청을 받았습니다. 그래서 드디어
[02:54]
여기 있습니다. 또한 우리는
[02:55]
새로운 스트리밍 가능한 HTTP 전송 계층을 지원할 것이고
[02:58]
그리고 레거시 목적으로
[03:00]
SSE를 지원할 것입니다. 그리고 이 템플릿을 위해
[03:03]
매우 간단하지만 여전히 실용적인 데모를 만들기 위해
[03:05]
우리는 기본적인 MCP 서버를 구축하고 있습니다.
[03:07]
이것은 PostgreSQL 데이터베이스와 함께 작동합니다.
[03:09]
데이터베이스와 채팅하는 것과 같은
[03:11]
MCP 서버입니다. 그래서 여러분은
[03:14]
PostgreSQL 계정에 대한 연결 정보를 제공하기만 하면 됩니다.
[03:15]
이것에 대해서는 조금 후에 다루겠습니다.
[03:17]
그리고 우리는 세 가지 도구를 가지고 있습니다.
[03:18]
하나는 데이터베이스에 있는 모든 테이블을 나열할 수 있는 것입니다.
[03:20]
데이터베이스에 있는 모든 테이블을 나열할 수 있습니다.
[03:22]
다른 하나는 읽기 전용 쿼리를 실행하는 것입니다.
[03:24]
데이터베이스에서 쿼리를 실행하고 그 다음은
[03:27]
쓰기 작업을 실행하는 것입니다. 그리고
[03:29]
여기서 GitHub OAuth가 등장합니다.
[03:31]
왜냐하면 우리는
[03:32]
이 MCP 도구를 보호하는 인증을 가질 것이기 때문입니다.
[03:35]
구체적으로 말하면, 특정 GitHub 사용자들만이
[03:37]
이 도구를 보고 사용할 수 있습니다.
[03:40]
그리고 우리가 이것을
[03:42]
TypeScript MCP 서버로 구축하는 이유는
[03:45]
TypeScript가 MCP 구축을 위한 최고의 언어가 되고 있기 때문입니다.
[03:47]
저는 제 채널에서 TypeScript를 충분히 다루지 않았고
[03:49]
또한 이것은 최고의 프로그래밍 언어입니다.
[03:51]
언어이며 원격 MCP를 구축하는 데 사용할 수 있습니다.
[03:53]
Cloudflare에 배포하고 싶은 것들을 말입니다.
[03:56]
그리고 이 템플릿을 직접 실행하는 것은
[03:58]
매우 간단합니다.
[04:00]
여기에는 네 가지 전제 조건이 있습니다.
[04:01]
우리가 여기서 가지고 있는 것들입니다.
[04:03]
먼저 Node.js를 설치해야 합니다.
[04:05]
그다음 Cloudflare 계정이 필요합니다.
[04:07]
무료 tier를 사용하면 됩니다.
[04:09]
이것은 이 전체 데모에서 작동할 것입니다.
[04:10]
그래서 cloudflare.com으로 가서
[04:12]
무료 계정을 만들면 됩니다.
[04:14]
참고로 이 전체 영상의 모든 것은 무료입니다.
[04:16]
그리고 OAuth를 위한 GitHub 계정이 필요합니다.
[04:18]
그리고 당연히 이 특정 MCP 서버를 위한 PostgreSQL 데이터베이스가 필요합니다.
[04:20]
이 모든 전제 조건이 준비되면
[04:22]
그러면 Wrangler CLI를 설치할 수 있습니다.
[04:24]
이것은 우리가 Cloudflare와 함께 작업할 수 있는 방법입니다.
[04:27]
컴퓨터의 명령줄에서 말입니다.
[04:29]
그래서 npm install -g로 글로벌 설치하면 됩니다.
[04:31]
wrangler를 설치하고, 그다음 wrangler login 명령을 실행합니다.
[04:34]
이것은 브라우저에서 Cloudflare로 연결해서
[04:36]
인증을 진행합니다.
[04:37]
그래서 이제 CLI가
[04:39]
새로운 Cloudflare 계정으로 인증되었습니다.
[04:41]
그리고 마지막으로 해야 할 일은
[04:43]
이 저장소를 복제하는 것입니다.
[04:44]
좋습니다. 그래서 여기 위로 가서
[04:46]
git clone을 하고
[04:47]
이것이 여러분의 URL입니다.
[04:48]
그리고 npm install 명령을 실행하여
[04:51]
모든 의존성을 설치할 수 있습니다.
[04:53]
여기서 우리 Wrangler Cloudflare Worker 프로젝트를 위한
[04:55]
의존성들을 설치합니다.
[04:57]
그러면 준비가 완료됩니다.
[04:59]
이 비디오의 주요 MCP 서버 구현에 들어가기 전에
[05:02]
한 가지 더 놓치고 싶지 않은 것이 있습니다.
[05:03]
여러분과 함께 해야 할 것이 있기 때문입니다.
[05:05]
여기서 견고한 기초를 설정해야 합니다.
[05:08]
MCP가 핵심 수준에서 어떻게 작동하는지 이해하는 것입니다.
[05:10]
그래서 제가 먼저 다루고 싶은 기본 예제가
[05:13]
이 저장소에 있습니다.
[05:15]
그러면 권한 부여, 모니터링, 그리고 Cloudflare 배포와 같은 추가 복잡성 계층을 추가해보겠습니다.
[05:18]
이 기본 예제에서는
[05:21]
GitHub 페이지에 있는 문서를 많이 참고했습니다.
[05:24]
이것은 TypeScript MCP SDK용 문서입니다.
[05:25]
이 링크와 제가 준비한 주요 템플릿 모두 설명란에 포함시켜드리겠습니다.
[05:31]
실제로 제가 이 비디오에서 다루는 모든 내용을
[05:34]
설명란에 링크해드릴 겁니다.
[05:36]
여러분에게는 정말 보물같은 자료가 될 거예요.
[05:37]
하지만 이건 정말 중요합니다.
[05:38]
MCP 서버를 구성하는 핵심 요소를 놓치면 안 됩니다.
[05:41]
TypeScript를 사용해서 MCP 서버를 임포트하고
[05:44]
사용하는 전송 계층도 임포트해야 합니다.
[05:47]
여기서는 아주 기본적인 예제를 위해
[05:49]
standard IO를 사용하고 있습니다.
[05:51]
물론 나중에는 streamable HTTP와
[05:53]
SSE를 사용하도록 업그레이드할 예정입니다.
[05:55]
원격 MCP에는 이것이 더 필요합니다.
[05:57]
어쨌든, 서버의 인스턴스를 만들고
[05:59]
도구를 등록할 수 있습니다.
[06:01]
이것이 바로 이 비디오에서 집중할 부분입니다.
[06:03]
이들은 모두 우리 서버가 노출하는 기능들입니다.
[06:04]
그리고 샘플링과 리소스 같은
[06:06]
다른 작업들도 할 수 있습니다.
[06:07]
MCP 서버에는 다양한 구성 요소가 있습니다.
[06:10]
그리고 원하는 전송 방식을 정의하고
[06:13]
서버를 시작하기만 하면 됩니다.
[06:15]
이제 본질적으로 API 엔드포인트를 갖게 됩니다.
[06:17]
하지만 이것은 웹사이트용이 아니라
[06:18]
AI 에이전트를 위한 것입니다.
[06:20]
이것을 명심하는 것이 정말 중요합니다.
[06:22]
우리가 여기서 구축하는 모든 것은
[06:24]
새로운 것이 아닙니다.
[06:25]
보안에 관한 모범 사례들도
[06:27]
새로운 것이 아닙니다.
[06:29]
모든 것이 그냥 API입니다.
[06:31]
하지만 AI 에이전트에 특화된 표준으로 재포장된 것입니다.
[06:35]
MCP는 그것이 전부입니다.
[06:37]
하지만 그것만으로도 매우 강력합니다.
[06:39]
이것이 바로 우리의 빠른 시작이고
[06:42]
제가 여기서 보여드리고 싶은 것입니다.
[06:43]
우리 템플릿 저장소를 로컬에 복제했습니다.
[06:45]
그리고 여기에 simplemath.ts가 있습니다.
[06:47]
이것이 Cloudflare와 함께 작동하도록 조정된
[06:50]
매우 기본적인 MCP 서버입니다.
[06:53]
그리고 이것을 기반으로 전체 구현을 만들어보겠습니다.
[06:55]
agent/mcp는
[06:57]
실제로 Cloudflare에서 가져온 것입니다.
[06:59]
이것은 그들의 에이전트 서비스입니다.
[07:00]
이것을 사용해서 MCP 서버의
[07:02]
메인 클래스를 구축합니다.
[07:04]
그리고 GitHub 페이지에서 봤던 것처럼
[07:06]
서버를 정의합니다.
[07:09]
그리고 모든 도구를 초기화합니다.
[07:11]
그냥 this.server.tool입니다.
[07:13]
도구에 이름을 지정하고 인수도 정의합니다.
[07:15]
AI 에이전트가 언제 어떻게 도구를 사용할지
[07:17]
알 수 있도록 설명을 추가할 수도 있습니다.
[07:19]
이것도 나중에 다루겠습니다.
[07:21]
그리고 함수 정의 자체가
[07:24]
AI 에이전트나 코딩 어시스턴트 또는
[07:25]
다른 무엇이든 이 MCP 서버에서
[07:28]
도구를 호출할 때마다 실행될 것입니다.
[07:30]
이것은 매우 기본적인 구현으로
[07:32]
더하기, 빼기, 곱하기, 나누기를 원하는
[07:34]
숫자들을 전달할 수 있는 도구입니다.
[07:36]
그리고 여기 아래쪽에서는
[07:38]
레거시 목적을 위해 SSE와 함께
[07:40]
이 MCP 서버를 제공할 예정입니다.
[07:42]
그리고 일반적인 .serve도 있습니다.
[07:44]
이것은 streamable HTTP를 위한 것으로
[07:47]
목적으로 사용됩니다. 그리고 /mcp는 일반적인
[07:50]
serve입니다. 이것은 스트리밍 가능한
[07:53]
HTTP를 위한 새로운 전송 방식입니다. 그래서
[07:56]
이제 readme로 돌아가서
[07:58]
여러분이 이미 Wrangler를 이런 단계들로
[07:59]
설정해 두셨다면, 이제 해야 할 일은
[08:02]
MCP 서버 구성을 지정하면서 Wrangler dev
[08:03]
명령어를 실행하는 것뿐입니다. 우리의 간단한 버전 말이죠.
[08:06]
이 저장소를 클론한 디렉토리에서
[08:08]
이 명령어를 실행하기만 하면 됩니다.
[08:09]
그러면 짜잔, 우리의 MCP 서버가
[08:11]
이제 실행되고 있고, 어떤 MCP 클라이언트든
[08:14]
연결할 준비가 되었습니다.
[08:15]
Cursor, Claude, Claude Desktop,
[08:18]
뭐든지 말이죠. 지금 Claude Desktop으로
[08:20]
예시를 보여드리겠습니다.
[08:22]
Claude Desktop을 열어봤습니다.
[08:24]
계산 도구가 있는 math MCP 서버를
[08:26]
볼 수 있습니다. 그리고 이것을 설정하기 위해
[08:29]
해야 했던 것은 왼쪽 위 파일, 설정,
[08:30]
개발자로 가는 것뿐이었습니다.
[08:32]
여기서 MCP 구성을 입력합니다.
[08:35]
구성 편집을 클릭하면 됩니다.
[08:37]
그러면 이런 폴더가 나타납니다.
[08:39]
그리고 Claude Desktop 구성을
[08:40]
열 수 있습니다. 이걸 열어보겠습니다.
[08:43]
여기에 많은 새 줄이 있습니다.
[08:45]
그래서 제 비밀 키들과 다른 MCP들을
[08:47]
볼 수 없습니다. 하지만 이것에 연결하기 위해
[08:48]
npxmcp remote를 입력하고
[08:50]
localhost 8789를 입력합니다.
[08:53]
왜냐하면 이것이 현재 실행 중인 URL이기 때문입니다.
[08:55]
스트리밍 가능한 HTTP를 사용하려면
[08:57]
/mcp 엔드포인트가 될 것입니다.
[09:00]
이렇게 MCP 서버에 연결하는 것입니다.
[09:01]
이제 테스트해볼 수 있습니다.
[09:04]
이것을 닫겠습니다. 그런데
[09:07]
구성을 추가하면 Claude Desktop을
[09:09]
다시 시작해야 합니다.
[09:11]
이제 계산 도구를 사용해서
[09:12]
계산하라고 말할 수 있습니다.
[09:14]
그리고 임의의 숫자에 임의의 숫자를
[09:16]
곱하라고 하겠습니다.
[09:19]
여기서 명시적으로 하고 있는 이유는
[09:21]
도구를 사용하는지 확인하고 싶기 때문입니다.
[09:22]
이것을 보내겠습니다.
[09:24]
그러면 Claude Desktop이 우리의
[09:25]
커스텀 MCP 서버를 사용할 권한을
[09:27]
요청할 것입니다.
[09:28]
제 경우엔 이미 승인했지만
[09:31]
여러분에게는 권한을 요청할 것입니다.
[09:33]
그리고 여기 있습니다. 계산 도구를
[09:35]
사용했습니다. 두 숫자가 곱해졌고
[09:36]
우리의 응답이 나왔습니다.
[09:38]
정말, 정말 좋아 보입니다.
[09:40]
이것이 매우 높은 수준에서 본 MCP입니다.
[09:42]
이제 GitHub 인증, 보안, 모니터링 등
[09:44]
재미있는 것들을 추가해보겠습니다.
[09:46]
여기 게임 플랜이 있습니다.
[09:49]
정확한 순서를 알려드리겠습니다.
[09:51]
먼저 이 MCP 서버를 직접 실행하는
[09:53]
방법을 보여드리겠습니다. 매우 쉽습니다.
[09:55]
그런 다음 모든 것이 어떻게 작동하는지
[09:57]
살펴보겠습니다. 공유할 핵심 자료들도
[09:59]
있습니다. 그리고 모든 것을 Cloudflare에
[10:01]
배포해서 MCP를 위한 프로덕션
[10:02]
환경을 만들어보겠습니다.
[10:04]
마지막으로 인트로에서 약속한 대로
[10:06]
AI 코딩 어시스턴트를 사용하는 방법을
[10:08]
보여드리겠습니다. 그래서 여러분이
[10:10]
이 템플릿을 가져다가 AI 코딩
[10:12]
어시스턴트에게 주면 원하는 MCP 서버를
[10:14]
만들어낼 수 있습니다.
[10:15]
그리고 여기서 이 지점에서
[10:18]
여러분은 이미 Wrangler를 설치하고
[10:19]
원하는 MCP 서버를 만들어줄 것입니다. 이제
[10:22]
여러분은 이미 Wrangler를
[10:24]
설치하고 구성했습니다. 패키지들을
[10:25]
설치했고, 레포지토리를
[10:27]
복제했습니다. 이제 환경 변수
[10:29]
설정으로 넘어갈 수 있습니다. 그래서
[10:31]
이 파일을 복사해서
[10:33]
.dev.vars로 이름을 바꿔주면 됩니다.
[10:35]
이건 .env 파일과 같지만
[10:37]
Cloudflare 워커에 더 특화된 것입니다. 그리고
[10:39]
설정해야 할 환경 변수는
[10:40]
총 4개뿐입니다. 먼저
[10:42]
GitHub 클라이언트 ID와
[10:44]
시크릿 암호화 키, 그리고
[10:46]
데이터베이스 URL이 필요합니다. 플랫폼에 따라
[10:47]
이것은 어떤 PostgreSQL
[10:48]
플랫폼이든 될 수 있습니다. Supabase일 수도
[10:50]
있고, Neon일 수도 있고, PostgreSQL을 직접 호스팅할 수도 있습니다.
[10:53]
이 환경 변수를 위한 연결 문자열을 가져오면 됩니다.
[10:55]
그리고 특히
[10:57]
GitHub OAuth 앱을 가져오는 방법은
[10:59]
GitHub에서 우상단의 설정으로 가서
[11:02]
개발자 설정으로 내려가서
[11:04]
OAuth 앱을 클릭하면 됩니다.
[11:05]
여기서 새 앱을 만들 수 있고
[11:08]
그러면 클라이언트 ID와
[11:09]
시크릿을 받을 수 있습니다. 설정하기
[11:11]
매우 쉽습니다. 이것은
[11:13]
MCP 인증을 위한 것입니다. 매우 중요한 구성 요소입니다.
[11:15]
그리고 암호화 키의 경우,
[11:17]
원하는 값으로
[11:18]
설정하면 됩니다. 모든 것을 설정하기 매우 쉽습니다.
[11:20]
그리고 나중에 Sentry를 다뤄서
[11:21]
프로덕션에서 MCP 모니터링을 추가할 것입니다.
[11:24]
그게 전부입니다. 이제
[11:26]
모든 것이 준비되었습니다. 이제 Wrangler dev 명령을 실행해서
[11:27]
MCP 서버를 실행시킬 수 있습니다.
[11:29]
이미 다룬 간단한 예제와
[11:31]
매우 유사할 것입니다. 모든 것이
[11:33]
친숙하게 보이도록 의도적으로
[11:35]
그렇게 했습니다. 우리는
[11:37]
프로덕션 환경의 시뮬레이션된
[11:39]
버전을 실행하고 있습니다.
[11:41]
여기서는 Cloudflare MCP
[11:42]
서버, 원격 MCP를 실행하고 있지만
[11:44]
로컬 머신의 터미널에서
[11:47]
실행되고 있습니다. 포트는 간단한
[11:48]
예제와 다릅니다. 그래서
[11:50]
Claude Desktop 구성으로
[11:52]
돌아가거나 Cursor나 Claude처럼
[11:54]
사용하는 MCP 클라이언트의 구성으로 가서
[11:58]
포트를 8788로 변경하면 됩니다.
[12:01]
그리고 MCP 클라이언트를 재시작하면 됩니다.
[12:03]
이미 Claude Desktop에서
[12:05]
그렇게 했습니다. 이제 여기에
[12:07]
새로운 MCP 서버가 있습니다. 아마 이름을
[12:10]
math에서 바꿔야 할 것 같지만
[12:11]
어쨌든, 여기를 클릭하면
[12:13]
PostgreSQL용 데이터베이스 도구
[12:15]
3개가 있습니다. 그래서
[12:17]
'내 DB에 어떤 테이블들이 있나요?'같은 질문을 할 수 있습니다.
[12:21]
지금 이렇게 할 때, 이미
[12:23]
GitHub OAuth 과정을 거쳐서
[12:25]
이 도구 사용을 승인했습니다. 하지만
[12:27]
여러분에게 일어날 일은
[12:29]
브라우저에서 페이지가 열려서
[12:31]
이 MCP를 사용하기 전에 GitHub로
[12:34]
로그인하는 것입니다. 이것이
[12:36]
아름다운 점입니다. 이제 GitHub
[12:38]
인증을 통해 MCP 서버로 가는
[12:40]
게이트웨이가 있습니다. 그리고
[12:42]
MCP 서버를 보호하는 방법은
[12:44]
무궁무진합니다. 이제 인증이
[12:46]
인증 기능을 앞에 두고 있습니다. 그래서
[12:48]
몇 가지 스크린샷을 보여드리겠습니다
[12:50]
실제로 어떻게 보이는지
[12:51]
그 플로우를 진행하는 과정을 말이죠. 그러면 다시
[12:53]
클로드 코드로 돌아가서 여기서 보시는 것은
[12:55]
데이터베이스에 19개의 테이블이 있다고 나와 있습니다. 그리고 이것은
[12:57]
정말 정말 좋아 보입니다. 그리고 우리는
[12:59]
여기서 다른 것도 테스트해볼 수 있습니다. 저는
[13:00]
이렇게 말해보겠습니다.
[13:01]
제 사용자 프로필 테이블에 어떤 레코드가 있나요?
[13:05]
그러면 이것이 특정 테이블을 쿼리할 것입니다
[13:08]
여기서 말이죠. 실행될 때까지 잠시 기다려보겠습니다
[13:10]
이것을. 네, 잘 됩니다. 사용자 프로필에서 전체 선택
[13:11]
정말 좋아 보입니다. 그리고
[13:13]
지금 3개의 레코드만 있습니다
[13:15]
제가 생성한 테스트 계정들로만
[13:16]
이 수퍼베이스에서 말이죠. 이것은 제
[13:18]
프로덕션 수퍼베이스나 그런 것이 아닙니다. 그래서
[13:20]
네, 여기까지입니다. 이것은 정말 정말
[13:22]
잘 작동합니다. 이제 제가 어떻게
[13:25]
이 MCP 서버를 구축했는지, 그리고 여기에 들어가는 모든 모범 사례들을
[13:27]
알아보겠습니다. 시작하는 것은
[13:29]
제가 여러분을 위해 이 템플릿을 만들 때
[13:31]
시작점으로 사용한 리소스입니다
[13:33]
Cloudflare가 그들의 AI 저장소에서
[13:36]
여기 이 데모를 가지고 있습니다. GitHub OAuth로
[13:38]
원격 MCP 서버를 구축하는 것입니다. 이것은
[13:41]
저를 시작하게 해준 환상적인 리소스입니다
[13:42]
앞서 말했듯이, 설명란에
[13:44]
리소스의 금광이 있을 것입니다
[13:47]
그래서 이것은 설명란에 링크될 것이고
[13:49]
Cloudflare의 다른 정말 도움이 되는 문서들과 함께
[13:51]
원격 MCP 서버 구축에 관한 것들 말이죠. 그리고 또한 그들은
[13:54]
특별히 인증에 관한 섹션도 있습니다
[13:55]
이것은 만약 여러분이
[13:57]
GitHub을 넘어서 확장하고 싶다면 확인하기 좋습니다
[13:59]
다른 공급자들에 대한 인증을 추가하고 싶다면
[14:01]
Google이나 X 같은 것들 말이죠
[14:02]
그래서 이것들은 훌륭한 리소스들입니다. 그리고
[14:05]
마지막으로 중요한 것은
[14:06]
MCP의 보안 체크리스트에 대해 이야기하고 싶습니다
[14:10]
그래서 이것은 제가 모든 모범 사례들을 결정하는 데 사용한 것입니다
[14:13]
제가 MCP 서버를 구축하기 위해 따라야 하는
[14:14]
모범 사례들을 말이죠. 그래서
[14:17]
여기서 정말 프로 팁입니다. 여러분은 이
[14:19]
리소스를 가져갈 수 있습니다. 다시 말하지만
[14:21]
설명란에 링크되어 있습니다. 여러분은 이
[14:22]
체크리스트를 살펴보고, 여기의 모든 것을 복사해서
[14:25]
AI 코딩 어시스턴트에게 주는 프롬프트의 일부로
[14:27]
그냥 붙여넣기만 하면 됩니다
[14:29]
MCP 서버를 구축하라고 할 때
[14:31]
이런 것들을 따르라고 하는 것입니다. 그리고
[14:33]
그것이 제가 한 일입니다. 그리고 여러분은 아마도
[14:35]
여러분의 서버에 적용되지 않을 수도 있는
[14:36]
이런 것들 중 일부를 빼낼 수도 있습니다. 여기의 모든 것이
[14:38]
매우 적용 가능한 것은 아니니까요
[14:39]
하지만 이것은 정말 좋은 시작점입니다
[14:41]
모든 보안 관행들에 대해 여러분의 눈을 뜨게 하는
[14:43]
MCP 서버뿐만 아니라 중요한 것들
[14:45]
정말로 모든 백엔드 인프라에 대해서 말이죠. 제 말은
[14:48]
정말로, 제가 말했듯이, MCP 서버들은
[14:50]
그냥 에이전트를 위한 API입니다. 그래서
[14:52]
네, 이것을 따르는 것이 정말 중요합니다
[14:54]
그리고 그것이 제가 한 일입니다
[14:55]
여기에는 상당히 많은 규칙들이 있지만
[14:59]
모든 것이 제가 readme 상단에 있는 것으로 귀결됩니다
[15:02]
여기서 말이죠. 그래서 우리는
[15:04]
수명 관리가 있는 데이터베이스 통합을 원합니다
[15:06]
보안 체크리스트는 수명에 대해 많이 이야기하므로
[15:08]
우리는 서버의 데이터베이스 연결 같은 리소스들을 관리하고
[15:10]
우아하게 종료할 수 있습니다. 우리는
[15:12]
그런 것들을 원합니다
[15:14]
모듈화되고 단일 목적을 가진 도구들을 만들어야 합니다. 그래야 대형 언어 모델이
[15:17]
우리 MCP 서버를 사용할 때 혼란스러워하지 않거든요.
[15:19]
그리고 설명(description)은 정말
[15:21]
중요합니다. 이 부분은 잠시 후에
[15:22]
더 자세히 다뤄보겠습니다. 우리는 GitHub OAuth를 사용한
[15:25]
역할 기반 액세스 제어를 원합니다.
[15:27]
특히 데이터베이스에 쓰기 쿼리를 실행하는 것과 같은
[15:29]
민감한 도구들을 보호하기 위해서죠.
[15:31]
그리고 보안 모범 사례들도 필요합니다.
[15:34]
이 서버에서 실행하는 SQL 쿼리를
[15:36]
검증하고 정화하는 것 같은 것들이죠.
[15:38]
프로덕션 환경에서 Sentry로 모니터링하는 것도
[15:40]
정말 중요합니다. 그리고
[15:42]
원격 MCP를 배포할 수 있는
[15:44]
클라우드 플랫폼이 있어야 확장성에 좋습니다.
[15:47]
그래서 우리는 Cloudflare
[15:48]
Workers를 선택했습니다. 이런 것들이
[15:51]
제가 여기서 따르고 있는 핵심 관행들이에요.
[15:53]
이제 우리 서버를 빠르게
[15:55]
살펴보겠습니다. 그리고 이런 것들이
[15:56]
언제 적용되는지 설명해드리겠습니다.
[15:58]
이제 보실 내용들은 아까 다뤘던
[16:00]
간단한 예제와 매우 유사하게
[16:02]
보일 것입니다. 이건 의도적으로
[16:04]
그렇게 했습니다. 권한 부여나
[16:06]
Cloudflare 배포 준비 같은
[16:08]
다른 계층들을 추가하는 것에
[16:09]
천천히 익숙해지실 수 있도록
[16:11]
말이에요. 먼저 상단에 있는
[16:13]
이 리스트를 보시면,
[16:15]
민감한 쓰기 쿼리 도구를 사용할 수 있는
[16:17]
허용된 GitHub 사용자들의 목록입니다.
[16:20]
당연히 프로덕션 환경에서는
[16:22]
데모를 넘어서려면 이 목록을
[16:24]
데이터베이스 어딘가에 두고 싶을 것입니다.
[16:28]
저는 단순함을 위해 이렇게 했을 뿐입니다.
[16:29]
하지만 원리는 같습니다.
[16:31]
Cloudflare agents 패키지에서
[16:33]
가져온 MCP 에이전트를 사용하고
[16:35]
서버를 설정합니다. 그리고
[16:36]
라이프스팬의 일부로
[16:38]
서버를 종료할 때 메모리 누수가
[16:40]
발생하지 않도록 데이터베이스를
[16:42]
우아하게 종료시키고 싶습니다.
[16:44]
이 작동 방식은 서버를
[16:46]
시작할 때 - 여기서 보여드리겠습니다 -
[16:47]
서버를 시작하면 데이터베이스
[16:50]
인스턴스를 가져옵니다.
[16:51]
그리고 이를 MCP의 전체 생명주기 동안
[16:53]
사용합니다. 이건 제가
[16:55]
사람들이 항상 놓치는 걸 보는 부분입니다.
[16:57]
라이프스팬은 정말 중요합니다.
[16:58]
보안 체크리스트에서 다루는
[17:00]
항목 중 하나입니다. 그들은
[17:02]
이를 생명주기 관리라고 부르는데,
[17:03]
종료, 리소스 정리하기 같은
[17:05]
전체 개념이 있습니다.
[17:06]
데이터베이스 같은 것들 말이죠.
[17:08]
그게 바로 우리가 여기서 하는 일입니다.
[17:10]
데이터베이스 인스턴스를 가져와서 서버의
[17:12]
전체 생명주기 동안 사용합니다.
[17:14]
그리고 서버가 종료될 때
[17:16]
정리작업을 수행합니다. 그리고 도구를
[17:18]
초기화할 때 여기서
[17:20]
도구 설명이 중요해집니다.
[17:22]
지금 보고 계신 것은 실제로
[17:25]
이 MCP 서버를 활용하는
[17:27]
대형 언어 모델의 프롬프트 일부로
[17:29]
사용됩니다. 이건 정말 중요하게 기억해야 할 점입니다.
[17:32]
이 컨텍스트는 에이전트가 이 도구를
[17:34]
언제, 어떻게 사용해야 하는지
[17:36]
알기 위해 핵심적입니다. 따라서
[17:39]
MCP 서버의 모든 도구에 대해
[17:41]
그 다음 단일 데이터베이스
[17:42]
인스턴스를 가져오고 있습니다. 이것은 우리 DB에 있는 모든
[17:44]
테이블을 나열하는 도구입니다. 그리고
[17:46]
여기서 매우 잘 정리된
[17:48]
형식의 문자열을 반환하고 있습니다. 쿼리에서
[17:50]
받은 모든 정보를 포함해서요.
[17:51]
이것도 중요한 점 중 하나인데
[17:53]
이 정보가 다시 LLM으로 전달되기 때문입니다.
[17:54]
그래서 이를 신중하게 다뤄야 합니다.
[17:56]
매우 깔끔하게 포맷되어 있는지 확인하세요.
[17:57]
그리고 우리는 여기서 JSON 형식으로
[17:59]
작업하고 있습니다. 그리고 다른 도구들의 경우에도
[18:01]
매우 유사합니다. 이것은 읽기 전용
[18:03]
SQL 쿼리를 실행하는 도구입니다. 그리고 이것은
[18:05]
보안 모범 사례를 구현하는 예시입니다.
[18:07]
우리는 SQL 쿼리를 검증하고 있습니다.
[18:09]
어떤 모습인지 보여드리겠습니다.
[18:10]
우리는 위험한 패턴을 찾고 있고
[18:12]
이런 것들을 발견하면 도구 호출을 실패시킵니다.
[18:14]
이것은 단순한 예시일 뿐이지만
[18:16]
MCP 서버의 보안을 구현할 때
[18:19]
생각해야 할 요소들의 종류를 보여줍니다.
[18:20]
그리고 제가 말했듯이 실제로 어떤 종류의
[18:22]
백엔드 인프라를 구축하든
[18:24]
마찬가지입니다. 그리고 AI
[18:26]
코딩 어시스턴트가 이런 종류의
[18:28]
사항들을 따르도록 해야 합니다.
[18:29]
이런 서버를 구축하는 데 사용할 때도 마찬가지입니다.
[18:31]
여기서 아래로 스크롤하여
[18:33]
해당 도구의 나머지 부분을 건너뛰겠습니다.
[18:35]
여기서 GitHub 인증으로 들어갑니다.
[18:37]
서버에 GitHub OAuth를 설정하면
[18:40]
어떤 모습인지 보여드리겠습니다.
[18:42]
이 파일 끝에서 확인할 수 있습니다.
[18:43]
여기 이 값이 있습니다, this.props.login.
[18:45]
이것은 우리 사용자에 대한 모든 정보를 가지고 있고
[18:47]
로그인은 구체적으로 GitHub 사용자명을 제공합니다.
[18:50]
따라서 우리는 그들이 이 허용된 사용자
[18:52]
목록에 있는지 확인할 수 있습니다.
[18:54]
만약 그렇다면, 이 도구를 노출시킵니다.
[18:56]
그렇지 않으면, 이 도구를 사용자가
[18:59]
MCP 클라이언트를 통해 서버를 사용할 때
[19:01]
옵션으로 제공하지 않습니다.
[19:03]
하지만 허용된 사용자라면, 이것을 제공합니다.
[19:05]
우리는 다시 SQL 쿼리를 검증하고
[19:07]
있습니다. 우리는 SQL 쿼리를 다시 검증하고
[19:09]
있습니다. 이를 실행하여 안전한 작업인지 확인하고
[19:10]
그 다음에
[19:12]
쿼리 실행 결과를
[19:13]
반환합니다. 그리고 우리는 모든 도구에
[19:15]
catch 블록을 사용한 오류 처리를 추가하고
[19:17]
있습니다. 오류를 우아하게 처리하는 것이 중요합니다.
[19:19]
MCP 서버가 오류 메시지를 반환하도록
[19:20]
하는 것도 좋습니다. 그러면 에이전트가
[19:23]
사용자에게 다시 전달하여
[19:25]
정확히 무엇이 잘못되었는지 알려줄 수 있습니다.
[19:26]
이것으로 우리 도구들에 대한
[19:28]
모든 설명이 끝났습니다. 그리고
[19:30]
맨 끝에 여기서 우리는 이 OAuth
[19:32]
제공업체를 사용하고 있습니다.
[19:34]
Cloudflare에서 가져온 것입니다.
[19:35]
Cloudflare의 장점 중 하나는
[19:37]
MCP 서버를 확장하고 배포하는 것을
[19:39]
쉽게 만들어줄 뿐만 아니라
[19:42]
실제로 인증의 서버 측면도
[19:44]
처리해준다는 것입니다.
[19:47]
Cloudflare의 OAuth 제공업체를 사용하지 않는다면
[19:49]
구현해야 할 로직이 훨씬 많아집니다.
[19:50]
그래서 여기서 구현해야 할 클라이언트 측
[19:52]
작업들이 여전히 일부 있습니다.
[19:54]
관심이 있으시다면 이것을 살펴보실 수 있습니다.
[19:56]
또한 이것을 다른 방식으로 변경할 수도 있습니다.
[19:57]
이것과 함께 작동하도록 말입니다.
[19:58]
구글 OAuth 같은 것으로 대신 작업할 수도 있습니다. 하지만
[20:00]
우리의 경우에는 GitHub 클라이언트 측에서 설정하고
[20:02]
서버가 나머지 부분을 처리하도록 구성했습니다. 그래서
[20:04]
우리는 API 핸들러들을 가지고 있습니다. SSE용으로 하나와
[20:06]
streamable HTTP용으로 하나를 가지고 있습니다. 그리고
[20:08]
authorize와 register 엔드포인트들이 여기에 있습니다.
[20:10]
Cloudflare 문서를 참고하여 이 모든 것을 설정하는 방법을
[20:12]
알 수 있습니다. 그리고 GitHub 핸들러가 있습니다.
[20:14]
이것은 모든 클라이언트 측 OAuth 로직입니다.
[20:15]
그리고 마지막으로 토큰 엔드포인트가 있습니다.
[20:17]
이것이 GitHub 인증에 관한 모든 것입니다.
[20:19]
설정하는 것이 이렇게 쉽습니다. 그리고 언제든지
[20:20]
AI 코딩 어시스턴트를 사용할 수 있습니다.
[20:22]
이것을 가리키고 GitHub 핸들러를 가리켜서
[20:24]
이것을 구글로 바꾸거나 X로 바꾸라고 말하면
[20:27]
확실히 그렇게 할 수 있습니다. 그리고
[20:29]
배포하기 전에 다루고 싶은 마지막 항목은
[20:31]
readme로 돌아가서, 마지막으로 다루고 싶은 것은
[20:33]
모니터링입니다. 이것을 선택적인 기능으로
[20:34]
만들었습니다. Sentry가 실제로 이 비디오를
[20:36]
후원하고 있습니다. 그들이 프로덕션 환경에서
[20:38]
MCP 서버를 모니터링하는 방법을 보여주기 위해
[20:40]
저와 파트너십을 맺고 있습니다. 하지만 어쨌든
[20:42]
이것을 다루고 싶었습니다. 그리고 Sentry는
[20:43]
정말로 최고의 플랫폼입니다. 제가 아는 유일한
[20:46]
플랫폼으로, 애플리케이션 모니터링을 MCP 서버와
[20:48]
통합하는 것을 매우 쉽게 만들어줍니다.
[20:50]
제 대시보드를 보면 정말 멋집니다.
[20:51]
sentry.io로 가서 무료 티어로도 작동합니다.
[20:53]
새 프로젝트를 만들기만 하면 되고, 특히
[20:56]
프로젝트 타입은 새 프로젝트 생성을 클릭하면
[20:58]
Cloudflare Workers JavaScript를 검색하면 됩니다.
[21:00]
이것이 Sentry용으로 생성하는 타입입니다.
[21:01]
환경 변수로 사용하는 DSN을 얻게 됩니다.
[21:04]
그러면 내 MCP에 대한 list tables 사용과 같은
[21:06]
트레이스들이 들어오는 것을 볼 수 있습니다.
[21:09]
이것을 클릭하면 이 쿼리와 함께 발생한
[21:11]
로그와 모든 메타데이터를 볼 수 있습니다.
[21:13]
지속 시간을 볼 수 있고, 오류가 발생하면
[21:15]
이메일도 받게 됩니다. 여기서 볼 수 있는 것처럼
[21:18]
이것은 받게 되는 이메일의 예시입니다.
[21:20]
그래서 문제가 발생할 때 알림 설정이 되어 있습니다.
[21:21]
프로덕션 환경에서 이런 종류의 모니터링을 갖는 것은
[21:24]
정말 강력합니다. 특히 Cloudflare에 배포한 후에는
[21:26]
더욱 중요합니다. Sentry를 설정하려면
[21:28]
이 환경 변수, DSN을 추가하기만 하면 됩니다.
[21:29]
무료 티어로 가입한 후 Sentry 대시보드에서
[21:31]
그것을 얻을 수 있습니다. 그리고 이 두 파일을
[21:33]
바꾸기만 하면 됩니다. 이것을 index_sentry 같은
[21:35]
이름으로 바꾸고, 이것을 index.ts로 바꾸면 됩니다.
[21:37]
프로덕션 모니터링을 위해 Sentry를 활성화하려면
[21:38]
여기에 별도 버전을 마련해뒀습니다.
[21:40]
MCP의 프로덕션 모니터링을 위해서요.
[21:41]
여기서는 자세히 다루지 않겠습니다.
[21:43]
제가 한 일은 이 가이드를 따른 것입니다.
[21:44]
설명란에도 링크를 걸어둘 예정입니다.
[21:47]
프로덕션 환경에서 MCP 서버를 모니터링하는 것과
[21:49]
관련된 내용입니다. 그리고 그들이
[21:50]
프로덕션 환경에서 MCP 서버를 모니터링하는 방법을
[21:53]
보여주기 위해 저와 파트너십을 맺고 있습니다.
[21:55]
이 환경 변수, DSN을 추가하기만 하면 됩니다.
[21:58]
무료 티어로 가입한 후 Sentry 대시보드에서
[22:00]
그것을 얻을 수 있습니다. 그리고 이 두 파일을
[22:02]
바꾸기만 하면 됩니다. 이것을 index_sentry 같은
[22:04]
이름으로 바꾸고, 이것을 index.ts로 바꾸면 됩니다.
[22:06]
프로덕션 모니터링을 위해 Sentry를 활성화하려면
[22:08]
여기에 별도 버전을 마련해뒀습니다.
[22:10]
MCP의 프로덕션 모니터링을 위해서요.
[22:12]
여기서는 자세히 다루지 않겠습니다.
[22:14]
제가 한 일은
[22:16]
제가 한 일은
[22:19]
제가 한 일은
[22:21]
여기서는 자세히 다루지 않겠습니다.
[22:22]
제가 한 일은
[22:25]
링크에 포함할 이 가이드를 따라했습니다. 이 가이드는 프로덕션 환경에서 MCP 서버를 모니터링하는 방법을 다루고 있습니다.
[22:28]
모니터링
[22:30]
실제로 그들은 Cloudflare의 GitHub OAuth 예제를 기반으로 했습니다.
[22:32]
그리고 그 안에서 모니터링을 통합하는 방법을 보여주었습니다.
[22:34]
정말, 정말 편리합니다.
[22:37]
제게는 정말 잘 맞았습니다.
[22:38]
이 자료를 찾아서 정말 기쁩니다.
[22:40]
하지만 네, 우리는 Sentry를 설정합니다.
[22:42]
발생할 수 있는 모든 오류를 처리하는 함수가 있습니다.
[22:45]
그래서 Sentry 대시보드에서 추적할 수 있습니다.
[22:48]
그리고 여기 아래로 내려가면
[22:50]
OAuth 공급자를 Sentry로 래핑해야 합니다.
[22:51]
그래서 그냥 sentry.withSentry입니다.
[22:54]
그냥 npm 패키지를 설치하고 있습니다.
[22:56]
그리고 우리의 워커를 래핑합니다.
[22:58]
이것은 기본적으로 같은 방식으로 설정됩니다.
[22:59]
Sentry가 없는 버전에서와 같습니다.
[23:01]
그래서 우리는 여기서 이 래퍼를 만들고 있습니다.
[23:04]
우리의 도구에서 발생하는 모든 오류를 감시할 것입니다.
[23:05]
그리고 그것들을 Sentry에 로그로 남깁니다.
[23:08]
성공적인 호출들과 마찬가지로 말입니다.
[23:10]
그래서 당신은 높은 수준에서 모든 것을 볼 수 있습니다.
[23:12]
들어오는 모든 것들을
[23:14]
MCP 서버의 모든 추적을 말입니다.
[23:16]
네, Sentry는 정말 멋진 플랫폼입니다.
[23:18]
MCP 서버뿐만 아니라
[23:20]
모든 종류의 백엔드 애플리케이션을 모니터링하는 데
[23:22]
사용하는 것을 적극 권장합니다.
[23:25]
저는 프로덕션 환경에서 AI 에이전트를 모니터링하는 데도
[23:26]
Sentry를 사용합니다.
[23:29]
그리고 저는 Langfuse를
[23:32]
에이전트 모니터링을 위한 플랫폼으로 더 구체적으로 사용하지만
[23:33]
제 전체 백엔드 인프라와
[23:35]
RAG 파이프라인에 대해서는
[23:38]
Sentry가 그런 종류의 모니터링을 위한 훌륭한 옵션입니다.
[23:39]
그래서 이제 우리는 모든 모범 사례를 따르는
[23:42]
MCP 서버를 가지고 있습니다.
[23:43]
Cloudflare와 함께 프로덕션에 배포할 수 있습니다.
[23:46]
우리가 해야 할 첫 번째 일은
[23:48]
이미 Wrangler가 설정되어 있습니다.
[23:50]
그래서 우리는 프로덕션 환경에서
[23:51]
설정하기 위해 몇 가지 명령을 실행해야 합니다.
[23:53]
그래서 제 터미널을
[23:55]
다시 열었습니다. 먼저 KV 또는 키-값 저장소를 만들어야 합니다.
[23:57]
이것은 GitHub으로 이미 인증된 모든 사용자를
[23:59]
추적하는 데 사용됩니다.
[24:01]
그리고 그것은 OAuth를 관리하는
[24:03]
우리의 미니 데이터베이스 같은 것입니다.
[24:05]
그래서 wrangler KV namespace create
[24:08]
그리고 우리 KV 스토어의 이름은
[24:10]
oauth-kv가 될 것입니다.
[24:13]
이 명령을 실행하지 않겠습니다.
[24:14]
이미 생성되어 있기 때문입니다.
[24:16]
하지만 한 번 실행하면
[24:17]
여기서 출력이 나올 것입니다.
[24:18]
고유한 KV ID를 제공할 것입니다.
[24:21]
그것을 복사하고 싶을 것입니다.
[24:23]
잠시 후에 그것으로 무엇을 할지 볼 것입니다.
[24:24]
이 KV가 생성된 후 이 ID를 얻을 수 있는 다른 방법은
[24:27]
Cloudflare 대시보드의
[24:29]
스토리지와 데이터베이스의 KV 섹션으로 가면
[24:31]
바로 여기서 볼 수 있습니다.
[24:32]
그래서 여기서 ID를 복사하면 됩니다.
[24:34]
그래서 그 ID를 가지고 wrangler.json으로 가세요.
[24:37]
여기에 KV ID를 위한 플레이스홀더가 있을 것입니다.
[24:39]
당신의 고유한 식별자로 바꾸면 됩니다.
[24:41]
그것을 가지고 나면 이제
[24:43]
readme로 돌아가서 배포할 준비가 되었습니다.
[24:48]
배포해 보겠습니다. 이제 Wrangler deploy를 실행하면 됩니다.
[24:50]
정말 간단합니다. 이제 모든 설정이 완료되어서
[24:52]
Cloudflare Workers에 배포할 수 있습니다.
[24:54]
이제 MCP 서버가 클라우드에서
[24:56]
원격으로 실행될 것입니다.
[24:58]
Wrangler deploy를 실행하면 정말 빠르게 처리됩니다.
[25:01]
Cloudflare Worker 환경에 업로드하기만 하면 되니까요.
[25:03]
엄청나게 빠릅니다. 그리고 완료되었습니다.
[25:05]
이제 원격 MCP 서버의 프로덕션 URL을 얻었습니다.
[25:07]
정말 멋지네요. 이제 이 URL을 사용해서
[25:09]
Claude Desktop과 연결할 수 있습니다.
[25:12]
또는 다른 MCP 클라이언트를 사용해서
[25:14]
로컬에서 실행할 때와 똑같이 연결할 수 있습니다.
[25:16]
그리고 이 URL을 얻는 다른 방법은
[25:18]
Workers and Pages 탭으로 들어가서
[25:20]
Compute Workers에서 확인할 수 있습니다.
[25:22]
여기서 모든 Cloudflare Workers를 볼 수 있습니다.
[25:24]
지금은 MCP 서버만 있네요.
[25:27]
지금은 MCP 서버만 있습니다.
[25:29]
여기 있는 Visit 링크를 클릭하면
[25:31]
404 Not Found라고 나올 것입니다.
[25:33]
하지만 이것이 우리의 프로덕션 URL입니다.
[25:35]
이것을 복사할 수 있습니다.
[25:37]
/mcp 엔드포인트를 추가할 수도 있습니다.
[25:39]
Invalid token이라고 나올 것입니다.
[25:41]
당연히 GitHub으로 인증되지 않았으니까요.
[25:43]
하지만 이것이 우리의 URL입니다.
[25:45]
이것을 복사해서 Claude Desktop 설정이나
[25:47]
사용하고 있는 MCP 클라이언트에
[25:50]
입력하면 됩니다.
[25:52]
이제 이 URL을 이렇게 바꿔주겠습니다.
[25:54]
완료되었습니다.
[25:56]
이제 프로덕션 MCP 서버에 연결되었습니다.
[25:58]
정말 멋지네요.
[26:00]
실제로 테스트하기 전에 마지막으로
[26:01]
해야 할 일은 프로덕션 환경에서
[26:05]
환경 변수를 설정하는 것입니다.
[26:07]
로컬에서 실행할 때는 .dev.vars에서
[26:10]
설정했습니다.
[26:12]
이제는 실제로 이 secrets를
[26:14]
클라우드에 저장해야 합니다.
[26:16]
원한다면 대시보드에서
[26:18]
관리할 수도 있습니다.
[26:20]
방법은 워커를 클릭하고
[26:22]
여기서 모든 요청과 메트릭,
[26:24]
모니터링을 확인할 수 있습니다.
[26:26]
설정으로 들어가면
[26:28]
모든 secrets를 볼 수 있습니다.
[26:30]
여기서 수동으로 설정할 수도 있고
[26:31]
readme에 있는 명령어를 따라서
[26:33]
명령줄에서 모든 secrets를 설정할 수도 있습니다.
[26:35]
wrangler secret put을 사용하고
[26:37]
client ID처럼 secret 이름을 입력하면
[26:39]
프롬프트가 나타나면 값을 입력하면 됩니다.
[26:42]
대시보드에서 볼 수 있듯이
[26:44]
이미 설정해 놓았기 때문에
[26:45]
여기서는 하지 않겠습니다.
[26:48]
하지만 이 과정을 거치면
[26:50]
다시 배포할 필요 없이
[26:51]
모든 secrets가 준비됩니다.
[26:53]
이제 MCP에 연결할 준비가 되었습니다.
[26:55]
설정이 모두 완료되었습니다.
[26:58]
화면 밖에서 Claude Desktop을 재시작하고
[27:00]
다시 열어서 최신 URL을 적용하겠습니다.
[27:02]
완료되었습니다.
[27:05]
이제 테스트해볼 수 있습니다.
[27:08]
데이터베이스에 어떤 테이블이 있는지
[27:09]
물어보겠습니다. 이전과 같은 종류의 쿼리입니다.
[27:14]
내 DB에 어떤 테이블이 있나요?
[27:16]
하지만 이것을 하기 전에
[27:18]
방금 팝업이 나타났습니다.
[27:20]
이제 우리의 인증 요청이 나타났습니다.
[27:21]
인증 요청이 왔습니다. 이게 바로 제가 앞서 말씀드렸던 것으로
[27:23]
몇 개의 스크린샷이 나왔었는데, 이제는
[27:24]
실제로 실시간으로 보고 있습니다. 보시다시피
[27:26]
접근 권한을 요청하고 있습니다. 승인을 클릭하겠습니다.
[27:28]
그리고 GitHub 계정을 인증해야 하는데
[27:29]
이미 완료했습니다. 그래서 그 페이지가 여기에 나타나지 않지만
[27:31]
처음에는 GitHub 계정 연결을 하게 됩니다.
[27:33]
자, 이제 이것을 닫을 수 있습니다.
[27:35]
그리고 쿼리를 입력할 수 있습니다.
[27:36]
제 데이터베이스에는 어떤 테이블들이 있나요? 이것은
[27:38]
똑같아 보이지만, 이제는 원격 MCP를 사용하고 있습니다.
[27:39]
연결되는 데 잠시 시간이 걸리겠네요. 어떤 이유로
[27:41]
Claude가 좀 시간이 걸리고 있습니다.
[27:43]
여기 있습니다. 이제 우리의 MCP 서버를 사용하고 있습니다.
[27:45]
개발 환경에서 실행했을 때처럼 19개의 테이블을 가져오는지 확인해보겠습니다.
[27:48]
원격 MCP이기 때문에 조금 더 시간이 걸리지만
[27:49]
여전히 매우 빠릅니다. 여기 있습니다.
[27:51]
19개의 테이블을 가져왔습니다. 그리고
[27:53]
여기서 요청을 시도해볼 수도 있습니다.
[27:54]
GitHub OAuth 보호 도구를 사용해서 말이죠.
[27:56]
제 프로젝트 테이블에 새로운 레코드를 추가해보겠습니다.
[27:58]
그냥 랜덤 값으로 해보겠습니다.
[27:59]
이 도구를 사용해서 테스트해보겠습니다.
[28:01]
프로젝트 테이블에 레코드를 추가하고, Supabase를 열어서
[28:04]
나중에 보여드리겠습니다. 프로젝트에 삽입하고 있고
[28:07]
여기서 생성하는 랜덤 값들을 사용하고 있습니다.
[28:09]
이 도구를 사용하도록 요청하고 있습니다. 항상 허용하겠습니다.
[28:14]
Supabase에 이 레코드를 추가할 수 있는지 확인해보겠습니다.
[28:16]
여기 있습니다. 레코드를 추가했습니다. 훌륭합니다.
[28:19]
AI 기반 레시피 생성기를 위한 것이군요.
[28:21]
확실히 Supabase 대시보드에 들어가면
[28:23]
이제 AI 기반 레시피 생성기를 위한 프로젝트가 있습니다.
[28:26]
한번 보세요. 우리의 MCP 서버가
[28:27]
완벽하게 작동하고 있고 Cloudflare에 배포되었습니다.
[28:28]
여기에서 메트릭을 확인할 수 있고, 들어오는 모든 요청을
[28:30]
볼 수 있습니다. 새로 고침하면
[28:33]
요청이 증가하는 것을 볼 수 있습니다.
[28:35]
여기 있습니다. 이제 27개의 요청이 있습니다.
[28:37]
MCP의 전체 핸드셰이킹 프로세스가 있기 때문입니다.
[28:39]
그래서 이렇게 많은 요청이 있는 것입니다.
[28:42]
하지만 모든 것이 완벽하게 작동하고 있습니다.
[28:44]
이것이 바로 모범 사례를 따라
[28:46]
MCP 서버를 배포하는 것의 핵심입니다.
[28:48]
자, 여기까지입니다. 우리는 MCP 서버를 처음부터 만들고
[28:50]
도구와 생명주기, 보안, 모니터링 등의
[28:52]
모범 사례를 구현했으며, 이를 원격 MCP로 배포했습니다.
[28:55]
이제 어디서든 모든 MCP 클라이언트와 함께
[28:56]
사용할 수 있습니다. 그리고 GitHub OAuth가 있어서
[28:58]
사람들이 우리의 MCP를 남용할 수 없고
[28:59]
속도 제한 같은 것들을 설정할 수 있으며
[29:02]
심지어 이런 방식으로 MCP 서버를 수익화할 수도 있습니다.
[29:04]
그리고 이 영상을 통해 AI 코딩 어시스턴트 사용에 대해
[29:05]
이미 말씀드렸습니다. 하지만
[29:07]
여기서 중요한 것은 여러분이 이 GitHub 저장소를
[29:09]
새로운 MCP 서버를 만들고 싶은 현재 프로젝트에
[29:11]
그대로 넣고, Claude 코드나 Cursor 등에게
[29:14]
이 파일들을 살펴보고 제가 모든 모범 사례를 따라
[29:16]
MCP 서버를 구현한 방법을 이해하라고 할 수 있습니다.
[29:18]
README를 참조하게 할 수도 있고
[29:20]
앞서 말씀드린 보안 체크리스트를 참조하게 할 수도 있습니다.
[29:23]
이 모든 것을 컨텍스트로 사용할 수 있습니다. 이것은
[29:26]
제가 지난 영상에서 말씀드린 컨텍스트 엔지니어링과 같습니다.
[29:28]
이 모든 것이 AI 코딩 어시스턴트에게
[29:30]
정말 좋은 예시를 제공하는 컨텍스트가 될 수 있습니다.
[29:33]
그래서 여러분이 만들고 싶은 모든 MCP 서버를
[29:34]
완성할 수 있습니다. 심지어
[29:36]
OAuth를 GitHub에서 Google로 바꾸는 것과 같은 것들도 할 수 있습니다.
[29:38]
제가 방금 말씀드린 것을 포함할 수 있는
[29:40]
프로세스의 예시를 원하신다면
[29:42]
컨텍스트 엔지니어링에 대한 제 지난 영상을 꼭 확인해보세요.
[29:44]
방금 제 채널에서 다뤘기 때문에
[29:45]
여기서 처음부터 모든 것을 다시 다루고 싶지 않습니다.
[29:47]
관심이 있으시다면 꼭 확인해보세요.
[29:49]
하지만 이제 여러분은
[29:51]
완벽한 프로덕션 수준의 MCP 서버를 구축할 수 있는
[29:53]
모든 것을 갖추었습니다.
[29:56]
이 템플릿이 정말 유용하다고 생각하시길 바랍니다.
[29:58]
그렇다면 좋아요와 구독을 해주시면
[30:00]
정말 감사하겠습니다. MCP와 에이전트를
[30:02]
프로덕션에 배포하는 것에 대한 더 많은 콘텐츠가
[30:04]
계속 나올 예정입니다.
[30:06]
그럼 다음 영상에서 뵙겠습니다.
[30:08]
[30:10]
[30:12]
[30:14]
[30:15]
[30:17]
[30:20]
[30:21]
[30:22]
[30:25]
[30:27]
[30:29]
[30:31]
[30:32]
[30:33]
[30:35]
[30:36]
[30:38]
[30:40]
[30:42]
[30:45]
[30:46]
[30:49]
[30:50]
[30:52]
[30:55]
[30:57]