관계형 데이터베이스와 달리 MongoDB는 전통적인 의미의 저장 프로시저를 지원하지 않지만, system.js 컬렉션에 JavaScript 함수를 저장하는 방식으로 유사한 기능을 구현할 수 있습니다. 이렇게 저장된 함수는 서버 측에서 실행되어 재사용 가능한 비즈니스 로직을 캡슐화하는 데 활용됩니다.
MongoDB 저장 프로시저 생성 문법
MongoDB에서 저장 프로시저를 만들려면 db.system.js.save() 메서드를 사용합니다. 기본 문법은 다음과 같습니다.
db.system.js.save
(
{
_id: "저장프로시저이름",
value: function(인자1, ....N)
{
실행문1,
.
.
N
}
}
);여기서 _id는 저장 프로시저의 고유 이름 역할을 하며, value 필드에는 실제로 실행될 JavaScript 함수를 정의합니다.
저장 프로시저 생성 예제
위 문법을 실제로 적용해 보겠습니다. 두 개의 값을 더하는 간단한 함수를 저장 프로시저로 등록하는 쿼리는 다음과 같습니다.
> db.system.js.save
(
{
_id: "addTwoValue",
value: function(a, b)
{
return a + b
}
}
);쿼리가 성공적으로 실행되면 다음과 같은 결과가 출력됩니다.
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "addTwoValue" })출력 결과에서 nUpserted : 1은 새로운 함수가 system.js 컬렉션에 성공적으로 저장되었음을 의미합니다.
저장 프로시저 호출하기
생성된 저장 프로시저는 db.eval() 메서드를 사용하여 호출할 수 있습니다. 호출 쿼리는 다음과 같습니다.
> db.eval("return addTwoValue(100,25)");
125실행 결과로 두 인자 100과 25가 더해진 값인 125가 반환되는 것을 확인할 수 있습니다.
참고 사항
db.eval()은 MongoDB 3.0부터 deprecated(사용 중단 권고)되었으며, MongoDB 4.2 버전부터는 완전히 제거되었습니다. 최신 버전의 MongoDB에서는 보안상의 이유로 서버 측 JavaScript 실행이 기본적으로 비활성화되어 있으므로, 애플리케이션 로직 내에서 함수를 처리하거나 Aggregation Pipeline을 활용하는 방식을 권장합니다.