[00:00]
자, MCP에 대해 이야기해 봅시다.
[00:02]
MCP가 왜 중요하고 왜 계속 유지될 것이라고 생각하는지,
[00:06]
그리고 이것이 어떻게 현재는 불가능한
[00:09]
많은 일들을 가능하게 할 것인지 설명하겠습니다.
[00:12]
우선, MCP가 없는 현재의
[00:14]
최첨단 기술 상태를 보겠습니다.
[00:17]
MCP를 제외하고 생각해보면,
[00:20]
에이전트를 만들고 그 에이전트가
[00:23]
다양한 API들과 통신하기를 원한다고 해봅시다.
[00:25]
예를 들어 슬랙, 지메일 또는
[00:28]
커스텀 데이터베이스와
[00:30]
통신하고 싶다고 할 때
[00:34]
이를 구현하기 위해서는
[00:37]
이러한 통합 기능을
[00:39]
처음부터 구축해야 합니다.
[00:42]
모델이 API 문서를 이해하고
[00:45]
알아서 처리하게 하는 것은 불가능합니다.
[00:48]
예를 들어, Gmail API는
[00:50]
메시지 삭제를 허용할 수 있지만
[00:53]
여러분은 에이전트가 메시지를
[00:55]
삭제하는 권한을 갖길 원하지 않을 것입니다.
[00:58]
그래서 에이전트를
[01:00]
새 메시지 생성만 가능하도록 제한하고 싶을 것입니다.
[01:04]
또는 임시 저장만 허용하고
[01:06]
에이전트가 전체 API에
[01:08]
접근하지 못하게 하고 싶을 것입니다.
[01:11]
이를 구현하기 위해서는
[01:14]
커스텀 프롬프트나 특별한 구현이 필요합니다.
[01:19]
이를 통해 에이전트를 제한하거나
[01:21]
원하는 작업만 수행하도록 유도해야 합니다.
[01:25]
같은 맥락에서, 커스텀 메시지가
[01:28]
필요한 경우에도 마찬가지입니다.
[01:31]
에이전트가 특정 방식으로
[01:33]
메시지를 포맷팅하길 원한다면
[01:36]
그 통신 방식과 명세, 구현이
[01:39]
어떤 형태로든 존재해야 합니다.
[01:42]
이것을 에이전트의 일부로
[01:45]
구현했다고 가정해봅시다.
[01:48]
이제 에이전트는 슬랙, 지메일, 커스텀 데이터베이스를
[01:51]
사용할 수 있게 되었습니다. 하지만
[01:54]
이 에이전트를 공개하거나 공유했을 때
[01:56]
다른 사람들이 같은 구현을
[01:58]
자신들의 에이전트에서 사용하고 싶어합니다.
[02:01]
예를 들어, 이 에이전트가 Wind Serve IDE에서
[02:04]
코드를 작성할 때 사용되고, Wind Serve가
[02:08]
슬랙, 지메일, 데이터베이스와
[02:10]
통신할 수 있다고 합시다.
[02:13]
이제 사람들이 Cursor에서 이 에이전트를
[02:16]
사용하고 싶어한다면
[02:19]
Wind Serve를 위해 만든
[02:21]
모든 커스텀 구현이
[02:24]
Cursor에서는 작동하지 않을 것입니다.
[02:28]
그래서 모든 작업을
[02:31]
Cursor용으로 다시 만들어야 합니다.
[02:34]
이것이 바로 MCP의 주요 아이디어가
[02:39]
복잡성을 줄이는 지점입니다.
[02:42]
이제 모든 연결을 다시 만들 필요가
[02:45]
없어집니다.
[02:47]
구현이나 명세를
[02:49]
모든 에이전트마다 다시 만들 필요가 없죠.
[02:52]
이 API들과 연결하고 싶은
[02:54]
각각의 에이전트를 위해 MCP를 통해
[02:58]
누구나 사용할 수 있는 표준을 가질 수 있습니다.
[03:02]
LLM이나 에이전트를 백엔드나
[03:06]
다양한 API에 연결할 수 있죠.
[03:08]
이 특정 예시에서는
[03:10]
중앙에 MCP 서버가 있고
[03:12]
이 MCP 서버가
[03:14]
슬랙, 지메일과 통신하고
[03:16]
연결하는 방법을 알고 있다고 가정해보세요.
[03:19]
커스텀 데이터베이스와
[03:21]
연결할 수 있고, 위의 에이전트는
[03:24]
커스텀 에이전트일 수도 있고
[03:26]
Clock Desktop이나 Cursor,
[03:28]
또는 Wind Serve일 수도 있습니다.
[03:30]
어떤 커스텀 에이전트든
[03:33]
이 프로토콜을 사용하여 MCP 서버와 통신하고
[03:36]
에이전트를 교체할 수 있습니다.
[03:39]
이것을 윈드서브에도 적용할 수 있고,
[03:42]
구현과 연결 부분,
[03:45]
즉 사용자 정의 명세는
[03:48]
MCP 서버에 존재하므로
[03:50]
어떤 에이전트를 사용하더라도
[03:53]
전체 시스템이 작동합니다. 비록
[03:56]
추가 계층을 더하지만 복잡성을 늘리는 것이 아니라
[04:00]
오히려 복잡성을 줄이고 있습니다.
[04:02]
왜냐하면 이를 공유할 수 있기 때문이죠.
[04:04]
이제 Slack과 같은 회사를 상상해보세요.
[04:08]
그들이 MCP 서버를 제공하면
[04:11]
여러분의 클라이언트 애플리케이션,
[04:13]
예를 들어 IDE에서
[04:15]
Slack용 MCP 서버에 연결할 수 있고
[04:19]
갑자기 Cursor로
[04:22]
Slack에 접근할 수 있게 됩니다. 왜냐하면
[04:24]
명세가 있기 때문이죠.
[04:25]
같은 MCP 서버를 Cloud desktop이나
[04:29]
사용자 정의 에이전트 또는 윈드서브에 연결할 수 있고
[04:32]
더 이상 문제가 되지 않습니다.
[04:35]
공통 명세를 사용하기 때문이죠.
[04:37]
참고로 이 공통 명세는
[04:40]
구글에서 찾을 수 있습니다.
[04:42]
여기 웹사이트가 있고
[04:45]
핵심 개념들과 할 수 있는 모든 것들이
[04:47]
나와 있습니다. 간단히 설명하자면
[04:50]
세 가지 주요 개념이 있습니다.
[04:52]
먼저 호스트가 있는데, 호스트는
[04:55]
Cursor나 IDE처럼 에이전트를 구현하는
[04:58]
애플리케이션입니다.
[05:00]
그 다음 클라이언트가 있는데,
[05:02]
MCP 클라이언트는 기본적으로
[05:05]
서버와 통신하는
[05:06]
도구입니다. 그리고
[05:09]
마지막으로 서버가 있는데
[05:11]
이는 구현을 포함하는
[05:13]
부분입니다.
[05:14]
예를 들어 Slack의 MCP 서버나
[05:18]
Gmail의 MCP 서버 또는 여러분만의
[05:21]
사용자 정의 MCP 서버가 될 수 있죠.
[05:24]
이것이
[05:26]
어떤 기능을 구현할 것이고
[05:28]
MCP 서버에서 할 수 있는 일들 중
[05:30]
전부 설명하지는 않겠지만
[05:32]
가장 중요한 것은
[05:34]
도구일 것 같습니다. 계산기나
[05:36]
날씨 서비스를 구현하고 싶다면,
[05:38]
지금 제가 구현하고 있는
[05:40]
도구를 보여드리겠습니다.
[05:42]
이러한 도구들을 MCP 서버에서 제공할 수 있어서
[05:45]
클라이언트나 호스트 애플리케이션,
[05:49]
즉 Cursor가
[05:51]
제 MCP 서버에 연결하면
[05:54]
즉시 사용 가능한 모든 도구를
[05:57]
나열할 수 있습니다.
[05:59]
이걸 호출할 수 있고
[06:02]
이 도구와 저 도구를 사용할 수 있죠.
[06:04]
이는 새로운 개념이 아닙니다.
[06:06]
LangChain이나 LlamaIndex에서
[06:08]
도구를 계속 사용해왔죠.
[06:11]
MCP 서버에서도 같은 개념입니다.
[06:14]
프롬프트를 공유할 수 있고
[06:17]
이러한 프롬프트를 LLM이나 에이전트가
[06:20]
작업을 수행하는데 사용할 수 있습니다.
[06:23]
프롬프트도 공유하고
[06:25]
리소스도 공유할 수 있어서
[06:27]
문서가 있다면 그것을
[06:30]
MCP 서버를 통해 공유할 수 있고
[06:33]
에이전트가 API를 호출하거나
[06:36]
코드에서 특정 작업을 수행하는 방법을
[06:39]
알 수 있습니다.
[06:41]
Cursor를 예로 들면 말이죠.
[06:43]
여기에는 많은 유용한 정보가 있으니
[06:45]
참고해 보시기 바랍니다. 한 가지 더 말씀드리고
[06:47]
제가 만들고 있는 코드를 보여드리겠습니다.
[06:48]
제가 언급하고 싶은 것은
[06:51]
이 MCP 서버에 관한 것입니다.
[06:54]
여러분이 다른 회사들의 MCP 서버를
[06:58]
추가하더라도
[07:00]
각각의 MCP 서버는
[07:02]
독립적으로 동작할 것입니다.
[07:04]
슬랙용 MCP 서버 하나, Gmail용 MCP 서버 하나,
[07:07]
그리고 커스텀 데이터베이스용 MCP 서버가
[07:09]
있을 수 있습니다. 또한
[07:12]
정말 흥미로운 커스텀 기능을 수행하는
[07:15]
MCP 서버를 구현할 수도 있습니다.
[07:19]
예를 들어, 여러분이 슬랙에 접근하고
[07:22]
Gmail에 접근하고 데이터베이스에
[07:24]
로그를 작성하고 싶다고 가정해보죠.
[07:26]
이 모든 것을 동시에
[07:28]
처리하고 싶을 때, 프롬프트를 통해 LLM이
[07:32]
이를 처리하기를 기대하는 대신
[07:36]
이 모든 기능을
[07:39]
MCP 서버에 캡슐화할 수 있습니다.
[07:42]
이 MCP 서버는 슬랙을 호출하고,
[07:45]
Gmail을 호출하고, 커스텀 API와
[07:47]
데이터베이스를 호출하여 로깅을 수행하고
[07:50]
모든 작업을 처리할 것입니다.
[07:52]
이제 Cursor나 에이전트는 단순히
[07:55]
여러분의 MCP 서버와만 통신하면 됩니다.
[07:59]
모든 기능이 코드화되어 있어서
[08:01]
항상 신뢰할 수 없는 LLM에 의존할 필요가 없습니다.
[08:05]
여기에는 정말 많은 멋진 기능들이 있습니다.
[08:08]
저도 이제 막 배우는 중이라
[08:10]
가능성을 다 이해하지는 못하고 있지만
[08:13]
제가 말씀드릴 수 있는 것은
[08:17]
Anthropic이 MCP 서버 디렉토리를
[08:20]
제공하고 있으니 확인해보시길 바랍니다.
[08:23]
Compos에는
[08:26]
250개 이상의 MCP 서버가 있어서
[08:29]
클라이언트에 바로 연결해서 사용할 수 있습니다.
[08:32]
많은 기업들이 MCP 서버를 통해
[08:36]
자사의 기능을 제공하고 있어서
[08:38]
정말 멋진 일이라고 생각합니다.
[08:41]
이제 제가 현재 만들고 있는 것을
[08:43]
보여드리겠습니다. 아직 완성되지는 않았지만
[08:45]
지금까지 만든 것을 보여드릴 수 있습니다.
[08:48]
작동하는 것을 보여드릴 텐데
[08:49]
정말 멋집니다. 제가 작업 중인
[08:54]
이 프로젝트가 있는데
[08:57]
네, 바로 이 프로젝트입니다.
[08:59]
이 프로젝트가 맞나요?
[09:02]
네, 이것은 머신러닝 프로젝트인데
[09:05]
여러 다른 파이프라인들이 있고
[09:06]
실행해야 할 것들이 많으며
[09:08]
관리해야 할 서버들이 많이 있습니다.
[09:11]
제가 하는 일 중 하나는
[09:14]
머신러닝 모델을 서빙하는 것이고
[09:17]
그 모델을 평가할 수 있습니다.
[09:20]
그래서 표준 평가 방법이
[09:22]
있는데, 잠시 모델을
[09:24]
실행해보겠습니다. 이게 필요할 거거든요.
[09:29]
지금 기본적으로
[09:30]
모델을 메모리에 로드하고
[09:34]
요청을 받을 준비를 하고 있습니다.
[09:37]
예측 요청을 받을 준비를 하고 있죠.
[09:40]
모델이 실행 중인 것을 보여드리겠습니다.
[09:42]
새 콘솔을 열고
[09:44]
실행해보겠습니다.
[09:47]
이렇게 하면 모델에 요청이 전송됩니다.
[09:52]
모델로 돌아가보면
[09:54]
예측이 진행되는 것을 볼 수 있습니다.
[09:56]
요청을 받아서 예측을 수행하고 있고
[10:00]
여기서 모델의
[10:02]
예측 결과가 돌아오는 것을 볼 수 있습니다.
[10:05]
이런 방식으로 모델을 테스트할 수 있습니다.
[10:10]
하지만 이것은 제가 해야 할 일인데
[10:13]
시간이 많이 소요됩니다. 저는
[10:17]
모델을 가지고 실험을 해보고 싶은데
[10:21]
모델에 보내는 값을 변경하거나
[10:22]
어떤 것을 추가하고 싶습니다. 예를 들어
[10:26]
특정 필드를 보내지 않고
[10:29]
모델이 어떻게 반응하는지 보거나
[10:32]
특정 필드의 값을 표준편차의
[10:34]
2배로 변경해서 작동 방식을 보고 싶습니다.
[10:37]
이처럼 다양한
[10:39]
실험들이 있고, 이 모든 실험을
[10:41]
실행하려면 스크립트를 작성해야 합니다.
[10:44]
이 모든 것을 수행하는 스크립트를 작성해야 하고
[10:47]
새로운 아이디어가 생길 때마다
[10:49]
스크립트를 작성해야 하므로
[10:52]
이는 매우 빠르게 복잡해집니다. 그래서 만약
[10:56]
Cursor를 사용해서 모델을 테스트할 수 있다면 어떨까요?
[11:00]
Cursor에게 이렇게 모델을 테스트하라고
[11:04]
지시하고 Cursor가
[11:06]
그것을 대신 수행하도록 하면
[11:10]
엄청난 시간을 절약할 수 있습니다. 실제 구현은
[11:13]
매우 간단합니다. 제가
[11:16]
현재 작업 중인 MCP 서버를
[11:19]
보여드리겠습니다. 얼마나
[11:21]
간단한지 보실 수 있을 겁니다. 저는 하나의
[11:23]
도구만 보여드리겠습니다. 더 많은 도구가
[11:25]
이 MCP 서버에 있고, 시작하는 방법을
[11:28]
알고 싶으시다면
[11:31]
Model Context Protocol 웹사이트에
[11:33]
Python 샘플과 JavaScript 샘플 등의
[11:35]
문서가 있습니다.
[11:37]
이 하나만 보여드리겠습니다.
[11:39]
정말 정말 쉽습니다.
[11:42]
도구가 있는데, 이 도구를 저는
[11:45]
'invoke_model'이라고 부르고 페이로드를
[11:47]
받습니다. 이 도구가 하는 일은
[11:50]
특정 URL에 POST 요청을 보내는 것입니다.
[11:52]
테스트 목적으로만
[11:56]
이것을 실행할 것이기 때문에
[11:58]
모델이 로컬에서 서빙될 때만 실행됩니다.
[12:00]
요청을 localhost의
[12:04]
특정 URL로 보내고
[12:06]
기본적으로 받은 페이로드를
[12:09]
특정 JSON 형식으로 전송합니다. 이게 전부입니다.
[12:14]
이것이 이 도구가 하는 전부입니다. 보시다시피
[12:17]
이 도구에는 문서가 있습니다.
[12:19]
이 문서는 중요한데, 프로토콜의
[12:22]
일부가 될 것이기 때문입니다.
[12:25]
에이전트가 이 문서를 필요로 합니다.
[12:26]
에이전트가 페이로드를
[12:28]
어떻게 포맷해야 하는지,
[12:30]
이 함수가 무엇을 위한 것인지 이해하는데
[12:34]
필요하기 때문입니다. 문서가 있고
[12:37]
모델에 대해서도 설명합니다.
[12:40]
이것이 페이로드라고
[12:42]
인자라고 알려주고
[12:44]
페이로드를 어떻게 포맷해야 하는지,
[12:46]
제가 기대하는 특정 형식이
[12:49]
무엇인지 설명하고, 그 다음 반환값은
[12:51]
모델로부터 받은 예측값을
[12:53]
반환한다고 설명합니다. 이것이 제 도구입니다.
[12:57]
이것이 제 MCP 서버가 하는 일입니다.
[13:00]
이제 이것이 준비되었으니 Cursor로 와서
[13:05]
Cursor의 설정으로 가보면
[13:08]
Cursor 설정에서
[13:10]
기능 아래에 섹션이 있는데
[13:13]
이것을 좀 작게 만들어보겠습니다.
[13:16]
여기에 MCP 서버를
[13:18]
추가할 수 있는 섹션이 있습니다.
[13:21]
Slack과 통신하고 싶다면
[13:23]
MCP 서버를 찾아서 추가하면 되고
[13:26]
Gmail이나 Google 등도 마찬가지입니다.
[13:28]
여기에 제 MCP 서버를 추가했는데
[13:31]
이것이 바로 그것입니다.
[13:33]
머신러닝 스쿨이라고 부르는데요.
[13:35]
여기 MCP 서버를 실행하는 명령어가 있습니다.
[13:38]
이건 제 컴퓨터에 있는 스크립트인데,
[13:41]
웹사이트나 API가 아니라
[13:43]
그냥 실행되는 스크립트입니다.
[13:45]
제 컴퓨터에서 실행되는 스크립트이고
[13:47]
Cursor에게 모델을 호출하거나 도구들을 실행할 때
[13:51]
여기 보이는 도구들을 실행할 때
[13:53]
이 경우에는
[13:55]
두 가지 도구를 등록하고 있습니다.
[13:57]
엔드포인트 실행과 모델 호출인데요.
[14:00]
Cursor에게 이 명령어를 실행하라고 지시하면
[14:03]
작업을 수행할 수 있습니다.
[14:06]
보시다시피 이 초록색 점은
[14:09]
작동 중임을 나타내는데요.
[14:12]
Cursor가 MCP에 연결되어
[14:15]
도구들의 개수를 확인하고
[14:17]
사용할 준비가 되었다는 의미입니다.
[14:20]
이제 여기에서
[14:22]
Cursor에게 MCP 서버를 사용해서 작업을 지시할 수 있습니다.
[14:26]
MCP 서버를 사용해서
[14:28]
컴포저로 가서 확인할 건데요.
[14:31]
현재는 에이전트 모드인지 확인해야 합니다.
[14:36]
Cursor에서는 에이전트 모드에서만 MCP 도구를 지원하거든요.
[14:41]
에이전트 모드인지 꼭 확인하시고
[14:44]
다음과 같이 진행하겠습니다.
[14:46]
여기 CSV 파일이 하나 있는데
[14:49]
Cursor에게 다음을 요청할 겁니다.
[14:51]
모델을 호출하는 건데요.
[14:55]
기억하시죠? 모델이 여기서
[14:57]
로컬에서 실행 중입니다.
[14:59]
3개의
[15:01]
샘플을
[15:03]
펭귄.CSV 파일에서
[15:06]
가져올 건데요. 단순한 요청입니다.
[15:09]
스크립트로 만들었어야 했는데
[15:11]
스크립트로 하면 더 쉬웠을 텐데
[15:13]
잠시만 기다려주세요.
[15:15]
이걸 제출하면
[15:17]
Cursor가 펭귄 파일을 찾아서
[15:20]
샘플들을 불러오고
[15:23]
결정을 하게 됩니다.
[15:27]
MCP를 사용해서 서버와 통신할 거예요.
[15:29]
보세요, 파일을 검색해서
[15:33]
Penguins 파일을 찾았고
[15:35]
제 경로에서
[15:37]
파일을 읽었네요. 이제 데이터 형식을 이해했다고 합니다.
[15:42]
데이터셋에서 3개의 샘플로
[15:45]
모델을 호출하겠다고 하네요.
[15:48]
NA 값을 피해서 완전한 샘플만 사용하겠대요.
[15:50]
Cursor가 이 모든 걸 결정했는데, 아주 좋습니다.
[15:54]
그리고 이걸 다
[15:56]
예상되는 페이로드 구조에 맞게
[15:59]
포맷팅했고, 이제 Cursor가
[16:02]
MCP 도구를 호출하겠다고 하는데
[16:05]
모델을 호출할 때 보시면
[16:08]
정확히 어떻게 호출할지 알려줍니다.
[16:11]
페이로드 인자만 사용할 건데
[16:13]
페이로드가 올바르게 포맷팅되어 있습니다.
[16:16]
이 모든 걸 Cursor가 했고
[16:19]
제가 코딩할 필요가 없었죠.
[16:22]
이제 도구를 실행해보겠습니다.
[16:25]
보세요, 3개의 샘플로 모델을 호출했는데
[16:28]
여기 없었지만
[16:30]
있었다면 보였을 텐데요.
[16:34]
돌아가서
[16:36]
여기서 보셨어야 했는데
[16:39]
여기 없었지만
[16:41]
요청이 들어오는 걸
[16:43]
보셨어야 했어요. 어쨌든 Cursor가 모델을 호출했고
[16:47]
그 데이터로 모델을 실행했더니
[16:51]
예측 결과를 알려주네요.
[16:53]
첫 번째는 99% 확신도로
[16:56]
90%네요. 정말 멋지죠.
[16:59]
이제 재미있는 걸 해볼 텐데요.
[17:03]
예를 들어 다시 한 번
[17:08]
해보겠습니다.
[17:10]
이제 체중을 변경해보겠습니다
[17:15]
표준편차 하나만큼 바꿔보죠
[17:20]
이제 완전히 다른 것을 요청할 건데요
[17:22]
커서에게 데이터를 읽고
[17:26]
표준편차를 계산하여
[17:29]
그 특성 값을 변경한 샘플들을 다시 보내도록 요청합니다
[17:34]
제가 보고 싶은 건
[17:36]
더 뚱뚱한 펭귄들에 대한
[17:39]
모델의 반응입니다
[17:42]
이제 명령을 실행할 텐데
[17:44]
이 명령은 표준편차를 계산할 것입니다
[17:48]
실행해보도록 하겠습니다
[17:49]
자, 실행됐네요
[17:52]
평균 체중과
[17:55]
표준편차 801g을 얻었습니다
[17:59]
이제 같은 펭귄들에 대해
[18:01]
체중을 표준편차 하나만큼
[18:04]
증가시켜 모델을 실행합니다
[18:06]
MCP 도구를 호출할 건데
[18:10]
이전과 비교해보면
[18:11]
차이를 볼 수 있습니다
[18:14]
이전 체중이 3750이었는데
[18:18]
새로운 체중은 4552입니다
[18:21]
커서가 자동으로 이 작업을 수행하고
[18:24]
제 도구를 통해 모델을 호출합니다
[18:27]
이제 이를 수락해서
[18:30]
필요한 작업을 수행하도록 하겠습니다
[18:33]
결과가 나왔는데
[18:35]
모델은 여전히 모든 펭귄을
[18:37]
아델리로 예측했지만
[18:39]
신뢰도는 더 낮아졌네요
[18:42]
이보다 더 나아가서
[18:46]
이제 커서에게 모델의
[18:50]
평균 예측값을 계산하도록
[18:52]
요청할 수도 있습니다
[18:55]
인공지능 덕분에
[18:57]
제 도구와 상호작용할 수 있고
[18:59]
이 모든 게 가능한 이유는 MCP 서버가
[19:02]
커서에게 모델과의 통신 방법을
[19:05]
알려주기 때문입니다
[19:08]
더 좋은 점은 이 MCP 서버를
[19:11]
윈서브에서도 사용할 수 있고
[19:14]
클라우드 데스크톱에서도
[19:16]
사용할 수 있다는 겁니다
[19:19]
커서에서 다른 IDE로 바꾸더라도
[19:22]
아무것도 수정할 필요가 없죠
[19:26]
이해가 되셨길 바랍니다
[19:28]
이를 통해 할 수 있는 것들에 대해
[19:30]
아이디어를 얻으셨길 바랍니다
[19:34]
MCP 서버에 대해 더 많은
[19:37]
아이디어가 있는데
[19:38]
이 모든 모델들을 관리하고
[19:40]
멋진 작업을 수행하기 위한 것입니다
[19:43]
즐겁게 보셨길 바랍니다
[19:44]
다음에 뵙겠습니다. 안녕히 계세요