SQL++/N1QL 쿼리

N1QL에서 자바스크립트까지 - 1부: 소개

Couchbase Server 7.0에 도입된 여러 가지 훌륭한 기능 중에서이후 릴리스에서 더 큰 영향을 미칠 가능성이 있습니다: N1QL 사용자 정의 함수입니다.

과거를 한눈에 살펴보기

N1QL은 선언적 언어로, 요청은 단순히 다음을 나타내는 것입니다. 무엇 를 지정할 필요 없이 사용자가 필요로하는 어떻게 요청을 수행해야 합니다.

이는 맞춤형 비즈니스 로직이 부족하다는 한계가 있긴 하지만 쿼리 언어에 매우 효과적이었습니다.

사용자 정의 함수는 이러한 격차를 해소합니다.

카우치베이스 서버 7.0의 UDF에 대한 전체 보기는 다음에서 확인할 수 있습니다. 이 블로그에 대한 자세한 내용은 다음에서 확인할 수 있지만, 앞뒤로 넘어가는 것을 방지하기 위해 몇 가지 중요한 사항을 간단히 알려드리겠습니다:

    • UDF는 여러 언어로 제공됩니다. 이 블로그에서는 특히 JavaScript에 관심이 있습니다.
    • UDF는 두 가지 맛으로 제공되며, 클러스터 와이드(또는 글로벌 UDF), 아직 컬렉션을 수용하지 않은 경우에 유용하며, 범위 바운드(또는 범위 UDF)를 사용하면 스코프당 하나씩, 잠재적으로 다른 로직을 가진 동일한 UDF의 복사본을 여러 개 가질 수 있습니다.
    • N1QL은 UDF 오버로딩(동일한 이름과 다른 서명을 가진 여러 개의 UDF가 각각 입력에 특정한 로직을 지원하는 것)을 제공하지 않지만, 가변 UDF를 사용하면 동일한 기능을 구현할 수 있습니다.
    • N1QL UDF는 N1QL 쿼리의 소스로 사용할 수 있는 동적 데이터를 생성할 수 있습니다.

자바스크립트 UDF

    • 자바스크립트는 외부 언어를 사용하므로 JavaScript 라이브러리의 관리 및 실행이 N1QL 서비스와는 다른 엔티티에 위임됩니다. 이 엔티티는 jsevaluator.
    • 자바스크립트 함수를 만드는 과정은 두 단계로 진행됩니다. 먼저 jsevaluator 인터페이스를 생성한 다음 이를 참조하여 N1QL UDF를 생성합니다.
    • 외부에서 코드를 유지 관리할 때의 부수적인 이점 중 하나는 여러 UDF가 동일한 라이브러리와 동일한 코드를 공유할 수 있고 코드가 변경되면 모두 동시에 업데이트된다는 점입니다. 공유 라이브러리는 범위 스키마와 달리 애플리케이션과 보조를 맞출 수 있습니다.
    • 7.0 릴리스에서는 jsevaluator 는 일반 자바스크립트만 지원합니다.

누락된 부분

앞서 살펴본 것처럼 동일한 라이브러리를 쿼리 서비스 전체에서 여러 요청이 동시에 사용할 수 있으므로 전역 변수에 값을 저장하고 검색하면 예기치 않은 결과가 발생할 수 있습니다.

이로 인한 부작용은 함수 참조가 전역 변수에 저장되므로 전역 화살표 함수가 지원되지 않는다는 것입니다.

로컬 화살표 함수(전역 함수 본문 안에 선언된 함수)는 예상대로 작동합니다.

실제 사례

먼저 JavaScript 라이브러리와 함수를 생성합니다:

그런 다음 N1QL UDF를 생성합니다:

UDF를 먼저 생성하고 라이브러리를 나중에 생성하는 것은 완벽하게 합법적이지만, 라이브러리를 생성하기 전까지는 UDF를 실행할 수 없습니다!

7.1의 새로운 기능!

사용자 인터페이스

더 이상 자바스크립트 라이브러리를 조작하기 위해 이상한 REST 엔드포인트와 curl 명령에 신경 쓸 필요가 없습니다. 쿼리 페이지에 새 탭이 생깁니다, UDF:

New UDF page in Couchbase UI

클릭하면 JavaScript 라이브러리 및 N1QL UDF 정의 목록이 표시됩니다:

Manage UDFs and JavaScript functions in UI

JavaScript 라이브러리와 N1QL 사용자 정의 함수를 모두 추가하고 편집할 수 있는 버튼이 있습니다.

주의할 점은 개별 함수가 아닌 라이브러리를 편집하거나 추가하는 것이므로 JavaScript 라이브러리에 새 함수를 추가하려면 라이브러리 전체를 편집한 후 기존 함수와 새 함수를 모두 포함하여 다시 제출해야 합니다(새 함수만 제출하면 기존 함수가 삭제되므로 주의해야 합니다!).

UDF 자바스크립트 라이브러리 UI를 이벤트 UI와 같은 위치(예: 디버거)로 옮길 계획이 있지만, 아직 그 단계에 이르지 못했으며 결과적으로 UI의 형태와 위치가 변경될 가능성이 높다는 점에 유의하세요.

Add JavaScript library using UI

자바스크립트의 N1QL

7.0.x와 함께 제공되는 JavaScript 엔진은 바닐라 JavaScript만 실행할 수 있으며 N1QL 요청을 실행할 수 있는 기능이 없습니다.

7.1.x에서 JavaScript 엔진은 이제 여러 개의 N1QL 문을 실행할 수 있으며 반복자와 트랜잭션을 모두 지원합니다.

계층적 자바스크립트 라이브러리 저장소

7.0에서 JavaScript 라이브러리 스토어는 플랫 리포지토리로, 모든 라이브러리가 동일한 레벨에 위치하며 전역 및 범위 N1QL UDF 모두에서 볼 수 있습니다.

이러한 라이브러리는 공유됩니다.

7.1에서는 스토리지가 계층 구조로 확장되었습니다.

루트 레벨 라이브러리는 여전히 글로벌 및 스코프 N1QL UDF 모두에서 액세스할 수 있고 이전처럼 공유할 수 있으며, 특정 버킷 및 스코프에 특정 루트 레벨 라이브러리를 별도로 구현하거나 특정 스코프에만 액세스할 수 있는 사용자를 위한 비공개 라이브러리 스토리지로 라이브러리를 정의할 수도 있습니다.

 

결론

이 블로그에서는 카우치베이스 서버 7.1의 JavaScript 사용자 정의 함수 기능을 미리 살펴볼 수 있습니다.

다음 블로그에서 각각에 대해 자세히 살펴보겠습니다.

 

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 마르코 그레코, 소프트웨어 아키텍트, 카우치베이스

전생에 마르코는 이탈리아 최대 방사선 치료 기관에서 CTO, 방사선 물리학자, 소프트웨어 설계자, 시스템 관리자, DBA, 트레이너, 일반 관리자로 일했습니다. 직업과 국가를 바꾼 그는 처음에는 Informix에서, 나중에는 IBM에서 20년 이상 다양한 지원 및 개발 직책을 맡다가 마침내 과감히 Couchbase에 합류하여 N1QL에서 금을 만드는 데 도움을 주었습니다. 그는 여러 개의 특허를 보유하고 있으며 직접 오픈 소스 프로젝트를 저술하기도 했습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.