저장 프로시저 만들기
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 콜백 함수에 따라 달라집니다. 콜백 함수에는 작업이 실패할 경우의 오류 개체 및 반환 값(이 경우에는 생성된 개체)에 각각 사용되는 두 개의 매개 변수가 있습니다. 콜백 내에서 예외를 처리하거나 오류를 throw할 수 있습니다. 콜백이 제공되지 않았고 오류가 있는 경우, Azure Cosmos DB 런타임에서 오류를 throw합니다.
또한 저장 프로시저에는 설명을 부울 값으로 설정하는 매개 변수가 포함됩니다. 매개 변수가 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 함수는 연속 기반 모델을 구현하여 실행을 일괄 처리하거나 다시 시작할 수 있습니다. 연속 값은 원하는 모든 값일 수 있으며 애플리케이션은 이 값을 사용하여 새 시작 지점에서 트랜잭션을 다시 시작할 수 있습니다. 다음 다이어그램에서는 트랜잭션 연속 모델을 사용하여 함수가 전체 처리 작업을 완료할 때까지 서버 쪽 함수를 반복하는 방법을 보여줍니다.