Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

함수 기반 액션의 배치 실행

Workshop 인라인 편집이나 Automate에서 여러 액션(Action)을 한 묶음으로 호출하면 기본적으로 기반 함수를 요청마다 순서대로 호출하고 마지막에 편집 전체를 원자적으로 적용합니다.

배치 전체를 함수 한 번에 전달하면 중복 조회와 실행 비용을 줄이거나 묶음 안의 편집 충돌을 업무 로직에서 처리할 수 있습니다.

입력 계약

배치 실행을 켜려면 함수의 입력이 하나여야 하며 그 입력이 구조체(Struct) 목록이어야 합니다. 각 구조체 필드는 원래 함수의 최상위 입력처럼 액션 매개변수(Parameter)와 연결합니다.

호출함수 입력
단일 액션 호출구조체 항목 하나를 가진 목록으로 함수 한 번 실행
배치 액션 호출여러 구조체 항목을 가진 목록으로 함수 한 번 실행

단일 요청과 배치 요청의 같은 편집

다음은 가상의 Flight와 Airport 계약을 사용한 TypeScript v1 예입니다. Airport의 문자열 기본 키 API 이름은 airportCode이고 Flight.arrivalAirportCode는 그 공항 코드를 가리키는 문자열 외래 키(Foreign key) 속성입니다. 두 유형을 저장소에 가져오고 실제 생성된 이름이 다르면 맞춥니다.

functions-typescript/src/index.ts에 두 함수를 함께 정의할 수 있으며 액션은 사용할 함수 하나를 선택합니다.

import { Edits, OntologyEditFunction, UserFacingError } from "@foundry/functions-api";
import { Flight, Airport } from "@foundry/ontology-api";

export class FlightActionFunctions {
    @Edits(Flight)
    @OntologyEditFunction()
    public updateDestination(flight: Flight, destination: Airport): void {
        const code = destination.airportCode;
        if (code === undefined) {
            throw new UserFacingError("목적지 Airport의 airportCode가 필요합니다.");
        }
        flight.arrivalAirportCode = code;
    }

    @Edits(Flight)
    @OntologyEditFunction()
    public updateDestinationBatch(batch: { flight: Flight; destination: Airport }[]): void {
        for (const { flight, destination } of batch) {
            const code = destination.airportCode;
            if (code === undefined) {
                throw new UserFacingError("목적지 Airport의 airportCode가 필요합니다.");
            }
            flight.arrivalAirportCode = code;
        }
    }
}

배치 함수는 전달받은 목록을 순서대로 처리합니다. 같은 Flight의 같은 속성을 여러 번 지정하면 뒤의 대입이 앞의 값을 바꾸는 구현입니다. 함수가 실패하면 온톨로지 편집 목록 전체가 성공한 액션으로 적용되지 않습니다. 목록 전체를 받는다고 모든 업무 충돌을 자동으로 해결하는 것은 아닙니다.

액션 구성

배치 형태의 함수를 게시한 뒤 액션의 Function 규칙에서 선택하고 Batched execution을 켭니다. 구조체의 flight와 destination 필드를 액션 입력에 연결합니다.

배치 실행을 쓰지 않는 함수 기반 액션은 한 배치의 호출 수가 최대 20입니다. 배치 실행 경로에서는 일반 배치 호출 한도인 10,000까지 사용할 수 있지만 편집 객체 수와 유형 수 및 함수 실행 자원 한도는 여전히 적용됩니다. 호출 앱의 추가 한도도 확인합니다.

원자적 편집과 일시 오류 재시도는 액션 실행 보장을 따릅니다. 실제 목적지 변경은 제출 권한과 액션 조건을 갖춘 운영 호출에서만 수행합니다.