SDK에는 무엇이 있나요?

카우치베이스 서버는 데이터 저장, 검색, 쿼리 및 분석을 위한 다양한 서비스를 제공합니다. 각 서비스는 REST API 또는 더 낮은 수준의 확장된 멤캐시드 바이너리 프로토콜을 통해 공개 API를 노출합니다. 적절한 인증과 개방형 포트만 있으면 모든 애플리케이션이 이러한 API를 사용할 수 있지만, 대부분의 경우 비용과 복잡성, 유형 안전성이 부족하다는 단점이 있습니다. 대부분의 애플리케이션 개발자는 REST 응답을 파싱하거나 멤캐시드 패킷을 언패킹하는 데 관심이 있는 것이 아니라 고유한 비즈니스 요구 사항을 해결하기 위한 솔루션을 빠르고 효율적으로 구축하기를 원합니다. 이들은 리소스 관리, 샤딩, 클러스터 토폴로지 변경 관리 등을 처리하는 라이브러리를 원하는데, 이것이 바로 Couchbase SDK가 제공하는 역할입니다.

변화하는 이유는 무엇인가요?

SDK 1.0은 주로 멤캐시드 프로토콜과 보기를 사용하여 바이너리 및 JSON 형식의 키/값 쌍 읽기/쓰기를 지원했으며, Couchbase Server 1.x와 연동되었습니다. SDK는 서로 독립적으로 개발되었고 일관된 API 인터페이스가 없었습니다. 경우에 따라 멤캐시드 패킹의 차이로 인해 SDK 간에 데이터를 공유할 수 없는 경우도 있었습니다.

SDK 2.0은 진화하는 Couchbase Server의 새로운 기능을 지원합니다: Couchbase Server에 저장된 JSON 문서를 쿼리하기 위한 SQL과 유사한 언어인 N1QL, 역할 기반 액세스 제어(RBAC)를 사용한 향상된 인증, 향상된 JSON 지원, 분석, 전체 텍스트 검색(FTS) 및 데이터와 상호 작용하기 위한 기타 도구 등입니다. 2.X에서는 정의된 인터페이스를 준수하기 위해 RFC를 사용하여 대부분의 경우 모든 SDK에서 인터페이스를 조정하고 일관성을 유지했으며, 모든 SDK에서 데이터를 쓰고 읽을 수 있도록 하기 위해 공통 플래그 구성 요소를 포함했습니다. 단점으로는 여러 API가 들어감에 따라 IBucket 인터페이스가 비대해지고 사용하기가 어려워졌습니다.

SDK 3.0은 기존의 버킷 인터페이스에서 확장된 새로운 기능인 범위 및 컬렉션에 대한 지원 등 Couchbase Server의 새로운 기능에 맞춰 조정됩니다. 카우치베이스 서버 6.5의 개발자 미리 보기카우치베이스 서버 7.0의 GA. 또한 형식적으로 부풀려진 과부하 기반 인터페이스를 더 작고 간결한 인터페이스로 통합하고 개선하는 동시에 SDK 간 정합성을 유지하고 개선합니다.

버전은 어떻게 하나요?

모든 SDK는 시맨틱 버전 관리 2.0.0 지정된 버전 번호에 대한 사양(SemVer)은 다음과 같습니다. major.minor.patch 는 언제 증가합니다:

  • 전공 버전과 호환되지 않는 API를 변경하는 경우,
  • MINOR 버전에 이전 버전과 호환되는 방식으로 기능을 추가하는 경우, 그리고
  • 패치 버전으로 이전 버전과 호환되는 버그 수정을 할 수 있습니다.

또한 사전 릴리스 및 빌드 메타데이터의 경우 SemVer 사양에서 허용하는 대로 확장 기능을 추가합니다. 예를 들어, SDK 3.0의 초기 릴리스에서는 "알파" 명칭과 알파 버전에 대한 증분을 사용합니다. 예를 들어, 초기 SDK 3.0 초기 프리뷰에서는 다음과 같은 SemVer 호환 버전을 사용했습니다: "3.0.0-alpha1". 알파 릴리스 이후 다음 프리 릴리스는 "3.0.0-beta1", 마지막으로 완전히 지원되는 GA 릴리스는 "3.0.0"이 될 것입니다. 일반적으로 '베타' 버전이 릴리스되면 '알파' 버전 사이에 큰 변화가 있을 것으로 예상되지만, 경우에 따라서는 이러한 변화가 필요하지 않을 수도 있습니다.

카우치베이스 서버는 사전 릴리스를 "개발자 프리뷰" 또는 "dp"로 제공한 다음 "베타", 최종적으로 GA로 제공한다는 점에서 서버 버전 간에 약간의 차이가 있습니다.

Couchbase Server 6.5+의 범위 및 컬렉션

6.5 이전 Couchbase Server 버전에서 Buckets은 항목을 그룹화하는 논리적 사용자 이름 엔티티로 사용되어 액세스, 인덱싱, 복제 및 액세스 제어가 가능했습니다.

이것은 실제로 Couchbase Server를 사용하여 멀티테넌시를 달성할 수 있는 유일한 수단이었으며 몇 가지 제한이 따랐습니다: 버킷 자체는 상당히 리소스 집약적이며 클러스터는 한정된 수의 버킷만 효율적으로 관리할 수 있습니다. 최신 마이크로서비스 아키텍처 또는 멀티테넌시가 필요한 모든 아키텍처의 경우, 많은 테넌트를 지원할 때 몇 가지 문제가 발생했습니다. Couchbase Server 6.5 이상에서는 범위 및 컬렉션을 통해 이 문제가 해결되었습니다.

Couchbase 6.5+의 범위는 멀티 테넌시의 단위를 나타내며 컬렉션 이름을 재사용할 수 있으며, 주어진 범위에는 정확히 하나의 고유한 컬렉션 이름이 포함될 수 있습니다. Scope는 간단히 말해 컬렉션의 그룹입니다. 모든 버킷에는 다음과 같은 이름의 기본 Scope가 포함됩니다. "_default" 라는 기본 컬렉션을 포함하는 범위 식별자가 0(0)이고, 이 컬렉션은 "_default"와 그에 수반되는 식별자 0(0)을 사용합니다. 물론 주어진 범위마다 여러 컬렉션을 만들 수 있습니다.

이는 SDK1.0 및 SDK2.0의 버킷 컨텍스트에 있던 키/값 작업을 SDK3.0의 컬렉션 컨텍스트로 이동하는 효과를 가져옵니다. 반면, FTS, Analytics 및 N1QL과 같은 교차 버킷 작업은 이제 클러스터 수준에서 수행됩니다.

.NET SDK 3.0 알파 시리즈

Couchbase .NET SDK 3.0의 첫 번째 패키지 덤프는 Couchbase 알파 2 (알파 1에는 버전을 릴리스하고 상향 조정해야 하는 버그가 포함되어 있었습니다.) 알파 3 가 4월 26일에 출시되었습니다. 앞으로도 몇 가지를 더 출시할 계획입니다! 이번 사전 릴리즈의 초점은 Couchbase Server에 대한 키/값 연산과 N1QL 쿼리를 프로그래밍하는 데 필요한 비트를 제공하는 것입니다. 여기에는 익숙한 클러스터 및 버킷 논리 구조와 새로운 범위 및 컬렉션 구조가 포함되어 있습니다. 범위와 컬렉션은 올해 말이나 내년에나 출시될 Couchbase 6.5의 일부이지만, SDK 3.0은 앞서 설명한 기본 범위와 컬렉션을 사용하여 Couchbase 5.0 이상도 지원합니다.

SDK 3.0의 클러스터 및 버킷

SDK 2.0과 마찬가지로, 클러스터와 버킷 개체는 각각 서버와 동등한 서버를 나타내는 SDK 3.0에서 다시 등장합니다. 클러스터에 연결하고 버킷을 여는 작업은 SDK2.0과 비슷한 방식으로 수행됩니다:

SDK2.0과 마찬가지로 클러스터 및 버킷 객체는 일반적으로 애플리케이션이 시작될 때부터 애플리케이션이 종료될 때까지 수명이 긴 객체입니다.

카우치베이스 서버 6.0에서 기본 범위 및 컬렉션 사용

이제 모든 키/값 연산은 컬렉션 수준에 존재하며, 항상 정확히 하나의 범위의 멤버가 됩니다. 다음은 컬렉션에 액세스한 다음 컬렉션에 데이터를 읽고 쓰는 몇 가지 예시입니다.

현재 Couchbase Server 6.0을 사용하고 있으므로 범위 또는 컬렉션이 지원되지 않지만(서버 6.5까지는 제공되지 않음), 범위 및 컬렉션이 지원되는 것처럼 "기본" 범위 및 컬렉션을 사용할 수 있다는 점에 유의하세요. 이 기능은 최신 서버 버전으로 마이그레이션하기 위한 업그레이드 기능으로 추가되었습니다. "기본" 범위 및 컬렉션은 항상 사용할 수 있으며, 3.0 이전 SDK에서 버킷이 작동하는 방식과 유사합니다.

문서를 가져온 후에는 GetResult를 폐기하여 리소스를 확보해야 하며, 그렇지 않으면 내부 버퍼가 '유출'됩니다(이는 SDK 1.0 및 2.0에서 변경된 사항입니다).

카우치베이스 서버 6.5+에서 명명된 범위 및 컬렉션 사용

버킷을 여러 개의 논리적 범위(멀티 테넌시)와 별개의 문서 컬렉션으로 분할할 수 있는 기능, 이것이 바로 Couchbase의 미래입니다. 이는 초기 버전의 Couchbase 서버에서 이름별로 일종의 문서 그룹을 지정하는 특수한 '유형' 필드를 추가해야 했던 요구 사항을 대체하여 버킷 내에서 독립적으로 쿼리할 수 있습니다. 훨씬 더 직관적인 프로그래밍 모델이며 향후 서버 기능의 발전을 가능하게 할 것이라고 생각합니다.

N1QL 쿼리를 위한 클러스터 사용

N1QL은 분석 및 FTS와 마찬가지로 쿼리가 여러 버킷을 참조할 수 있다는 점에서 "전역" 범위로 간주됩니다. SDK 2.0에서는 처음에 N1QL 쿼리가 버킷으로 범위가 지정되었다가 나중에 클러스터로 추가되었지만, SDK 3.0에서는 현재 클러스터 개체에서만 쿼리할 수 있습니다.

전반적으로 모든 서비스(쿼리, FTS, 애널리틱스)는 SDK 2.0과 매우 유사한 공개 API를 사용하지만, 일관성을 위해 필수 필드(N1QL용 SQL 문)가 왼쪽에 파라미터로 추가되고 선택 파라미터가 오른쪽의 '옵션' 블록 또는 구조로 통합되었습니다. 이는 전체 SDK에 걸쳐 계속 적용되며 API의 일관성을 크게 향상시킵니다.

Couchbase .NET 3.0 SDK 알파 릴리스 받기

모든 Couchbase .NET SDK 릴리스와 마찬가지로 직접 제공하거나 다운로드 의 NuGet 패키지에 게시되며 NuGet.

마지막으로, 이번 출시에 큰 기여를 해주신 Centeredge Software의 Brant Burnett에게 특별히 감사드립니다!

작성자

게시자 Jeff Morris, 수석 소프트웨어 엔지니어, Couchbase

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

댓글 하나

  1. 3.0은 획기적인 변경이 허용된다는 뜻인가요?
    메소드가 비동기일 때 접미사를 붙이는 규칙을 따르지 않는 이유는 무엇인가요?

    1. Jeff Morris, 소프트웨어 엔지니어, Couchbase 5월 13, 2019에서 11:48 오전

      안녕하세요 토마스 - 안녕하세요.

      예, 많은 획기적인 변경 사항이 있습니다. 공개 API는 SDK 2.X에서 완전히 재작성되었습니다.

      '비동기' 접미사를 사용하지 않는 이유는 동기화 메서드가 없으므로 동기 호출과 비동기 호출을 구분할 이유가 없기 때문입니다. 향후 릴리스에서는 여러분과 같은 피드백을 더 많이 받으면 변경될 수 있습니다.

      피드백을 보내주셔서 감사합니다!

      -Jeff

댓글 남기기