다음을 통해 공유


Runtime

런타임 동작을 결정하는 구성 설정입니다.

페이지 매김 설정

Property Default Description
runtime.pagination.max 페이지 크기 페이지당 최대 레코드 정의
runtime.pagination.default-page-size 응답당 기본 레코드 설정

REST 설정

Property Default Description
runtime.rest.path "/api" REST 엔드포인트의 기본 경로
runtime.rest.enabled true 모든 엔터티에 대해 REST 요청을 사용하거나 사용하지 않도록 설정할 수 있습니다.
runtime.rest.request-body-strict true true인 경우 요청 본문에서 불필요한 필드를 허용하지 않습니다.

GraphQL 설정

Property Default Description
runtime.graphql.allow-introspection true 기본 GraphQL 스키마 쿼리 허용
runtime.graphql.path "/graphql" GraphQL 엔드포인트의 기본 경로
runtime.graphql.enabled true 모든 엔터티에 대해 GraphQL 요청을 사용하거나 사용하지 않도록 설정할 수 있습니다.
runtime.graphql.depth-limit null GraphQL 쿼리의 최대 허용 깊이
runtime.graphql.multiple-mutations.create.enabled false 모든 엔터티에 대해 다중 만들기 변형 허용

호스트 설정

Property Default Description
runtime.host.max-response-size-mb 158 단일 결과에서 허용되는 데이터베이스 응답의 최대 크기(MB)
runtime.host.mode "production" 실행 모드; "production" 또는 "development"

CORS 설정

Property Default Description
runtime.host.cors.origins [] 허용되는 CORS 원본
runtime.host.cors.allow-credentials false Access-Control-Allow-Credentials 헤더에 대한 값 설정

인증 설정

Property Default Description
runtime.host.authentication.provider Unauthenticated 인증 공급자
runtime.host.authentication.jwt.audience null JWT 대상 그룹
runtime.host.authentication.jwt.issuer null JWT 발급자

캐시 설정

Property Default Description
runtime.cache.enabled false 전역적으로 응답 캐싱 사용
runtime.cache.ttl-seconds 5 전역 캐시의 TL(Time to Live) (초)
runtime.cache.level-2.enabled false 분산 수준 2 캐시를 전역적으로 사용하도록 설정
runtime.cache.level-2.provider "redis" 수준 2 캐시에 대한 분산 캐시 공급자
runtime.cache.level-2.connection-string null 수준 2 캐시 공급자에 대한 연결 문자열
runtime.cache.level-2.partition null 분산 캐시 공간을 격리하기 위한 선택적 파티션 이름

압축 설정

Property Default Description
runtime.compression.level optimal HTTP 응답 압축 수준(optimal또는fastestnone)

텔레메트리 설정

Property Default Description
runtime.telemetry.application-insights.connection-string null Application Insights 연결 문자열
runtime.telemetry.application-insights.enabled true Application Insights 원격 분석을 사용하거나 사용하지 않도록 설정
runtime.telemetry.open-telemetry.endpoint null OpenTelemetry 수집기 URL
runtime.telemetry.open-telemetry.headers {} OpenTelemetry 내보내기 헤더
runtime.telemetry.open-telemetry.service-name "dab" OpenTelemetry 서비스 이름
runtime.telemetry.open-telemetry.exporter-protocol "grpc" OpenTelemetry 프로토콜("grpc" 또는 "httpprotobuf")
runtime.telemetry.open-telemetry.enabled true OpenTelemetry 사용 또는 사용 안 함
runtime.telemetry.open-telemetry.enabled true OpenTelemetry 사용 또는 사용 안 함
runtime.telemetry.azure-log-analytics.enabled false Azure Log Analytics를 사용하거나 사용하지 않도록 설정
runtime.telemetry.azure-log-analytics.dab-identifier "DabLogs" Azure Log Analytics의 DAB 식별자
runtime.telemetry.azure-log-analytics.flush-interval-seconds 5 로그 일괄 처리 푸시 간 간격(초)
runtime.telemetry.azure-log-analytics.auth.custom-table-name null Azure Log Analytics의 사용자 지정 테이블 이름
runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id null 데이터 수집 규칙 변경할 수 없는 ID
runtime.telemetry.azure-log-analytics.auth.dce-endpoint null 데이터 수집 엔드포인트 URL
runtime.telemetry.file.enabled false 파일 싱크 로깅을 사용하거나 사용하지 않도록 설정
runtime.telemetry.file.path "/logs/dab-log.txt" 원격 분석 로그에 대한 파일 경로
runtime.telemetry.file.rolling-interval "Day" 로그 파일의 롤링 간격
runtime.telemetry.file.retained-file-count-limit 1 보존된 로그 파일의 최대 수
runtime.telemetry.file.file-size-limit-bytes 1048576 롤링 전 최대 파일 크기(바이트)
runtime.telemetry.log-level.namespace null 네임스페이스별 로그 수준 재정의
runtime.health.enabled true 상태 검사 엔드포인트를 전역적으로 사용하거나 사용하지 않도록 설정
runtime.health.roles null 포괄적인 상태 엔드포인트에 허용되는 역할
runtime.health.cache-ttl-seconds 5 상태 검사 보고서 캐시 항목의 TL(Time to Live) (초)
runtime.health.max 쿼리 병렬 처리 4 최대 동시 상태 검사 쿼리(범위: 1-8)

MCP 설정

Property Default Description
runtime.mcp.enabled true MCP 엔드포인트를 전역적으로 사용하거나 사용하지 않도록 설정
runtime.mcp.path "/mcp" MCP 엔드포인트의 기본 경로
runtime.mcp.description null 초기화 중에 MCP 클라이언트로 전송된 서버 설명
runtime.mcp.dml-tools true 모든 DML 도구 또는 도구별 컨트롤에 대한 개체를 사용하거나 사용하지 않도록 설정합니다.
runtime.mcp.dml-tools.describe-entities true describe_entities 도구를 사용하도록 설정
runtime.mcp.dml-tools.create-record true create_record 도구를 사용하도록 설정
runtime.mcp.dml-tools.read-records true read_records 도구를 사용하도록 설정
runtime.mcp.dml-tools.update-record true update_record 도구를 사용하도록 설정
runtime.mcp.dml-tools.delete-record true delete_record 도구를 사용하도록 설정
runtime.mcp.dml-tools.execute-entity true execute_entity 도구를 사용하도록 설정
runtime.mcp.dml-tools.aggregate-records true aggregate_records 도구(쿼리 시간 제한이 있는 부울 또는 개체)를 사용하도록 설정합니다.

형식 개요

{
  "runtime": {
    "pagination": {
      "max-page-size": <integer|null> (default: `100000`),
      "default-page-size": <integer|null> (default: `100`)
    },
    "rest": {
      "path": <string> (default: "/api"),
      "enabled": <true>|<false>,
      "request-body-strict": <true>|<false> (default: `true`)
    },
    "graphql": {
      "path": <string> (default: "/graphql"),
      "enabled": <true>|<false>,
      "allow-introspection": <true>|<false>,
      "depth-limit": <integer|null> (default: `null`),
      "multiple-mutations": {
        "create": {
          "enabled": <true>|<false> (default: `false`)
        }
      }
    },
    "host": {
      "mode": <"production"> (default) | <"development">,
      "max-response-size-mb": <integer|null> (default: `158`),
      "cors": {
        "origins": [ "<string>" ],
        "allow-credentials": <true>|<false> (default: `false`)
      },
      "authentication": {
        "provider": <string> (default: "Unauthenticated"),
        "jwt": {
          "audience": "<string>",
          "issuer": "<string>"
        }
      }
    }
  },
    "compression": {
      "level": <"optimal"> (default) | <"fastest"> | <"none">
    },
    "cache": {
      "enabled": <true>|<false> (default: `false`),
      "ttl-seconds": <integer> (default: `5`),
      "level-2": {
        "enabled": <true>|<false> (default: `false`),
        "provider": <"redis">,
        "connection-string": <string>,
        "partition": <string>
      }
    },
    "telemetry": {
      "application-insights": {
        "connection-string": "<string>",
        "enabled": <true>|<false> (default: `true`)
      },
      "open-telemetry": {
        "endpoint": "<string>",
        "headers": "<string>",
        "service-name": <string> (default: "dab"),
        "exporter-protocol": <"grpc"> (default) | <"httpprotobuf">,
        "enabled": <true>|<false> (default: `true`)
      },
      "azure-log-analytics": {
        "enabled": <true>|<false> (default: `false`),
        "dab-identifier": <string> (default: "DabLogs"),
        "flush-interval-seconds": <integer> (default: `5`),
        "auth": {
          "custom-table-name": <string>,
          "dcr-immutable-id": <string>,
          "dce-endpoint": <string>
        }
      },
      "file": {
        "enabled": <true>|<false> (default: `false`),
        "path": <string> (default: "/logs/dab-log.txt"),
        "rolling-interval": <string> (default: "Day"),
        "retained-file-count-limit": <integer> (default: `1`),
        "file-size-limit-bytes": <integer> (default: `1048576`)
      },
      "log-level": {
        // namespace keys
        "<namespace>": <"trace"|"debug"|"information"|"warning"|"error"|"critical"|"none"|null>
      }
    },
    "health": {
      "enabled": <true>|<false> (default: `true`),
      "roles": [ "<string>" ],
      "cache-ttl-seconds": <integer> (default: `5`),
      "max-query-parallelism": <integer> (default: `4`)
    },
    "mcp": {
      "enabled": <true>|<false> (default: `true`),
      "path": <string> (default: `"/mcp"`),
      "description": <string>,
      "dml-tools": <true>|<false> | {
        "describe-entities": <true>|<false> (default: `true`),
        "create-record": <true>|<false> (default: `true`),
        "read-records": <true>|<false> (default: `true`),
        "update-record": <true>|<false> (default: `true`),
        "delete-record": <true>|<false> (default: `true`),
        "execute-entity": <true>|<false> (default: `true`),
        "aggregate-records": <true>|<false> | {
          "enabled": <true>|<false> (default: `true`),
          "query-timeout": <integer> (default: `30`)
        }
      }
    }
  }
}

모드(호스트 런타임)

Parent Property Type Required Default
runtime host enum(production | development) ❌ 아니요 production

개발 동작

  • GraphQL 테스트에 니트로(이전의 바나나 케이크 팝) 사용
  • REST 테스트에 Swagger UI 사용
  • 익명 상태 검사 사용
  • 로깅 세부 정보 표시 증가(디버그)

Format

{
  "runtime": {
    "host": {
      "mode": "production" (default) | "development"
    }
  }
}

최대 응답 크기(호스트 런타임)

Parent Property Type Required Default
runtime.host max-response-size-mb integer ❌ 아니요 158

지정된 결과에 대한 최대 크기(메가바이트)를 설정합니다. 대용량 응답은 시스템에 max-response-size-mb 부담을 줄 수 있으므로 오버로드를 방지하기 위해 총 크기(행 개수와 다름)의 한도를 지정합니다. 특히 텍스트 또는 JSON과 같은 큰 열이 있습니다.

Value Result
설정되지 않음 기본값 사용
null 기본값 사용
integer 모든 양의 32비트 정수
<= 0 지원되지 않음

Format

{
  "runtime": {
    "host": {
      "max-response-size-mb": <integer; default: 158>
    }
  }
}

GraphQL(런타임)

Parent Property Type Required Default
runtime graphql object ❌ 아니요 -

전역 GraphQL 구성.

중첩 속성

Parent Property Type Required Default
runtime.graphql enabled boolean ❌ 아니요 None
runtime.graphql path string ❌ 아니요 "/graphql"
runtime.graphql depth-limit integer ❌ 아니요 없음(무제한)
runtime.graphql allow-introspection boolean ❌ 아니요 True
runtime.graphql multiple-mutations.create.enabled boolean ❌ 아니요 False

속성 정보

  • 하위 경로는 속성에 대해 path 허용되지 않습니다.
  • 중첩된 쿼리를 제한하는 데 사용합니다 depth-limit .
  • GraphQL 스키마를 숨기도록 allow-introspection 설정합니다false.
  • 단일 변형에 여러 엔터티를 삽입하는 데 사용합니다 multiple-mutations .

Format

{
  "runtime": {
    "graphql": {
      "enabled": <true> (default) | <false>
      "depth-limit": <integer|null> (default: `null`),
      "path": <string> (default: /graphql),
      "allow-introspection": <true> (default) | <false>,
      "multiple-mutations": {
        "create": {
          "enabled": <true> | <false> (default)
        }
      }
    }
  }
}

예: 여러 변형

Configuration

{
  "runtime": {
    "graphql": {
      "multiple-mutations": {
        "create": {
          "enabled": true
        }
      }
    }
  },
  "entities": {
    "User": {
      "source": "dbo.Users",
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["create"] // entity permissions are required
        }
      ]
    }
  }
}

GraphQL 변경

mutation {
  createUsers(input: [
    { name: "Alice", age: 30, isAdmin: true },
    { name: "Bob", age: 25, isAdmin: false },
    { name: "Charlie", age: 35, isAdmin: true }
  ]) {
    id
    name
    age
    isAdmin
  }
}

REST(런타임)

Parent Property Type Required Default
runtime rest object ❌ 아니요 -

전역 REST 구성.

중첩 속성

Parent Property Type Required Default
runtime.rest enabled boolean ❌ 아니요 None
runtime.rest path string ❌ 아니요 "/api"
runtime.rest request-body-strict boolean ❌ 아니요 True

속성 정보

  • 전역 enabledfalse경우 개별 엔터티 수준은 enabled 중요하지 않습니다.
  • 속성은 path 다음과 같은 /api/data하위 경로 값을 지원하지 않습니다.
  • request-body-strict .NET POCO 개체를 간소화하기 위해 도입되었습니다.
request-body-strict Behavior
true 요청 본문의 추가 필드로 인해 예외가 발생합니다 BadRequest .
false 요청 본문의 추가 필드는 무시됩니다.

Format

{
  "runtime": {
    "rest": {
      "enabled": <true> (default) | <false>,
      "path": <string> (default: /api),
      "request-body-strict": <true> (default) | <false>
    }
  }
}

예: request-body-strict

  • 값이 있는 default() 열은 페이로드의 해당 값이 있는 경우에만 INSERT 무시됩니다 null. 결과적으로 INSERTdefault()request-body-stricttrue 대한 작업은 명시적 null 값을 생성할 수 없습니다. 이 동작을 UPDATE 수행하려면 작업이 필요합니다.
  • 페이로드 값에 default() 관계없이 열이 무시되지 않습니다 UPDATE .
  • 계산 열은 항상 무시됩니다.
  • 자동 생성된 열은 항상 무시됩니다.

샘플 테이블

CREATE TABLE Users (
    Id INT PRIMARY KEY IDENTITY, -- auto-generated column
    Name NVARCHAR(50) NOT NULL,
    Age INT DEFAULT 18, -- column with default
    IsAdmin BIT DEFAULT 0, -- column with default
    IsMinor AS IIF(Age <= 18, 1, 0) -- computed column
);

요청 페이로드

{
  "Id": 999,
  "Name": "Alice",
  "Age": null,
  "IsAdmin": null,
  "IsMinor": false,
  "ExtraField": "ignored"
}

삽입 동작 request-body-strict = false

INSERT INTO Users (Name) VALUES ('Alice');
-- Default values for Age (18) and IsAdmin (0) are applied by the database.
-- IsMinor is ignored because it’s a computed column.
-- ExtraField is ignored.
-- The database generates the Id value.

응답 페이로드

{
  "Id": 1,          // Auto-generated by the database
  "Name": "Alice",
  "Age": 18,        // Default applied
  "IsAdmin": false, // Default applied
  "IsMinor": true   // Computed
}

업데이트 동작 request-body-strict = false

UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.

응답 페이로드

{
  "Id": 1,
  "Name": "Alice Updated",
  "Age": null,
  "IsAdmin": false,
  "IsMinor": false // Recomputed by the database (false when age is `null`)
}

CORS(호스트 런타임)

Parent Property Type Required Default
runtime.host cors object ❌ 아니요 -

전역 CORS 구성.

Tip

CORS는 "원본 간 리소스 공유"를 의미합니다. 웹 페이지가 서비스를 제공한 도메인과 다른 도메인에 대한 요청을 수행할 수 있는지 여부를 제어하는 브라우저 보안 기능입니다.

중첩 속성

Parent Property Type Required Default
runtime.host.cors allow-credentials boolean ❌ 아니요 False
runtime.host.cors origins 문자열 배열 ❌ 아니요 None

Note

이 속성은 allow-credentials CORS 헤더를 Access-Control-Allow-Credentials 설정합니다.

Format

{
  "runtime": {
    "host": {
      "cors": {
        "allow-credentials": <true> | <false> (default),
        "origins": ["<array-of-strings>"]
      }
    }
  }
}

Note

와일드카드 * 는 에 대한 origins값으로 유효합니다.

공급자(인증 호스트 런타임)

Parent Property Type Required Default
runtime.host.authentication provider enum(Unauthenticated | StaticWebApps | AppService | EntraId | Custom | Simulator) ❌ 아니요 Unauthenticated

인증 방법을 선택합니다. 각 공급자는 ID의 유효성을 다르게 검사합니다. 단계별 설정은 다음 표의 방법 가이드를 참조하세요.

Note

이 섹션에 설명된 Data API Builder 2.0 기능은 현재 미리 보기 상태이며 일반 공급 전에 변경될 수 있습니다. 자세한 내용은 버전 2.0의 새로운 기능입니다.

공급자 요약

Provider 사용 사례 ID 원본 방법 가이드
Unauthenticated DAB는 신뢰할 수 있는 프런트 엔드 뒤에 있음(기본값) 없음 - 모든 요청이 다음으로 실행됩니다. anonymous 인증되지 않은 공급자 구성
AppService Azure 호스팅 앱(EasyAuth) X-MS-CLIENT-PRINCIPAL 헤더 App Service 인증 구성
EntraID Microsoft Entra ID(Azure AD) JWT 전달자 토큰 Entra ID 인증 구성
Custom 타사 IDP(Okta, Auth0) JWT 전달자 토큰 사용자 지정 JWT 인증 구성
Simulator 로컬 테스트만 모의 시뮬레이터 인증 구성

Note

공급자는 EntraId 이전에 이름이 지정되었습니다 AzureAd. 이전 이름은 여전히 호환성을 위해 작동합니다.

인증되지 않음(기본값)

설정되거나 공급자가 지정되지 않은 경우 Unauthenticated DAB는 JWT를 검사하거나 유효성을 검사하지 않습니다. 모든 요청은 역할로 anonymous 실행됩니다. Azure API Management 또는 애플리케이션 게이트웨이와 같은 프런트 엔드 서비스는 요청이 DAB에 도달하기 전에 인증 또는 액세스 정책을 계속 처리할 수 있지만 DAB는 계속해서 권한을 anonymous부여합니다.

Important

Unauthenticated 활성 상태 authenticated 이고 엔터티 권한에 정의된 사용자 지정 역할은 활성화되지 않습니다. 구성에 해당 역할이 포함된 경우 DAB는 시작 시 경고를 내보낸다.

{
  "host": {
    "authentication": {
      "provider": "Unauthenticated"
    }
  }
}

AppService

Azure App Service EasyAuth에서 삽입한 ID 헤더를 신뢰합니다.

{
  "host": {
    "authentication": {
      "provider": "AppService"
    }
  }
}

EntraID

Microsoft Entra ID에서 발급한 JWT 토큰의 유효성을 검사합니다.

{
  "host": {
    "authentication": {
      "provider": "EntraId",
      "jwt": {
        "audience": "<application-id>",
        "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
      }
    }
  }
}

Custom

타사 ID 공급자에서 JWT 토큰의 유효성을 검사합니다.

{
  "host": {
    "authentication": {
      "provider": "Custom",
      "jwt": {
        "audience": "<api-audience>",
        "issuer": "https://<your-idp-domain>/"
      }
    }
  }
}

시뮬레이터

로컬 개발 및 테스트를 위한 인증을 시뮬레이션합니다.

{
  "host": {
    "authentication": {
      "provider": "Simulator"
    }
  }
}

Important

공급자는 Simulator 있는 경우에만 작동합니다runtime.host.modedevelopment. 시뮬레이터가 프로덕션 모드로 구성된 경우 DAB가 시작되지 않습니다.

역할 선택

시뮬레이터를 제외한 모든 공급자의 경우 헤더는 X-MS-API-ROLE 인증된 사용자의 클레임에서 사용할 역할을 선택합니다. 생략하면 요청은 시스템 역할을 사용합니다 Authenticated . 역할 평가에 대한 자세한 내용은 권한 부여 개요를 참조하세요.

JWT(인증 호스트 런타임)

Parent Property Type Required Default
runtime.host.authentication jwt object ❌ 아니요 -

전역 JWT(JSON 웹 토큰) 구성입니다.

데이터 API 작성기에서 JSON 웹 토큰 지원 다이어그램

중첩 속성

Parent Property Type Required Default
runtime.host.authentication.jwt audience string ✔️ 예* None
runtime.host.authentication.jwt issuer string ✔️ 예* None

* 둘 다 audience 개체 issuerjwt 있을 때 필요합니다. jwt 개체 자체는 공급자 EntraIDAzureADCustom또는 .

Format

{
  "runtime": {
    "host": {
      "authentication": {
        "jwt": {
          "audience": "<client-id>",
          "issuer": "<issuer-url>"
        }
      }
    }
  }
}

페이지 매김(런타임)

Parent Property Type Required Default
runtime pagination object ❌ 아니요 -

REST 및 GraphQL 엔드포인트에 대한 전역 페이지 매김 제한입니다.

중첩 속성

Parent Property Type Required Default
runtime.pagination max-page-size int ❌ 아니요 100,000
runtime.pagination default-page-size int ❌ 아니요 100
runtime.pagination next-link-relative boolean ❌ 아니요 false

지원되는 최대 페이지 크기 값

Value Result
integer 모든 양의 32비트 정수가 지원됩니다.
0 지원되지 않습니다.
-1 기본값은 지원되는 최대값입니다.
< -1 지원되지 않습니다.

기본 페이지 크기 지원 값

Value Result
integer 현재 max-page-size보다 작은 모든 양의 정수입니다.
0 지원되지 않습니다.
-1 기본값은 현재 max-page-size 설정입니다.
< -1 지원되지 않습니다.

페이지 next-link-relative 매김 true 값은 nextLink절대 URL 대신 상대 URL을 사용합니다.

Value Example
false(기본값) "nextLink": "https://localhost:5001/api/users?$after=..."
true "nextLink": "/api/users?$after=..."

Format

{
  "runtime": {
    "pagination": {
      "max-page-size": <integer; default: 100000>,
      "default-page-size": <integer; default: 100>,
      "next-link-relative": <boolean; default: false>
    }
  }
}

Note

값이 보다 max-page-size크면 결과는 .로 max-page-size제한됩니다.

예: REST에서 페이징

Request

GET https://localhost:5001/api/users

응답 페이로드

{
  "value": [
    {
      "Id": 1,
      "Name": "Alice",
      "Age": 30,
      "IsAdmin": true,
      "IsMinor": false
    },
    {
      "Id": 2,
      "Name": "Bob",
      "Age": 17,
      "IsAdmin": false,
      "IsMinor": true
    }
  ],
  "nextLink": "https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
}

요청 다음 페이지

GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==

예: GraphQL의 페이징

요청 페이로드(쿼리)

query {
  users {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

응답 페이로드

{
  "data": {
    "users": {
      "items": [
        {
          "Id": 1,
          "Name": "Alice",
          "Age": 30,
          "IsAdmin": true,
          "IsMinor": false
        },
        {
          "Id": 2,
          "Name": "Bob",
          "Age": 17,
          "IsAdmin": false,
          "IsMinor": true
        }
      ],
      "hasNextPage": true,
      "endCursor": "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
    }
  }
}

요청 다음 페이지

query {
  users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

예: 요청에서 액세스 max-page-size

max-page-size(REST) 또는 $limit (GraphQL)을 설정 first 하여 -1값을 사용합니다.

REST

GET https://localhost:5001/api/users?$limit=-1

GraphQL

query {
  users(first: -1) {
    items {
      ...
    }
  }
}

압축(런타임)

Note

이 섹션에 설명된 Data API Builder 2.0 기능은 현재 미리 보기 상태이며 일반 공급 전에 변경될 수 있습니다. 자세한 내용은 버전 2.0의 새로운 기능입니다.

Parent Property Type Required Default
runtime compression object ❌ 아니요 -

HTTP 응답 압축 구성. 사용하도록 설정하면 DAB는 응답 본문을 압축하여 페이로드 크기를 줄이고 전송 속도를 개선합니다.

중첩 속성

Parent Property Type Required Default
runtime.compression level string ❌ 아니요 "optimal"

에 대해 지원되는 값 level

Value Description 압축 절감 성능에 미치는 영향
optimal 잔액 비율 및 속도(기본값) Gzip: 90.5% / Brotli: 92.2% CPU 사용량 조정, 약간의 대기 시간 증가
fastest 비율보다 속도 우선 순위 지정 Gzip: 89.8% / Brotli: 91.1% 낮은 CPU 사용량, 최소 대기 시간
none 압축 없음 0%(기준: 12,673바이트) None

클라이언트 HTTP 헤더

압축은 클라이언트의 Accept-Encoding 헤더에 의해 호출됩니다. 지원되는 알고리즘은 Gzip 및 Brotli입니다. 이 설정은 level 클라이언트와 서버가 모두 여러 알고리즘을 지원하는 경우 압축 전략을 구성합니다.

지원되는 헤더

HTTP 헤더 사용되는 알고리즘
Accept-Encoding: gzip Gzip
Accept-Encoding: br Brotli

Format

{
  "runtime": {
    "compression": {
      "level": <"optimal"> (default) | <"fastest"> | <"none">
    }
  }
}

Example

{
  "runtime": {
    "compression": {
      "level": "optimal"
    }
  }
}

캐시(런타임)

Parent Property Type Required Default
runtime cache object ❌ 아니요 -

전역 캐시 구성.

중첩 속성

Parent Property Type Required Default
runtime.cache enabled boolean ❌ 아니요 False
runtime.cache ttl-seconds integer ❌ 아니요 5
runtime.cache level-2 object ❌ 아니요 -
Parent Property Type Required Default
runtime.cache.level-2 enabled boolean ❌ 아니요 False
runtime.cache.level-2 provider string ❌ 아니요 redis
runtime.cache.level-2 connection-string string ❌ 아니요 None
runtime.cache.level-2 partition string ❌ 아니요 None

Tip

엔터티 수준 cache.ttl-seconds 속성은 기본적으로 이 전역 값으로 설정됩니다.

Tip

엔드 투 엔드 설정, 캐시 수준 동작 및 Redis 예제는 수준 2 캐시 구현을 참조하세요.

Format

{
  "runtime": {
    "cache":  {
      "enabled": <boolean>,
      "ttl-seconds": <integer>,
      "level-2": {
        "enabled": <boolean>,
        "provider": "redis",
        "connection-string": <string>,
        "partition": <string>
      }
    }
  }
}

Important

전역 enabledfalse경우 개별 엔터티 수준은 enabled 중요하지 않습니다.

이 경우 level-2.enabled DAB는 true로컬 메모리 내 캐시 외에도 구성된 분산 캐시 공급자를 사용합니다. 캐시 수준으로 L1L2 구성된 엔터티는 데이터베이스로 가기 전에 먼저 로컬 캐시를 확인한 다음 분산 캐시를 확인합니다.

원격 분석(런타임)

Parent Property Type Required Default
runtime telemetry object ❌ 아니요 -

전역 원격 분석 구성.

중첩 속성

Parent Property Type Required Default
runtime.telemetry log-level dictionary ❌ 아니요 None
runtime.telemetry application-insights object ❌ 아니요 -
runtime.telemetry open-telemetry object ❌ 아니요 -
runtime.telemetry azure-log-analytics object ❌ 아니요 -
runtime.telemetry file object ❌ 아니요 -

네임스페이스당 로깅 세부 정보를 구성합니다. 이 구성은 표준 .NET 로깅 규칙을 따르고 세부적인 제어를 허용하지만 데이터 API 작성기 내부를 잘 알고 있다고 가정합니다. 데이터 API 작성기는 오픈 소스입니다. https://aka.ms/dab

Format

{
  "runtime": {
    "telemetry": {
      "log-level": {
        "namespace": "log-level",
        "namespace": "log-level"
      }
    }
  }
}

Tip

log-level 는 개발 및 프로덕션 모두에서 핫 다시 로드될 수 있습니다. 현재 프로덕션에서 핫 다시 로드를 지원하는 유일한 속성입니다.

Example

{
  "runtime": {
    "telemetry": {
      "log-level": {
        "Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
        "Azure.DataApiBuilder.Core": "information",
        "default": "warning"
      }
    }
  }
}

Application Insights(원격 분석)

Parent Property Type Required Default
runtime.telemetry application-insights object ❌ 아니요 -

Application Insights에 대한 로깅을 구성합니다.

중첩 속성

Parent Property Type Required Default
runtime.telemetry.application-insights enabled boolean ❌ 아니요 true
runtime.telemetry.application-insights connection-string string ✔️ 예 None

Format

{
  "runtime": {
    "telemetry": {
      "application-insights": {
        "enabled": <true; default: true> | <false>
        "connection-string": <string>
      }
    }
  }
}

OpenTelemetry(원격 분석)

Parent Property Type Required Default
runtime.telemetry open-telemetry object ❌ 아니요 -

원격 분석 열기로 로깅을 구성합니다.

중첩 속성

Parent Property Type Required Default
runtime.telemetry.open-telemetry enabled boolean ❌ 아니요 true
runtime.telemetry.open-telemetry endpoint string ✔️ 예 None
runtime.telemetry.open-telemetry headers string ❌ 아니요 None
runtime.telemetry.open-telemetry service-name string ❌ 아니요 "dab"
runtime.telemetry.open-telemetry exporter-protocol enum(grpc | httpprotobuf) ❌ 아니요 grpc

여러 헤더가 , (쉼표)로 구분됩니다.

Format

{
  "runtime": {
    "telemetry": {
      "open-telemetry": {
        "enabled": <true> (default) | <false>,
        "endpoint": <string>,
        "headers": <string>,
        "service-name": <string> (default: "dab"),
        "exporter-protocol": <"grpc" (default) | "httpprotobuf">
      }
    }
  }
}

Example

{
  "runtime": {
    "telemetry": {
      "open-telemetry": {
        "enabled": true,
        // a gRPC endpoint example
        "endpoint": "http://localhost:4317",
        // an HTTP/protobuf endpoint example
        "endpoint": "http://localhost:4318/v1/metrics",
        "headers": "api-key=key,other-config-value=value",
        "service-name": "dab",
      }
    }
  }
}

OTEL_EXPORTER_OTLP_HEADERS 대해 자세히 알아보세요.

Note

gRPC(4317)는 더 빠르고 스트리밍을 지원하지만 더 많은 설정 단계가 필요합니다. HTTP/protobuf(4318)는 더 간단하고 디버그하기 쉽지만 효율성은 떨어집니다.

Azure Log Analytics(원격 분석)

Parent Property Type Required Default
runtime.telemetry azure-log-analytics object ❌ 아니요 -

데이터 수집 엔드포인트를 통해 Azure Log Analytics에 대한 로깅을 구성합니다. 사용하도록 설정하면 DAB는 구성 가능한 간격으로 원격 분석 데이터를 일괄 처리로 보냅니다.

Note

이 섹션에 설명된 Data API Builder 2.0 기능은 현재 미리 보기 상태이며 일반 공급 전에 변경될 수 있습니다. 자세한 내용은 버전 2.0의 새로운 기능입니다.

중첩 속성

Parent Property Type Required Default
runtime.telemetry.azure-log-analytics enabled boolean ❌ 아니요 false
runtime.telemetry.azure-log-analytics dab-identifier string ❌ 아니요 "DabLogs"
runtime.telemetry.azure-log-analytics flush-interval-seconds integer ❌ 아니요 5
runtime.telemetry.azure-log-analytics auth object ✔️ 예* -

* auth 은 필요한 경우 enabled 입니다 true.

Parent Property Type Required Default
runtime.telemetry.azure-log-analytics.auth custom-table-name string ✔️ 예* null
runtime.telemetry.azure-log-analytics.auth dcr-immutable-id string ✔️ 예* null
runtime.telemetry.azure-log-analytics.auth dce-endpoint string ✔️ 예* null

* 필요한 경우 enabled .true

  • dab-identifier- 데이터 API 작성기에서 제공되는 로그를 구분하기 위해 Log Analytics에 전달된 레이블입니다.
  • flush-interval-seconds- 원격 분석 데이터의 일괄 처리 전송 사이의 시간 간격(초)입니다.
  • custom-table-name- 데이터가 저장되는 Azure Log Analytics의 사용자 지정 테이블 이름입니다.
  • dcr-immutable-id- 데이터 수집 방법을 정의하는 데이터 수집 규칙의 변경할 수 없는 ID입니다.
  • dce-endpoint- 원격 분석 데이터를 보내는 데 사용되는 데이터 수집 엔드포인트 URL입니다.

Format

{
  "runtime": {
    "telemetry": {
      "azure-log-analytics": {
        "enabled": <true> | <false> (default),
        "dab-identifier": <string> (default: "DabLogs"),
        "flush-interval-seconds": <integer> (default: 5),
        "auth": {
          "custom-table-name": "<string>",
          "dcr-immutable-id": "<string>",
          "dce-endpoint": "<string>"
        }
      }
    }
  }
}

Example

{
  "runtime": {
    "telemetry": {
      "azure-log-analytics": {
        "enabled": true,
        "dab-identifier": "MyDabInstance",
        "flush-interval-seconds": 10,
        "auth": {
          "custom-table-name": "DabTelemetry_CL",
          "dcr-immutable-id": "dcr-abc123def456",
          "dce-endpoint": "https://my-dce.eastus-1.ingest.monitor.azure.com"
        }
      }
    }
  }
}

파일(원격 분석)

Parent Property Type Required Default
runtime.telemetry file object ❌ 아니요 -

로컬 파일에 원격 분석 로그 작성을 구성합니다. 사용하도록 설정하면 DAB는 구성 가능한 롤링 간격 및 크기 제한을 사용하여 지정된 파일 경로에 구조적 로그 출력을 씁니다.

Note

이 섹션에 설명된 Data API Builder 2.0 기능은 현재 미리 보기 상태이며 일반 공급 전에 변경될 수 있습니다. 자세한 내용은 버전 2.0의 새로운 기능입니다.

중첩 속성

Parent Property Type Required Default
runtime.telemetry.file enabled boolean ❌ 아니요 false
runtime.telemetry.file path string ✔️ 예* "/logs/dab-log.txt"
runtime.telemetry.file rolling-interval enum ❌ 아니요 "Day"
runtime.telemetry.file retained-file-count-limit integer ❌ 아니요 1
runtime.telemetry.file file-size-limit-bytes integer ❌ 아니요 1048576

* path 은 필요한 경우 enabled 입니다 true.

롤링 간격 값

Value Description
Minute 1분마다 새 로그 파일
Hour 매시간 새 로그 파일
Day 매일 새 로그 파일(기본값)
Month 매월 새 로그 파일
Year 매년 새 로그 파일
Infinite 새 파일로 롤하지 마세요.

Format

{
  "runtime": {
    "telemetry": {
      "file": {
        "enabled": <true> | <false> (default),
        "path": <string> (default: "/logs/dab-log.txt"),
        "rolling-interval": <"Day"> (default) | <"Minute"> | <"Hour"> | <"Month"> | <"Year"> | <"Infinite">,
        "retained-file-count-limit": <integer> (default: 1),
        "file-size-limit-bytes": <integer> (default: 1048576)
      }
    }
  }
}

Example

{
  "runtime": {
    "telemetry": {
      "file": {
        "enabled": true,
        "path": "/var/log/dab/dab-telemetry.txt",
        "rolling-interval": "Hour",
        "retained-file-count-limit": 24,
        "file-size-limit-bytes": 5242880
      }
    }
  }
}

MCP(런타임)

Parent Property Type Required Default
runtime mcp object ❌ 아니요 -

데이터베이스 엔터티를 AI 에이전트용 MCP 도구로 노출하는 MCP(SQL 모델 컨텍스트 프로토콜) 서버를 구성합니다.

Note

이 섹션에 설명된 Data API Builder 2.0 기능은 현재 미리 보기 상태이며 일반 공급 전에 변경될 수 있습니다. 자세한 내용은 버전 2.0의 새로운 기능입니다.

중첩 속성

Parent Property Type Required Default
runtime.mcp enabled boolean ❌ 아니요 true
runtime.mcp path string ❌ 아니요 "/mcp"
runtime.mcp description string ❌ 아니요 null
runtime.mcp dml-tools 부울 또는 개체 ❌ 아니요 true

이 속성은 dml-tools 모든 도구를 사용하거나 사용하지 않도록 설정하는 부울 또는 개별 도구를 제어하는 개체를 허용합니다.

Parent Property Type Required Default
runtime.mcp.dml-tools describe-entities boolean ❌ 아니요 true
runtime.mcp.dml-tools create-record boolean ❌ 아니요 true
runtime.mcp.dml-tools read-records boolean ❌ 아니요 true
runtime.mcp.dml-tools update-record boolean ❌ 아니요 true
runtime.mcp.dml-tools delete-record boolean ❌ 아니요 true
runtime.mcp.dml-tools execute-entity boolean ❌ 아니요 true
runtime.mcp.dml-tools aggregate-records 부울 또는 개체 ❌ 아니요 true

도구는 aggregate-records 추가 설정이 있는 부울 또는 개체를 허용합니다.

Parent Property Type Required Default 범위
runtime.mcp.dml-tools.aggregate-records enabled boolean ❌ 아니요 true
runtime.mcp.dml-tools.aggregate-records query-timeout integer ❌ 아니요 30 1~600초

Format

{
  "runtime": {
    "mcp": {
      "enabled": <true> (default) | <false>,
      "path": <string> (default: "/mcp"),
      "description": <string>,
      "dml-tools": {
        "describe-entities": <true> | <false>,
        "create-record": <true> | <false>,
        "read-records": <true> | <false>,
        "update-record": <true> | <false>,
        "delete-record": <true> | <false>,
        "execute-entity": <true> | <false>,
        "aggregate-records": {
          "enabled": <true> | <false>,
          "query-timeout": <integer; default: 30>
        }
      }
    }
  }
}

Example

{
  "runtime": {
    "mcp": {
      "enabled": true,
      "dml-tools": {
        "describe-entities": true,
        "create-record": true,
        "read-records": true,
        "update-record": true,
        "delete-record": true,
        "execute-entity": true,
        "aggregate-records": {
          "enabled": true,
          "query-timeout": 30
        }
      }
    }
  }
}

모든 DML 도구를 한 번에 "dml-tools"truefalse사용하거나 사용하지 않도록 설정하려면

런타임 수준에서 도구를 사용하지 않도록 설정하면 도구가 MCP tools/list 응답에 표시되지 않으며 엔터티 수준 권한에 관계없이 호출할 수 없습니다. 개별 DML 도구에 대한 자세한 내용은 DML(데이터 조작 언어) 도구를 참조하세요.

CLI 사용

dab configure --runtime.mcp.enabled true
dab configure --runtime.mcp.path "/mcp"
dab configure --runtime.mcp.dml-tools.describe-entities true
dab configure --runtime.mcp.dml-tools.create-record true
dab configure --runtime.mcp.dml-tools.read-records true
dab configure --runtime.mcp.dml-tools.update-record true
dab configure --runtime.mcp.dml-tools.delete-record true
dab configure --runtime.mcp.dml-tools.execute-entity true
dab configure --runtime.mcp.dml-tools.aggregate-records.enabled true

상태(런타임)

Parent Property Type Required Default
runtime health object ❌ 아니요 -

전역 상태 검사 엔드포인트 (/health) 구성입니다.

중첩 속성

Parent Property Type Required Default 범위/메모
runtime.health enabled boolean ❌ 아니요 true
runtime.health roles 문자열 배열 ✔️ 예* null *프로덕션 모드에서 필요
runtime.health cache-ttl-seconds integer ❌ 아니요 5 최소: 0
runtime.health max-query-parallelism integer ❌ 아니요 4 최소: 1, 최대: 8(고정)

개발 및 프로덕션의 동작

Condition 개발 동작 프로덕션 동작
health.enabled = 거짓 403 상태 403 상태
health.enabled = 참입니다 역할에 따라 다름 역할에 따라 다름
roles 생략 또는 null 상태 표시됨 403 상태
현재 역할이 없음 roles 403 상태 403 상태
의 현재 역할 roles 상태 표시됨 상태 표시됨
roles 포함 anonymous 상태 표시됨 상태 표시됨

Format

{
  "health": {
    "enabled": <true> (default) | <false>,
    "roles": [ <string> ], // required in production
    "cache-ttl-seconds": <integer; default: 5>,
    "max-query-parallelism": <integer; default: 4>
  }
}

Note

전역 enabledfalse경우 개별 엔터티 수준은 enabled 중요하지 않습니다.

Example

{
  "health": {
    "enabled": true,
    "roles": ["admin", "support"],
    "cache-ttl-seconds": 10,
    "max-query-parallelism": 6
  }
}