.NET

카우치베이스 .NET SDK 2.0.2가 오늘 출시되었습니다!

오늘 또 다른 버그 수정 및 유지 관리 릴리스가 Couchbase .NET SDK에 릴리스됩니다: 2.0.2. 이 릴리스는 2.0 및 2.0.1의 후속 릴리스이며, 특히 마스터 브랜치에 병합된 N1QL DP4에 대한 지원을 제공합니다.

이번 릴리스에는 무엇이 포함되나요?

이달 초, N1QL DP4를 지원하는 SDK의 개발자 프리뷰를 출시했습니다. N1QL DP4는 완전히 새로운 REST API를 제공하며 준비된 문, 이름 및 위치 매개변수, 시간 초과와 같은 새로운 기능을 지원합니다. 이번 릴리스에서는 SDK에서 N1QL로 작업하기 위한 인터페이스와 프로그래밍 모델을 안정화했습니다. 또한 Common.Logging 2.0에서 3.0으로 업데이트하여 더 이상 사용되지 않는 NuGet 패키지에 대한 종속성을 없애고, 구성 가능한 연결 시간 초과에 대한 지원을 추가했으며, ClusterHelper 및 IBucket 인터페이스가 개선되었습니다.

N1QL DP4 지원

이제 SDK는 명명 및 위치 매개변수, 문 및 준비된 문, 시간 초과, 오류, 메트릭, 읽기 전용, 서명 및 클라이언트 컨텍스트 ID 등 다음과 같은 N1QL REST API 기능을 지원합니다.

명명된 매개변수 및 위치 매개변수

이제 문을 작성하면서 매개변수를 함께 전달하려는 경우(예: WHERE 절의 일부로) 명명된 매개변수와 선택적 매개변수 중 한 가지 방법을 사용할 수 있습니다. 명명된 매개변수는 달러 기호 "$"가 앞에 붙은 변수 형태를 취합니다. 쿼리를 작성하고 실행하면 서버로 전송되어 변수에 입력한 값으로 대체됩니다. 다음은 SDK로 이 작업을 수행하는 예제입니다:

명명된 매개변수와 달리 위치 매개변수는 값을 문에서 서수 변수와 연결합니다. 매개변수를 추가하는 순서에 따라 쿼리가 실행될 때 서버가 변수/값을 대체하는 순서가 정의됩니다. 예를 들어

이 쿼리는 첫 번째 쿼리와 완전히 동일한 쿼리이며, 위치 매개변수가 아닌 명명된 매개변수를 사용했을 뿐이라는 점에 유의하세요.

진술서 및 준비된 진술서

SDK는 N1QL을 언어 자체와 N1QL 쿼리 실행을 위한 API라는 두 가지로 구분합니다. N1QL "쿼리"는 문이라고 하며 실행을 위해 서버로 전송되고 클라이언트로 다시 반환되어 동적 유형 또는 POCO로 매핑되는 N1QL 코드의 문자열입니다. 다음은 RequestQuery 개체를 사용하여 N1QL 문을 실행하는 예제입니다:

서버가 N1QL 문을 받으면 해당 문에 대한 쿼리 계획을 컴파일합니다. 이 작업에는 시간과 리소스가 필요하므로 이 단계의 결과를 캐시하여 반복해서 재사용할 수 있다면 더 좋을 것입니다. 이것이 바로 준비된 문의 용도입니다. SDK에서 준비된 문을 사용하려면 QueryRequest 객체에서 준비된 속성을 설정하기만 하면 됩니다:

클라이언트는 문을 실행하고 준비된 문을 가져온 다음 후속 호출에서 캐시된 준비된 문을 재사용합니다. 타이머를 사용하여 위의 코드를 실행하면 첫 번째 호출이 후속 호출보다 상당히 오래 걸리는 것을 알 수 있는데, 이는 준비된 문을 생성하고 캐싱하는 효과입니다.

오류

새로운 API에는 QueryResult 객체에 매핑되는 새로운 "오류" API도 있습니다. 요청을 처리하는 동안 오류가 발생하면 N1QL 엔진은 오류를 반환합니다. 하위 문서 를 호출한 다음 SDK에서 편리하게 "Error"라는 클래스에 매핑합니다:

필드는 다음과 같이 정의됩니다:

필드 의미 선택 사항
코드 오류 또는 경고에 대한 고유 번호입니다. False
메시지 오류 또는 경고에 대한 자세한 설명입니다. False
이름 코드와 1:1로 일치하는 고유한 이름으로 오류 또는 경고를 발생시킨 상태를 식별합니다. True
심각도 다음 N1QL 심각도 수준 중 하나입니다: 심각, 경고, 정보 또는 오류 True
Temp 오류 또는 경고가 일시적인 것이며 거짓인 경우 요청을 다시 시도해도 동일한 결과가 발생함을 나타냅니다. True

메트릭

메트릭은 서버에서 실행된 문에 대한 지표를 제공합니다. 기본적으로 true인 서버 측 메트릭 매개변수가 있으므로 요청에 메트릭 매개변수가 포함되지 않은 경우에도 메트릭이 전송됩니다. 메트릭을 사용하지 않으려면 쿼리 요청 개체를 실행하기 전에 다음 필드를 설정합니다:

일반적으로 대부분의 프로덕션 코드에서는 메트릭이 반환되지 않기를 원하지만 개발 환경에서는 그 반대의 경우도 마찬가지입니다.

읽기 전용, 서명 및 클라이언트 컨텍스트 ID

간단히 설명하겠습니다. 읽기 전용은 서버 전체 설정으로 클라이언트에서 재정의할 수도 있습니다. 일반적으로 모든 GET 요청에 적용되지만 이를 대체하는 서버 전체 설정이 있습니다. 서명은 결과 스키마에 대한 선택적 헤더입니다. 클라이언트 컨텍스트 ID는 클라이언트가 제공하고 서버가 다시 에코하는 64자 문자열(선택 사항)입니다. 주요 목적은 요청을 추적하고 디버깅하는 것입니다.

무엇이 달라졌나요?

Common.Logging 3.0

2.0.0 및 2.0.1 릴리스는 Common.Logging 라이브러리 버전 2.0에 따라 달라집니다. 2.0.2에서는 이 종속성을 Common.logging 3.0으로 업데이트했습니다. 업데이트 이유에 대해 읽어보세요. 여기. 좋은 소식은 Nuget에서 Log4Net 또는 NLog에 종속성을 추가하려고 할 때 더 이상 이 혼란스러운 메시지가 표시되지 않는다는 것입니다:

나쁜 소식은 Common.Logging 프로젝트가 현재 사용 중인 어셈블리 이름 변경을 지원하기 위해 App.Config 또는 Web.Config를 변경해야 할 가능성이 높다는 것입니다. 예를 들어 Log4Net에 대한 종속성을 추가하려면 App.Config 또는 Web.Config에서 "새로운" 명명 규칙을 사용해야 합니다:

이런 식으로요:

물론 여기에 제공하는 어셈블리 이름은 종속성을 취한 버전에 따라 달라집니다.

ICluster 및 ClusterHelper의 변경 사항

ICluster 인터페이스에 새로운 메서드가 추가되어 클러스터 객체 자체가 추가되었습니다: IsOpen(문자열 버킷 이름). 이 메서드의 목적은 짐작하셨겠지만 Cluster 개체가 IBucket 구현에 대한 참조를 보유하고 있는지 확인하는 것입니다. 이 메서드는 테스트에 유용하며, 애플리케이션 내에서 IBucket 참조를 관리하려는 경우에 유용할 수도 있습니다.

이제 클러스터 인스턴스용 싱글톤뿐만 아니라 버킷용 "멀티톤"으로도 사용할 수 있게 되었습니다! 왜 이렇게 했을까요? ASP.NET 애플리케이션과 같은 멀티스레드 환경에서 클러스터와 버킷 참조를 더 쉽게 관리할 수 있도록 하기 위해서입니다. 이제 API는 다음과 같습니다:

가장 크게 추가된 함수는 GetBucket(bucketName)과 RemoveBucket(bucketName)입니다. GetBucket(bucketName)을 사용하여 버킷을 열면 참조가 캐시되고 이후 같은 이름의 버킷을 요청하면 캐시된 버킷 객체가 반환됩니다.

RemoveBucket(bucketName)은 클러스터 객체에서 버킷 인스턴스를 제거합니다. 버킷 이름당 하나의 참조만 저장되지만, 원하는 만큼 열 수 있다는 점에 유의하세요. 다른 (예: 기본, 맥주 샘플 등) 버킷을 원하는 대로 설정할 수 있습니다. GetBucket(bucketName) 및 RemoveBucket(bucketName) 외에도, 클러스터 도우미가 유지 관리 중인 열린 버킷의 수를 제공하는 또 다른 메서드인 Count가 추가되었습니다. 마지막으로, 클러스터 도우미에서 Close()를 호출하면, 모두 의 버킷이 닫힙니다.

ViewRow 변경 사항

ViewRow.Key 속성이 System.object 유형에서 동적 유형으로 변경되었습니다. 이는 프로퍼티가 키의 JSON 구조를 반영하고 기본 JSON 직렬화 API의 유형이 누출되지 않도록 하기 위한 것입니다.

버그 수정

이 릴리스에 포함된 Jira 티켓 목록은 릴리스 노트에서 확인할 수 있습니다. 여기.

어떻게 받을 수 있나요?

  • 패키지는 NuGet, S3에서 사용할 수 있으며, "2.0.2" 태그를 사용하여 마스터에서 직접 소스를 가져올 수도 있습니다:
  • 패키지 받기 여기.
  • 바이너리 다운로드 여기.
  • 리포지토리 복제 여기.
이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

Author

Posted by Jeff Jeff Morris, Senior Software Engineer, Couchbase

Jeff Morris는 Couchbase의 수석 소프트웨어 엔지니어입니다. Couchbase에 입사하기 전에는 6년 동안 Source Interlink에서 엔터프라이즈 웹 아키텍트로 근무했습니다. Jeff는 Couchbase SDK 개발과 N1QL(쿼리 언어)과 통합하는 방법을 담당하고 있습니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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