노드에서 Azure 함수를 작성합니다.js 구현 웹훅
6951 단어 serverlessnodejavascriptazure
icrosoft Azure에서 서버 없는 기능을 활성화하는 방법에 대한 자세한 내용은 를 참조하십시오https://docs.microsoft.com/azure/azure-functions/
소개
Zegami에서는 Hubspot을 사용하여 실제 고객 및 잠재 고객과의 관계를 추적합니다.그러나 우리의 클라우드 플랫폼에서 새로운 테스트 사용자 계정을 제공하는 과정은 우리의 CRM과 완전히 끊어진다.부족한 것은 간단한 자동화 방법이다. 이렇게 하면 우리 판매팀은 전체 과정을 관리할 수 있고 핵심 개발팀의 참여가 필요하지 않다.
우리의 최초의 계획은 사용자 계정을 만들기 위한 단독 백엔드 관리 포털을 만드는 것이었지만, 우리 판매팀은 원하지 않았다.그들은 생활과 호흡이 매우 긴장되어 다른 고객 정보 라이브러리를 더 이상 관리하고 싶지 않다.따라서 다음 작업은 Hubspot을 사용자 등록의 입구점으로 사용하고 사용자가 저희 Wordpress 사이트의 Hubspot 폼을 통해 등록할 때 자동으로 계정을 설정하는 과정입니다.
Hubspot을 관리 API에 연결
우리의 API는 사용자 계정을 제공하기 위한 관리 노드가 있습니다.이것은 승재 영패가 있어야만 조작을 허가할 수 있다.
Hubspot의 작업 흐름은 새 사용자가 등록할 때 웹 훅을 터치할 수 있도록 합니다.
그러면 Hubspot에서 끝점을 터치할 수 있습니까?아니요. Hubspot에서 보내는 웹 훅 요청을 설정할 옵션이 없습니다.우리는 필요한 영패를 제공할 수도 없고, API의 기대에 맞는 부하를 만들 수도 없습니다.
웹 훅을 처리하기 위해 API에 새로운 단점을 추가하는 것이 선택입니다.그러나 이렇게 하면 우리가 원래 간소화한 API의 표면적을 증가시키고 필요하지 않은 결합을 Hubspot에 도입할 수 있다.
반대로 우리는 웹 훅 트리거를 수신하고 API 요청을 보내는 간단한 브리지를 실현하기로 선택했다.Azure 기능은 이런 경량급 특정 서비스를 탑재하는 완벽한 방식이다.
Azure 기능
우리의 Azure 함수를 만들기 위해 Visual Studio 코드에 사용되는 Azure 도구를 광범위하게 사용했습니다.초기 설정부터 로컬 테스트와 배치까지 이 도구들은 기능 응용 프로그램을 쉽게 설정하는 데 없어서는 안 된다.
우선 어떤 언어를 사용할지 선택해야 한다.Azure 함수는 우리가 Zegami에서 익숙한 많은 언어, 즉 Javascript,Python, C를 지원한다.icrosoft technologies의 주요 언어는 C#이기 때문에 일부 Azure 함수 기능은 우선 이 언어에서 사용할 수 있거나 더욱 완전하게 실현될 수 있다.
그럼에도 불구하고 우리는 자바스크립트를 선택했다. 왜냐하면 그것은 우리가 가장 유창한 언어이기 때문이다. 특히 비동기적인 흐름과 네트워크를 처리할 때이다.필요한 모든 기능이 지원되지만 C 이외의 언어를 선택하면 현재 특성에 대한 언어 지원을 확인하는 것이 좋습니다.우리는 이전에 Javascript를 사용할 때 더 높은 트리거와 귀속 기능을 같은 방식으로 사용할 수 없다는 것을 발견했다.
설치
시작하고 실행하려면 Microsoft에서 제공하는 excellent guide 만 따릅니다.
함수 작성
함수 자체가 매우 간단하다.웹 훅 요청체에서 관련 필드를 추출하고 API에 요청만 하면 됩니다.
module.exports = async function (context, req) {
body = req.body;
// Get relevant details from body
const email = body.properties.email.value;
const firstname = body.properties.firstname && req.body.properties.firstname.value;
const lastname = body.properties.lastname && req.body.properties.lastname.value;
const name = `${firstname} ${lastname}`;
const company = body.properties.company && req.body.properties.company.value;
// Construct body for request to our API
payload = {name, email, company};
body = JSON.stringify(payload);
// TODO - Execute request to our API
// Set webhook response details
context.res = { status: 200 }
}
지금 우리는 우리의 대기 사항을 기입해야만 진정으로 요청을 발송할 수 있다.노드js에는 내장된 http
모듈이 하나 있지만, 우리는 더욱 간결한 문법과 다른 코드와의 완전한 일치성을 실현하기 위해 노드 획득 모듈을 사용하기를 선호하기로 결정했다.
지침에 따르면 함수 응용 프로그램은 이미 package.json
파일을 첨부했기 때문에 우리는 npm install node-fetch
을 실행하기만 하면 이 패키지를 사용할 수 있다.
이제 파일 맨 위에 노드를 가져와서 얻을 수 있습니다.
const fetch = require(‘node-fetch’);
다음 사항으로 교체하십시오.
const signupUrl = process.env.API_SIGNUP_URL;
const response = await fetch(
signupUrl,
{
method: 'POST',
body: signupBody,
headers: {
'Content-Type': 'application/json',
},
},
);
위에 호출해야 할 곳이 하나 더 있습니다. 그것이 바로 등록 URL의 출처입니다.함수 응용 프로그램은 외부에서 환경 변수를 지정하고 실행할 때 사용할 수 있도록 합니다.이것들은 모두 Azure 포털이나 Visual Studio 코드에서 유용한 Azure 도구를 통해 관리된다.
이 시스템은 원본 코드 관리 외에 기밀을 관리할 수 있고 로컬 테스트나 임시 저장/생산 실례의 다른 설정도 지원한다.
N, B. 간단하게 보기 위해서 나는 오류 응답을 적절하게 처리하고 메시지의 진실성을 검증하는 등 다른 중요한 세부 사항을 건너뛰었다.
국부 테스트
코드를 작성한 후, 우리는 지금 그것의 행동이 기대에 부합되는 것을 확보할 수 있다.다시 한 번, Visual Studio 코드는 여기에서 없어서는 안 되거나 없어서는 안 된다는 것이 증명되어 매우 간단하다. 디버깅 도구는 Google Chrome에서 익숙한 도구와 필적할 수 있다.
1단계: 디버거를 통해 함수 앱 실행
2단계: 기능 수행
그런 다음 수행에 필요한 바디를 제공할 수 있습니다.
유익한 것은 모든 테스트 요청에 기본 주체를 제공하기 위해 sample.dat
파일을 제공할 수 있다는 것이다.
ngrok와의 통합 검증
우리의 함수는 유효한 것 같지만, Hubspot이 보낸 데이터에 대해 어려운 가설을 했습니다.
나는 지금까지 나의 코드가 현실 세계의 데이터와 함께 일하는 것을 보았고 이상적인 상황은 작은 걸음으로 나의 가설을 검증하는 것을 볼 때까지 완전히 만족한 적이 없다.
이를 위해, 나는ngrok라는 실용 프로그램을 사용하여 터널을 열어 나의 로컬 운행 기능을 현실 생활의Hubspot이 촉발할 수 있는 곳에서 사용할 수 있도록 했다.다음 작업만 수행하면 됩니다.
npm install –g ngrok
ngrok http 7071
나의 로컬 환경은 현재 임시적이고 무작위로 생성된 공공 URL을 통해 접근할 수 있다.이런 방법을 사용하면 사이트에서 표를 작성하는 것부터 이 새로운 기능을 통과하는 절차를 검증할 수 있다.이외에, 이것은 우리로 하여금 Hubspot 웹hook 트리거가 제공하는 유효한 부하를 정확하게 볼 수 있게 하고, 우리의 메인 API를 호출하여 어떠한 의외의 문제를 디버깅할 수 있게 한다.
드워프스
우리는 지금 업무 기능이 하나 있는데, 우리가 해야 할 일은 바로 배치이다.다행히도 Visual Studio 코드는 다시 한 번 간단한 과정이 되었습니다. 몇 번만 누르면 저희 기능이 Azure 구독에 배치됩니다.위의 링크된 문서에서 이 과정을 설명합니다.
그러나 우리는 여기서 멈추지 않았다.비록 이것은 단지 작은 코드일 뿐이지만, 그것은 우리에게 매우 중요하기 때문에, 우리는 다른 서비스를 관리하는 것처럼 그것의 전체 생명 주기를 꼼꼼히 관리한다.
우리의 API는 사용자 계정을 제공하기 위한 관리 노드가 있습니다.이것은 승재 영패가 있어야만 조작을 허가할 수 있다.
Hubspot의 작업 흐름은 새 사용자가 등록할 때 웹 훅을 터치할 수 있도록 합니다.
그러면 Hubspot에서 끝점을 터치할 수 있습니까?아니요. Hubspot에서 보내는 웹 훅 요청을 설정할 옵션이 없습니다.우리는 필요한 영패를 제공할 수도 없고, API의 기대에 맞는 부하를 만들 수도 없습니다.
웹 훅을 처리하기 위해 API에 새로운 단점을 추가하는 것이 선택입니다.그러나 이렇게 하면 우리가 원래 간소화한 API의 표면적을 증가시키고 필요하지 않은 결합을 Hubspot에 도입할 수 있다.
반대로 우리는 웹 훅 트리거를 수신하고 API 요청을 보내는 간단한 브리지를 실현하기로 선택했다.Azure 기능은 이런 경량급 특정 서비스를 탑재하는 완벽한 방식이다.
Azure 기능
우리의 Azure 함수를 만들기 위해 Visual Studio 코드에 사용되는 Azure 도구를 광범위하게 사용했습니다.초기 설정부터 로컬 테스트와 배치까지 이 도구들은 기능 응용 프로그램을 쉽게 설정하는 데 없어서는 안 된다.
우선 어떤 언어를 사용할지 선택해야 한다.Azure 함수는 우리가 Zegami에서 익숙한 많은 언어, 즉 Javascript,Python, C를 지원한다.icrosoft technologies의 주요 언어는 C#이기 때문에 일부 Azure 함수 기능은 우선 이 언어에서 사용할 수 있거나 더욱 완전하게 실현될 수 있다.
그럼에도 불구하고 우리는 자바스크립트를 선택했다. 왜냐하면 그것은 우리가 가장 유창한 언어이기 때문이다. 특히 비동기적인 흐름과 네트워크를 처리할 때이다.필요한 모든 기능이 지원되지만 C 이외의 언어를 선택하면 현재 특성에 대한 언어 지원을 확인하는 것이 좋습니다.우리는 이전에 Javascript를 사용할 때 더 높은 트리거와 귀속 기능을 같은 방식으로 사용할 수 없다는 것을 발견했다.
설치
시작하고 실행하려면 Microsoft에서 제공하는 excellent guide 만 따릅니다.
함수 작성
함수 자체가 매우 간단하다.웹 훅 요청체에서 관련 필드를 추출하고 API에 요청만 하면 됩니다.
module.exports = async function (context, req) {
body = req.body;
// Get relevant details from body
const email = body.properties.email.value;
const firstname = body.properties.firstname && req.body.properties.firstname.value;
const lastname = body.properties.lastname && req.body.properties.lastname.value;
const name = `${firstname} ${lastname}`;
const company = body.properties.company && req.body.properties.company.value;
// Construct body for request to our API
payload = {name, email, company};
body = JSON.stringify(payload);
// TODO - Execute request to our API
// Set webhook response details
context.res = { status: 200 }
}
지금 우리는 우리의 대기 사항을 기입해야만 진정으로 요청을 발송할 수 있다.노드js에는 내장된 http
모듈이 하나 있지만, 우리는 더욱 간결한 문법과 다른 코드와의 완전한 일치성을 실현하기 위해 노드 획득 모듈을 사용하기를 선호하기로 결정했다.
지침에 따르면 함수 응용 프로그램은 이미 package.json
파일을 첨부했기 때문에 우리는 npm install node-fetch
을 실행하기만 하면 이 패키지를 사용할 수 있다.
이제 파일 맨 위에 노드를 가져와서 얻을 수 있습니다.
const fetch = require(‘node-fetch’);
다음 사항으로 교체하십시오.
const signupUrl = process.env.API_SIGNUP_URL;
const response = await fetch(
signupUrl,
{
method: 'POST',
body: signupBody,
headers: {
'Content-Type': 'application/json',
},
},
);
위에 호출해야 할 곳이 하나 더 있습니다. 그것이 바로 등록 URL의 출처입니다.함수 응용 프로그램은 외부에서 환경 변수를 지정하고 실행할 때 사용할 수 있도록 합니다.이것들은 모두 Azure 포털이나 Visual Studio 코드에서 유용한 Azure 도구를 통해 관리된다.
이 시스템은 원본 코드 관리 외에 기밀을 관리할 수 있고 로컬 테스트나 임시 저장/생산 실례의 다른 설정도 지원한다.
N, B. 간단하게 보기 위해서 나는 오류 응답을 적절하게 처리하고 메시지의 진실성을 검증하는 등 다른 중요한 세부 사항을 건너뛰었다.
국부 테스트
코드를 작성한 후, 우리는 지금 그것의 행동이 기대에 부합되는 것을 확보할 수 있다.다시 한 번, Visual Studio 코드는 여기에서 없어서는 안 되거나 없어서는 안 된다는 것이 증명되어 매우 간단하다. 디버깅 도구는 Google Chrome에서 익숙한 도구와 필적할 수 있다.
1단계: 디버거를 통해 함수 앱 실행
2단계: 기능 수행
그런 다음 수행에 필요한 바디를 제공할 수 있습니다.
유익한 것은 모든 테스트 요청에 기본 주체를 제공하기 위해 sample.dat
파일을 제공할 수 있다는 것이다.
ngrok와의 통합 검증
우리의 함수는 유효한 것 같지만, Hubspot이 보낸 데이터에 대해 어려운 가설을 했습니다.
나는 지금까지 나의 코드가 현실 세계의 데이터와 함께 일하는 것을 보았고 이상적인 상황은 작은 걸음으로 나의 가설을 검증하는 것을 볼 때까지 완전히 만족한 적이 없다.
이를 위해, 나는ngrok라는 실용 프로그램을 사용하여 터널을 열어 나의 로컬 운행 기능을 현실 생활의Hubspot이 촉발할 수 있는 곳에서 사용할 수 있도록 했다.다음 작업만 수행하면 됩니다.
npm install –g ngrok
ngrok http 7071
나의 로컬 환경은 현재 임시적이고 무작위로 생성된 공공 URL을 통해 접근할 수 있다.이런 방법을 사용하면 사이트에서 표를 작성하는 것부터 이 새로운 기능을 통과하는 절차를 검증할 수 있다.이외에, 이것은 우리로 하여금 Hubspot 웹hook 트리거가 제공하는 유효한 부하를 정확하게 볼 수 있게 하고, 우리의 메인 API를 호출하여 어떠한 의외의 문제를 디버깅할 수 있게 한다.
드워프스
우리는 지금 업무 기능이 하나 있는데, 우리가 해야 할 일은 바로 배치이다.다행히도 Visual Studio 코드는 다시 한 번 간단한 과정이 되었습니다. 몇 번만 누르면 저희 기능이 Azure 구독에 배치됩니다.위의 링크된 문서에서 이 과정을 설명합니다.
그러나 우리는 여기서 멈추지 않았다.비록 이것은 단지 작은 코드일 뿐이지만, 그것은 우리에게 매우 중요하기 때문에, 우리는 다른 서비스를 관리하는 것처럼 그것의 전체 생명 주기를 꼼꼼히 관리한다.
시작하고 실행하려면 Microsoft에서 제공하는 excellent guide 만 따릅니다.
함수 작성
함수 자체가 매우 간단하다.웹 훅 요청체에서 관련 필드를 추출하고 API에 요청만 하면 됩니다.
module.exports = async function (context, req) {
body = req.body;
// Get relevant details from body
const email = body.properties.email.value;
const firstname = body.properties.firstname && req.body.properties.firstname.value;
const lastname = body.properties.lastname && req.body.properties.lastname.value;
const name = `${firstname} ${lastname}`;
const company = body.properties.company && req.body.properties.company.value;
// Construct body for request to our API
payload = {name, email, company};
body = JSON.stringify(payload);
// TODO - Execute request to our API
// Set webhook response details
context.res = { status: 200 }
}
지금 우리는 우리의 대기 사항을 기입해야만 진정으로 요청을 발송할 수 있다.노드js에는 내장된 http
모듈이 하나 있지만, 우리는 더욱 간결한 문법과 다른 코드와의 완전한 일치성을 실현하기 위해 노드 획득 모듈을 사용하기를 선호하기로 결정했다.
지침에 따르면 함수 응용 프로그램은 이미 package.json
파일을 첨부했기 때문에 우리는 npm install node-fetch
을 실행하기만 하면 이 패키지를 사용할 수 있다.
이제 파일 맨 위에 노드를 가져와서 얻을 수 있습니다.
const fetch = require(‘node-fetch’);
다음 사항으로 교체하십시오.
const signupUrl = process.env.API_SIGNUP_URL;
const response = await fetch(
signupUrl,
{
method: 'POST',
body: signupBody,
headers: {
'Content-Type': 'application/json',
},
},
);
위에 호출해야 할 곳이 하나 더 있습니다. 그것이 바로 등록 URL의 출처입니다.함수 응용 프로그램은 외부에서 환경 변수를 지정하고 실행할 때 사용할 수 있도록 합니다.이것들은 모두 Azure 포털이나 Visual Studio 코드에서 유용한 Azure 도구를 통해 관리된다.
이 시스템은 원본 코드 관리 외에 기밀을 관리할 수 있고 로컬 테스트나 임시 저장/생산 실례의 다른 설정도 지원한다.
N, B. 간단하게 보기 위해서 나는 오류 응답을 적절하게 처리하고 메시지의 진실성을 검증하는 등 다른 중요한 세부 사항을 건너뛰었다.
국부 테스트
코드를 작성한 후, 우리는 지금 그것의 행동이 기대에 부합되는 것을 확보할 수 있다.다시 한 번, Visual Studio 코드는 여기에서 없어서는 안 되거나 없어서는 안 된다는 것이 증명되어 매우 간단하다. 디버깅 도구는 Google Chrome에서 익숙한 도구와 필적할 수 있다.
1단계: 디버거를 통해 함수 앱 실행
2단계: 기능 수행
그런 다음 수행에 필요한 바디를 제공할 수 있습니다.
유익한 것은 모든 테스트 요청에 기본 주체를 제공하기 위해 sample.dat
파일을 제공할 수 있다는 것이다.
ngrok와의 통합 검증
우리의 함수는 유효한 것 같지만, Hubspot이 보낸 데이터에 대해 어려운 가설을 했습니다.
나는 지금까지 나의 코드가 현실 세계의 데이터와 함께 일하는 것을 보았고 이상적인 상황은 작은 걸음으로 나의 가설을 검증하는 것을 볼 때까지 완전히 만족한 적이 없다.
이를 위해, 나는ngrok라는 실용 프로그램을 사용하여 터널을 열어 나의 로컬 운행 기능을 현실 생활의Hubspot이 촉발할 수 있는 곳에서 사용할 수 있도록 했다.다음 작업만 수행하면 됩니다.
npm install –g ngrok
ngrok http 7071
나의 로컬 환경은 현재 임시적이고 무작위로 생성된 공공 URL을 통해 접근할 수 있다.이런 방법을 사용하면 사이트에서 표를 작성하는 것부터 이 새로운 기능을 통과하는 절차를 검증할 수 있다.이외에, 이것은 우리로 하여금 Hubspot 웹hook 트리거가 제공하는 유효한 부하를 정확하게 볼 수 있게 하고, 우리의 메인 API를 호출하여 어떠한 의외의 문제를 디버깅할 수 있게 한다.
드워프스
우리는 지금 업무 기능이 하나 있는데, 우리가 해야 할 일은 바로 배치이다.다행히도 Visual Studio 코드는 다시 한 번 간단한 과정이 되었습니다. 몇 번만 누르면 저희 기능이 Azure 구독에 배치됩니다.위의 링크된 문서에서 이 과정을 설명합니다.
그러나 우리는 여기서 멈추지 않았다.비록 이것은 단지 작은 코드일 뿐이지만, 그것은 우리에게 매우 중요하기 때문에, 우리는 다른 서비스를 관리하는 것처럼 그것의 전체 생명 주기를 꼼꼼히 관리한다.
module.exports = async function (context, req) {
body = req.body;
// Get relevant details from body
const email = body.properties.email.value;
const firstname = body.properties.firstname && req.body.properties.firstname.value;
const lastname = body.properties.lastname && req.body.properties.lastname.value;
const name = `${firstname} ${lastname}`;
const company = body.properties.company && req.body.properties.company.value;
// Construct body for request to our API
payload = {name, email, company};
body = JSON.stringify(payload);
// TODO - Execute request to our API
// Set webhook response details
context.res = { status: 200 }
}
const fetch = require(‘node-fetch’);
const signupUrl = process.env.API_SIGNUP_URL;
const response = await fetch(
signupUrl,
{
method: 'POST',
body: signupBody,
headers: {
'Content-Type': 'application/json',
},
},
);
코드를 작성한 후, 우리는 지금 그것의 행동이 기대에 부합되는 것을 확보할 수 있다.다시 한 번, Visual Studio 코드는 여기에서 없어서는 안 되거나 없어서는 안 된다는 것이 증명되어 매우 간단하다. 디버깅 도구는 Google Chrome에서 익숙한 도구와 필적할 수 있다.
1단계: 디버거를 통해 함수 앱 실행
2단계: 기능 수행
그런 다음 수행에 필요한 바디를 제공할 수 있습니다.
유익한 것은 모든 테스트 요청에 기본 주체를 제공하기 위해
sample.dat
파일을 제공할 수 있다는 것이다.ngrok와의 통합 검증
우리의 함수는 유효한 것 같지만, Hubspot이 보낸 데이터에 대해 어려운 가설을 했습니다.
나는 지금까지 나의 코드가 현실 세계의 데이터와 함께 일하는 것을 보았고 이상적인 상황은 작은 걸음으로 나의 가설을 검증하는 것을 볼 때까지 완전히 만족한 적이 없다.
이를 위해, 나는ngrok라는 실용 프로그램을 사용하여 터널을 열어 나의 로컬 운행 기능을 현실 생활의Hubspot이 촉발할 수 있는 곳에서 사용할 수 있도록 했다.다음 작업만 수행하면 됩니다.
npm install –g ngrok
ngrok http 7071
나의 로컬 환경은 현재 임시적이고 무작위로 생성된 공공 URL을 통해 접근할 수 있다.이런 방법을 사용하면 사이트에서 표를 작성하는 것부터 이 새로운 기능을 통과하는 절차를 검증할 수 있다.이외에, 이것은 우리로 하여금 Hubspot 웹hook 트리거가 제공하는 유효한 부하를 정확하게 볼 수 있게 하고, 우리의 메인 API를 호출하여 어떠한 의외의 문제를 디버깅할 수 있게 한다.
드워프스
우리는 지금 업무 기능이 하나 있는데, 우리가 해야 할 일은 바로 배치이다.다행히도 Visual Studio 코드는 다시 한 번 간단한 과정이 되었습니다. 몇 번만 누르면 저희 기능이 Azure 구독에 배치됩니다.위의 링크된 문서에서 이 과정을 설명합니다.
그러나 우리는 여기서 멈추지 않았다.비록 이것은 단지 작은 코드일 뿐이지만, 그것은 우리에게 매우 중요하기 때문에, 우리는 다른 서비스를 관리하는 것처럼 그것의 전체 생명 주기를 꼼꼼히 관리한다.
npm install –g ngrok
ngrok http 7071
우리는 지금 업무 기능이 하나 있는데, 우리가 해야 할 일은 바로 배치이다.다행히도 Visual Studio 코드는 다시 한 번 간단한 과정이 되었습니다. 몇 번만 누르면 저희 기능이 Azure 구독에 배치됩니다.위의 링크된 문서에서 이 과정을 설명합니다.
그러나 우리는 여기서 멈추지 않았다.비록 이것은 단지 작은 코드일 뿐이지만, 그것은 우리에게 매우 중요하기 때문에, 우리는 다른 서비스를 관리하는 것처럼 그것의 전체 생명 주기를 꼼꼼히 관리한다.
Reference
이 문제에 관하여(노드에서 Azure 함수를 작성합니다.js 구현 웹훅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zegami/writing-an-azure-function-in-node-js-to-implement-a-webhook-2a52텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)