저장 프로시저 만들기
Azure Cosmos DB는 저장 프로시저, 트리거및 UDF(사용자 정의 함수) 작성할 수 있는 JavaScript의 언어 통합 트랜잭션 실행을 제공합니다. 저장 프로시저, 트리거 또는 사용자 정의 함수를 호출하려면 이를 등록해야 합니다. 자세한 내용은 Azure Cosmos DB저장 프로시저, 트리거, 사용자 정의 함수를 사용하는 방법을 참조하세요.
메모
이 단원에서는 저장 프로시저에 중점을 두고 다음 단원에서는 트리거 및 사용자 정의 함수를 다룹니다.
저장 프로시저 작성
저장 프로시저는 Azure Cosmos 컨테이너 내에서 항목을 만들고, 업데이트하고, 읽고, 쿼리하고, 삭제할 수 있습니다. 저장 프로시저는 컬렉션별로 등록되며 해당 컬렉션에 있는 모든 문서 또는 첨부 파일에서 작동할 수 있습니다.
다음은 "Hello World" 응답을 반환하는 간단한 저장 프로시저입니다.
var helloWorldStoredProc = {
id: "helloWorld",
serverScript: function () {
var context = getContext();
var response = context.getResponse();
response.setBody("Hello, World");
}
}
컨텍스트 개체는 Azure Cosmos DB에서 수행할 수 있는 모든 작업에 대한 액세스 및 요청 및 응답 개체에 대한 액세스를 제공합니다. 이 경우 응답 개체를 사용하여 클라이언트로 다시 보낼 응답 본문을 설정합니다.
저장 프로시저를 사용하여 항목 만들기
저장 프로시저를 사용하여 항목을 만들면 항목이 Azure Cosmos DB 컨테이너에 삽입되고 새로 만든 항목의 ID가 반환됩니다. 항목 만들기는 비동기 작업이며 JavaScript 콜백 함수에 따라 달라집니다. 콜백 함수에는 두 개의 매개 변수가 있습니다. 하나는 작업이 실패할 경우 오류 개체에 대한 매개 변수이고, 다른 하나는 반환 값(이 경우 만든 개체)에 대한 매개 변수입니다. 콜백 내에서 예외를 처리하거나 오류를 던질 수 있습니다. 콜백이 제공되지 않고 오류가 발생하면 Azure Cosmos DB 런타임에서 오류가 발생합니다.
저장 프로시저에는 설명을 부울 값으로 설정하는 매개 변수도 포함됩니다. 매개 변수가 true로 설정되고 설명이 누락되면 저장 프로시저가 예외를 throw합니다. 그렇지 않으면 저장 프로시저의 나머지 부분을 계속 실행합니다.
이 저장 프로시저는 현재 컬렉션에서 만들 문서의 본문인 입력 documentToCreate
사용합니다. 이러한 모든 작업은 비동기이며 JavaScript 함수 콜백에 따라 달라집니다.
var createDocumentStoredProc = {
id: "createMyDocument",
body: function createMyDocument(documentToCreate) {
var context = getContext();
var collection = context.getCollection();
var accepted = collection.createDocument(collection.getSelfLink(),
documentToCreate,
function (err, documentCreated) {
if (err) throw new Error('Error' + err.message);
context.getResponse().setBody(documentCreated.id)
});
if (!accepted) return;
}
}
배열을 입력 매개변수로 사용하는 저장 프로시저
Azure Portal에서 저장 프로시저를 정의할 때 입력 매개 변수는 항상 저장 프로시저에 문자열로 전송됩니다. 문자열 배열을 입력으로 전달하더라도 배열은 문자열로 변환되어 저장 프로시저로 전송됩니다. 이 작업을 수행하려면 저장 프로시저 내에서 문자열을 배열로 구문 분석하는 함수를 정의할 수 있습니다. 다음 코드에서는 문자열 입력 매개 변수를 배열로 구문 분석하는 방법을 보여 줍니다.
function sample(arr) {
if (typeof arr === "string") arr = JSON.parse(arr);
arr.forEach(function(a) {
// do something here
console.log(a);
});
}
제한된 실행
모든 Azure Cosmos DB 작업은 제한된 시간 내에 완료되어야 합니다. 저장 프로시저는 서버에서 실행할 시간이 제한됩니다. 모든 컬렉션 함수는 해당 작업이 완료되었는지 여부를 나타내는 부울 값을 반환합니다.
저장 프로시저 내의 트랜잭션
저장 프로시저를 사용하여 컨테이너 내의 항목에 트랜잭션을 구현할 수 있습니다. JavaScript 함수는 연속 기반 모델을 구현하여 실행을 일괄 처리하거나 다시 시작할 수 있습니다. 연속 값은 원하는 값일 수 있으며 애플리케이션은 이 값을 사용하여 새 시작점에서 트랜잭션을 다시 시작할 수 있습니다. 다음 다이어그램에서는 함수가 전체 처리 워크로드를 완료할 때까지 트랜잭션 연속 모델을 사용하여 서버 쪽 함수를 반복하는 방법을 보여 줍니다.