런타임 동작을 결정하는 구성 설정입니다.
페이지 매김 설정
| 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) |
텔레메트리 설정
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 |
속성 정보
- 전역
enabled인false경우 개별 엔터티 수준은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. 결과적으로INSERT열default()request-body-strict에true대한 작업은 명시적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 웹 토큰) 구성입니다.
중첩 속성
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
string | ✔️ 예* | None |
runtime.host.authentication.jwt |
issuer |
string | ✔️ 예* | None |
* 둘 다 audience 개체 issuer 가 jwt 있을 때 필요합니다.
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
전역 enabled 인 false경우 개별 엔터티 수준은 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
전역 enabled 인 false경우 개별 엔터티 수준은 enabled 중요하지 않습니다.
Example
{
"health": {
"enabled": true,
"roles": ["admin", "support"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 6
}
}