Docs Menu
Docs Home
/ /
Atlas App Services
/ /

서비스 Webhooks 구성 [사용 중단됨]

이 페이지의 내용

  • 개요
  • 절차

중요

타사 서비스 & 푸시 알림 사용 중단

App Services의 타사 서비스 및 푸시 알림은 함수에서 외부 종속성을 사용하는 HTTP 엔드포인트를 만들기 위해 더 이상 사용되지 않습니다.

웹훅은 동작에 대한 변경 없이 HTTPS 엔드포인트로 이름이 변경되었습니다. 기존 웹훅을 마이그레이션해야 합니다.

기존 서비스는,9월까지 30 계속2025 작동합니다.

타사 서비스 및 푸시 알림은 이제 더 이상 사용되지 않으므로 App Services UI에서 기본적으로 제거되었습니다. 기존 타사 서비스 또는 푸시 알림을 관리해야 하는 경우 다음을 수행하여 구성을 UI에 다시 추가할 수 있습니다.

  • 왼쪽 탐색의 Manage 섹션에서 App Settings를 클릭합니다.

  • Temporarily Re-Enable 3rd Party Services 옆의 토글 스위치를 활성화한 다음 변경 사항을 저장합니다.

일부 외부 서비스에서는 외부 클라이언트가 HTTP를 통해 호출할 수 있는 수신 webhooks를 만들 수 있습니다. App Services UI 또는 App Services CLI를 사용하여 이러한 서비스에 대한 webhooks를 만들 수 있습니다. 사용하려는 메서드에 해당하는 탭을 아래에서 선택합니다.

1

수신 웹훅의 범위는 개별 서비스 로 할당됩니다. App Services UI의 연결된 서비스 페이지에서 웹훅을 만들고 관리할 수 있습니다.

수신 웹훅을 만들려면 다음과 같이 합니다:

  1. 왼쪽 탐색 패널에서 Services 을 클릭합니다.

  2. 수신 웹훅을 추가할 서비스를 클릭합니다.

  3. 서비스에 대한 Incoming Webhooks 탭을 선택합니다.

  4. Add Incoming Webhook를 클릭합니다. App Services는 새 웹훅에 대한 Settings 화면으로 리디렉션합니다.

2

Webhook Name 필드에 함수를 식별할 수 있는 고유한 이름을 입력합니다. 이 이름은 서비스에 대해 생성한 다른 웹훅과 구별되어야 합니다.

3

웹훅을 비롯한 Atlas Functions는 항상 특정 애플리케이션 사용자의 컨텍스트에서 또는 규칙을 우회하는 시스템 사용자로서 실행됩니다. 웹훅의 실행 사용자를 구성하려면 App Services에서 웹훅에 사용해야 하는 인증 유형을 지정합니다.

인증 유형
설명
애플리케이션 인증

이 유형의 인증은 들어오는 각 요청에 의해 지정된 기존 애플리케이션 사용자의 컨텍스트에서 실행되도록 웹훅을 구성합니다. 수신 요청에는 요청 본문 또는 요청 헤더에 사용자의 인증 제공자 자격 증명이 포함되어야 합니다.

다음 예시에서는 지원되는 각 인증 제공자의 필드 이름과 값을 보여줍니다.

{
"email": "<User's Email Address>",
"password": "<User's Password>"
}
{
"api-key": "<User's API Key>"
}
{
"jwtTokenString": "<User's JWT Token>"
}

중요

헤더와 본문 필드를 모두 사용하지 않기

요청에 요청 헤더와 요청 본문 모두에 자격 증명이 포함된 경우 App Services는 오류를 발생시키고 함수를 실행하지 않습니다.

참고

애플리케이션 사용자

애플리케이션 인증을 사용하여 각 요청에 대해 추가 사용자 관련 작업을 수행하는 웹훅을 구성할 수 있습니다.

  • Fetch Custom User Data 을 활성화 하면 App Services 는 요청하는 사용자의 사용자 지정 사용자 데이터 를 쿼리하고 데이터가 있는 경우 context.user.custom_data 속성 의 객체 로 노출합니다.

  • Create User Upon Authentication을 활성화하면 App Services에서 제공된 사용자 자격 증명이 이미 존재하는 사용자와 일치하지 않는 경우 제공된 사용자 자격 증명을 기반으로 새 사용자를 자동으로 만듭니다. 새 사용자 생성 요청 시 자격 증명에 해당하는 인증 제공자를 활성화해야 합니다.

시스템
이 인증 유형은 웹훅이 시스템 사용자로 실행되도록 구성하며, 이 사용자는 MongoDB CRUD 및 집계 API에 대한 전체 액세스 권한이 있고 규칙, 역할 또는 권한의 영향을 받지 않습니다.
사용자 ID
이 유형의 인증은 항상 특정 애플리케이션 사용자로 실행되도록 웹훅을 구성합니다.
스크립트
이 유형의 인증은 정의한 사용자 지정 함수의 결과에 따라 특정 애플리케이션 사용자로 실행되도록 웹훅을 구성합니다. 함수는 특정 사용자의 id 문자열을 반환하거나 { "runAsSystem": true }를 반환하여 시스템 사용자를 지정할 수 있습니다.
UI 에 사용자 인증 유형 입력
클릭하여 확대
4

수신 요청이 특정 HTTP 메서드 를 사용하도록 요구할 수 있습니다. 또는 모든 HTTP 메서드를 허용하고 웹훅 함수에서 httpMethod 컨텍스트 의 속성 을 검사하여 각 메서드를 개별적으로 처리하다 할 수 있습니다. 다음 예시 함수에서와 같이 객체 를 요청 합니다.

exports = function(payload, response) {
switch(context.request.httpMethod) {
case "GET": { /* Handle GET requests */ }
case "POST": { /* Handle POST requests */ }
case "PUT": { /* Handle PUT requests */ }
case "DELETE": { /* Handle DELETE requests */ }
case "PATCH": { /* Handle PATCH requests */ }
default: {}
}
}
UI 의 HTTP 메서드 드롭다운 입력
5

구성 가능한 HTTP 응답 을 보낼 수 있습니다. 웹훅을 호출하는 외부 서비스에 연결합니다.

Respond With Result을(를) 활성화하면 웹훅이 수신 요청에 대해 웹훅 함수 반환 값을 body 필드로 포함하는 기본 HTTP 200 응답으로 응답합니다. App Services가 자동으로 두 번째 인수로 전달하는 response 객체를 사용하여 웹훅 함수 내에서 사용자 지정 HTTP 응답을 구성할 수 있습니다.

UI 의 결과 토글로 응답
클릭하여 확대
6

Can Evaluate표현식을 정의하여 각 요청의 내용에 따라 요청을 동적으로 승인할 수 있습니다. App Services는 웹훅이 수신하는 모든 수신 요청에 대한 식을 평가합니다. 표현식을 지정하지 않으면 App Services는 인증된 모든 수신 요청에 자동으로 권한을 부여합니다.

이 표현식은 %%request의 확장을 포함한 표준 표현식 변수를 확장할 수 있습니다.

웹훅의 UI 에서 JSON 표현식 입력을 평가할 수 있습니다.
클릭하여 확대
7

웹훅 요청이 신뢰할 수 있는 출처에서 전송되었는지 확인하기 위해 일부 외부 서비스에서는 들어오는 요청에 몇 가지 규정된 방식 중 하나로 비밀 문자열을 통합하도록 요구합니다. HTTP 서비스와 같은 다른 서비스에서는 선택적으로 요청 유효성 검사(request validation)를 요구할 수 있습니다.

웹훅에 요청 유효성 검사가 필요한 경우:

  1. 요청 유효성 검사 방법을 선택합니다.

  2. 요청 유효성 검사 프로세스에서 사용할 Secret 문자열을 입력합니다.

UI 의 요청 유효성 검사 비밀 입력
클릭하여 확대
8

웹훅을 설정한 후에는 웹훅을 호출할 때 실행되는 함수를 작성하는 것만 남았습니다. 앱 서비스는 웹훅 함수의 인수로 두 개의 객체를 자동으로 전달합니다:

Argument
설명
payload
수신 요청 페이로드의 EJSON 표현입니다. 페이로드 문서의 내용은 웹훅을 발생시킨 서비스 및 이벤트에 따라 달라집니다. 특정 서비스의 payload 객체에 대한 설명은 해당 서비스의 참조 페이지를 확인하세요.
response
웹훅을 호출한 클라이언트에 대한 응답을 구성하는 HTTP 응답 객체입니다. 객체에는 응답의 헤더, 본문, 상태 코드를 설정할 수 있는 방법이 있습니다. 이러한 방법 중 하나를 호출하면 기본 응답 동작이 재정의됩니다.

다음 웹훅 기능을 자체 웹훅의 기반으로 사용할 수 있습니다.

exports = async function (payload, response) {
// Convert the webhook body from BSON to an EJSON object
const body = EJSON.parse(payload.body.text());
// Execute application logic, such as working with MongoDB
if (body.someField) {
const mdb = context.services.get("mongodb-atlas");
const requests = mdb.db("demo").collection("requests");
const { insertedId } = await requests.insertOne({
someField: body.someField,
});
// Respond with an affirmative result
response.setStatusCode(200);
response.setBody(`Successfully saved "someField" with _id: ${insertedId}.`);
} else {
// Respond with a malformed request error
response.setStatusCode(400);
response.setBody(`Could not find "someField" in the webhook request body.`);
}
// This return value does nothing because we already modified the response object.
// If you do not modify the response object and you enable *Respond with Result*,
// App Services will include this return value as the response body.
return { msg: "finished!" };
};

참고

함수 편집기에서 웹훅 함수 응답을 디버그하려면 함수를 실행할 때 HTTP 응답 객체를 수동으로 제공해야 합니다.

exports(
{ body: "This document is the webhook payload" },
new HTTPResponse()
)
9

변경 사항이 적용되기 전에 웹훅에 대한 변경 사항을 저장해야 합니다. 이렇게 하려면 Settings 화면 또는 Function Editor에서 Save 을 클릭합니다.

중요

Atlas CLI 버전 확인

이 절차에서는 Realm CLI [사용 중단됨]의 2 버전을 사용합니다. realm-cli 이전 버전이 있는 경우 최신 버전으로 업그레이드 하거나 --help 플래그를 사용하여 사용 중인 버전에서 지원되는 명령 목록을 확인하세요.

1

realm-cli 를 사용하여 수신 웹훅을 정의하려면 애플리케이션 구성 파일의 로컬 복사본이 필요합니다.

최신 버전의 앱의 로컬 사본을 가져오려면 다음을 실행하세요.

realm-cli pull --remote="<Your App ID>"

Realm UI의 Deploy > Export App 화면에서 애플리케이션의 구성 파일 사본을 다운로드할 수도 있습니다.

2

/http_endpoints/<service>/incoming_webhooks/ 에서 웹훅과 동일한 이름으로 새 하위 디렉토리를 생성합니다.

mkdir -p http_endpoints/<service>/incoming_webhooks/<webhook name>
3

config.json 라는 이름의 수신 웹훅 구성 파일 을 새 웹훅 디렉토리 에 추가합니다.

구성 파일 의 형식은 다음과 같아야 합니다.

http_endpoints/<Service Name>/incoming_webhooks/<Webhook Name>/config.json
{
"name": "<Webhook Name>",
"can_evaluate": { <JSON Expression> },
"run_as_authed_user": <Boolean>,
"run_as_user_id": "<App Services User ID>",
"run_as_user_id_script_source": "<Function Source Code>",
"respond_result": <Boolean>,
"fetch_custom_user_data": <Boolean>,
"create_user_on_auth": <Boolean>,
"options": {
"httpMethod": "<HTTP Method>",
"validationMethod": "<Webhook Validation Method>",
"secret": "<Webhook Secret>"
}
}
4

구성 파일의 name 필드 에 웹훅의 이름을 입력합니다. 이 이름은 서비스에 대해 생성한 다른 웹훅과 구별되어야 합니다.

{
"name": "<Unique Webhook Name>"
}
5

App Services 가 웹훅에 사용해야 하는 인증 유형을 지정합니다. App Services 는 다음과 같은 웹훅 인증 방법을 지원합니다.

인증 방법
설명
애플리케이션 인증

이 유형의 인증은 들어오는 각 요청에 의해 지정된 기존 애플리케이션 사용자의 컨텍스트에서 실행되도록 웹훅을 구성합니다. 수신 요청에는 요청 본문 또는 요청 헤더에 사용자의 인증 제공자 자격 증명이 포함되어야 합니다.

애플리케이션 인증 을 사용하도록 웹훅을 구성하려면 run_as_authed_user 값을 true 로 설정하다 합니다.

{
"run_as_authed_user": true,
"run_as_user_id": "",
"run_as_user_id_script_source": "",
}

예시

다음 예제에서는 수신 요청에 지원되는 각 인증 제공자 에 대해 본문 또는 헤더 필드로 포함해야 하는 필드 이름과 값을 보여 줍니다.

{
"email": "<User's Email Address>",
"password": "<User's Password>"
}
{
"api-key": "<User's API Key>"
}
{
"jwtTokenString": "<User's JWT Token>"
}

중요

헤더와 본문 필드를 모두 사용하지 않기

요청에 요청 헤더와 요청 본문 모두에 자격 증명이 포함된 경우 App Services는 오류를 발생시키고 함수를 실행하지 않습니다.

시스템

이 인증 유형은 웹훅이 시스템 사용자로 실행되도록 구성하며, 이 사용자는 MongoDB CRUD 및 집계 API에 대한 전체 액세스 권한이 있고 규칙, 역할 또는 권한의 영향을 받지 않습니다.

시스템 사용자 로 실행 웹훅을 구성하려면 다른 인증 필드를 설정하다 하지 마세요.

{
"run_as_authed_user": false,
"run_as_user_id": "",
"run_as_user_id_script_source": "",
}
사용자 ID

이 유형의 인증은 항상 특정 애플리케이션 사용자로 실행되도록 웹훅을 구성합니다.

웹훅이 항상 특정 사용자로 실행 구성하려면 run_as_user_id 를 사용자 ID로 설정하다 합니다.

{
"run_as_authed_user": false,
"run_as_user_id": "<App Services User ID>",
"run_as_user_id_script_source": "",
}
스크립트

이 유형의 인증 은 정의한 사용자 지정 함수 의 결과에 따라 결정되는 특정 애플리케이션 사용자로 실행 웹훅을 구성합니다. 함수는 특정 사용자의 id string 을 반환하거나 { "runAsSystem": true}을 반환하여 시스템 사용자 를 지정할 수 있습니다.

함수에 의해 결정된 사용자로 실행 웹훅을 구성하려면 run_as_user_id_script_source 을 문자열화된 함수 코드로 설정하다 합니다.

{
"run_as_authed_user": false,
"run_as_user_id": "",
"run_as_user_id_script_source": "<Stringified Function>",
}
6

수신 요청이 특정 HTTP 메서드 를 사용하도록 요구할 수 있습니다. 또는 모든 HTTP 메서드를 허용하고 웹훅 함수에서 httpMethod 컨텍스트 의 속성 을 검사하여 각 메서드를 개별적으로 처리하다 할 수 있습니다. 다음 예시 함수에서와 같이 객체 를 요청 합니다.

exports = function(payload, response) {
switch(context.request.httpMethod) {
case "GET": { /* Handle GET requests */ }
case "POST": { /* Handle POST requests */ }
case "PUT": { /* Handle PUT requests */ }
case "DELETE": { /* Handle DELETE requests */ }
case "PATCH": { /* Handle PATCH requests */ }
default: {}
}
}

웹훅 메서드를 설정하다 하려면 options.httpMethod 필드 를 모두 대문자 또는 "ANY" 를 사용하여 메서드 이름으로 설정합니다.

{
"options": {
"httpMethod": "POST"
}
}
7

구성 가능한 HTTP 응답 을 보낼 수 있습니다. 웹훅을 호출하는 외부 서비스에 연결합니다. 들어오는 요청에 대한 응답을 보내도록 웹훅을 구성하려면 respond_resulttrue 로 설정하다 합니다.

Respond With Result을(를) 활성화하면 웹훅이 수신 요청에 대해 웹훅 함수 반환 값을 body 필드로 포함하는 기본 HTTP 200 응답으로 응답합니다. App Services가 자동으로 두 번째 인수로 전달하는 response 객체를 사용하여 웹훅 함수 내에서 사용자 지정 HTTP 응답을 구성할 수 있습니다.

8

Can Evaluate 표현식 을 정의하여 각 요청 의 내용을 기반으로 요청에 동적으로 권한을 부여할 수 있습니다. App Services 는 웹훅이 수신하는 모든 수신 요청 에 대한 표현식 을 평가합니다. 표현식 은 확장 %%request 을 포함한 표준 표현식 변수 를 확장할 수 있습니다.

권한 부여 표현식 을 정의하려면 can_evaluate 필드 값을 표현식 으로 설정하다 합니다. 표현식 을 지정하지 않으면 App Services 는 인증된 모든 수신 요청에 자동으로 권한을 부여합니다.

예시

다음 표현식 은 발신자의 IP 주소 가 주소 목록에 포함되지 않은 경우에만 수신 요청을 승인합니다.

{
"%%request.remoteIPAddress": {
"$nin": [
"248.88.57.58",
"19.241.23.116",
"147.64.232.1"
]
}
}
9

웹훅 요청이 신뢰할 수 있는 출처에서 전송되었는지 확인하기 위해 일부 외부 서비스에서는 들어오는 요청에 몇 가지 규정된 방식 중 하나로 비밀 문자열을 통합하도록 요구합니다. HTTP 서비스와 같은 다른 서비스에서는 선택적으로 요청 유효성 검사(request validation)를 요구할 수 있습니다.

웹훅 구성의 options 문서 에서 웹훅의 요청 권한 부여 방법을 구성할 수 있습니다. App Services 는 다음과 같은 요청 유효성 검사 메서드를 지원합니다.

메서드
설명
추가 권한 부여 없음

수신 웹훅 요청에는 추가 권한 부여 가 필요하지 않습니다.

{
"validationMethod": "NO_VALIDATION"
}
페이로드 서명 확인

수신 웹훅 요청에는 요청 본문의 해시 된 서명과 시크릿 값이 포함되어야 합니다. 자세한 내용은 페이로드 서명 확인을 참조하세요.

{
"validationMethod": "VERIFY_PAYLOAD",
"secret": "<Secret Value>"
}
비밀 필요

수신 웹훅 요청에는 string secret URL웹훅 의 쿼리 매개변수로 시크릿 값이 포함되어야 합니다. 자세한 내용 은 쿼리 매개변수로서의 비밀을 참조하세요.

{
"validationMethod": "SECRET_AS_QUERY_PARAM",
"secret": "<Secret Value>"
}
10

새 웹훅 디렉토리 에 source.js 라는 파일 을 추가합니다. 파일 에는 웹훅이 호출될 때 실행되는 유효한 함수가 포함되어 있어야 합니다.

앱 서비스는 웹훅 함수의 인수로 두 개의 객체를 자동으로 전달합니다:

Argument
설명
payload
수신 요청 페이로드의 EJSON 표현입니다. 페이로드 문서의 내용은 웹훅을 발생시킨 서비스 및 이벤트에 따라 달라집니다. 특정 서비스의 payload 객체에 대한 설명은 해당 서비스의 참조 페이지를 확인하세요.
response
웹훅을 호출한 클라이언트에 대한 응답을 구성하는 HTTP 응답 객체입니다. 객체에는 응답의 헤더, 본문, 상태 코드를 설정할 수 있는 방법이 있습니다. 이러한 방법 중 하나를 호출하면 기본 응답 동작이 재정의됩니다.

다음 웹훅 기능을 자체 웹훅의 기반으로 사용할 수 있습니다.

exports = async function (payload, response) {
// Convert the webhook body from BSON to an EJSON object
const body = EJSON.parse(payload.body.text());
// Execute application logic, such as working with MongoDB
if (body.someField) {
const mdb = context.services.get("mongodb-atlas");
const requests = mdb.db("demo").collection("requests");
const { insertedId } = await requests.insertOne({
someField: body.someField,
});
// Respond with an affirmative result
response.setStatusCode(200);
response.setBody(`Successfully saved "someField" with _id: ${insertedId}.`);
} else {
// Respond with a malformed request error
response.setStatusCode(400);
response.setBody(`Could not find "someField" in the webhook request body.`);
}
// This return value does nothing because we already modified the response object.
// If you do not modify the response object and you enable *Respond with Result*,
// App Services will include this return value as the response body.
return { msg: "finished!" };
};
11

config.json 에서 클러스터 에 대한 읽기 설정 (read preference) 을 설정하다 한 후에는 구성을 원격 앱 으로 푸시할 수 있습니다. App Services CLI 는 푸시 시 업데이트 를 즉시 배포합니다.

realm-cli push --remote="<Your App ID>"

돌아가기

타사 서비스 구성

이 페이지의 내용