도구 및 SDK

Couchbase Scala SDK 소개

이제 Couchbase에서 Scala SDK를 지원하게 되어 매우 기쁘게 생각하며, 네이티브 Scala로 문서 가져오기 및 가져오기, N1QL 쿼리 실행, 분석 및 전체 텍스트 검색 조회를 모두 수행할 수 있습니다.

이 블로그에서는 Scala SDK의 주요 기능과 디자인 원칙에 대해 살펴보겠습니다. 또는 바로 시작하고 싶으시다면 여기에서 시작하기 가이드. Scala SDK는 지금 바로 사전 릴리스 알파 형태로 다운로드할 수 있습니다.

Scala SDK는 새로운 Java SDK 3.x와 동일한 고성능의 안정적인 내부 코어를 사용하므로 새로운 버전이지만 정식 버전이 출시되면 프로덕션에 바로 사용할 수 있으므로 안심해도 됩니다.

기능적 오류 처리 - 예외는 없습니다!

Scala SDK는 기능적인 인터페이스를 제공하며, 대부분의 연산은 Scala Try를 반환합니다. 이는 예상 값을 포함하는 성공이거나 Throwable을 포함하는 실패일 수 있습니다. 처음에는 다소 장황해 보이고 항상 오류를 처리하기 위해 약간의 프로그래밍 규율이 필요해 보이지만, 이러한 형태의 오류 처리는 금방 익숙해지며 SDK에서 임의의 예외가 발생하지 않는다는 것을 알고 안전하게 개발할 수 있습니다.

다음은 문서를 삽입하는 간단한 데모입니다:

그런 다음 시도 결과에서 패턴을 일치시킵니다:

(물론 프로덕션 앱은 단순히 println을 사용하는 것이 아니라 오류를 제대로 처리할 것입니다!).

예외를 던지는 Java SDK와 비슷한 것을 원한다면 모든 시도에서 .get()을 호출하여 실패하면 던지는 것으로 쉽게 시뮬레이션할 수 있습니다:

flatMap을 통해 여러 개의 Try를 결합하는 것은 쉽습니다. 여기서는 문서를 업서트한 다음 가져오고, 기본 제공 JSON 라이브러리인 JsonObjectSafe로 변환된 콘텐츠를 검색하고(나중에 자세히 설명), 마지막으로 이로부터 'status'라는 필드를 가져옵니다. 이 모든 것이 완전히 기능적인 스타일로 이루어지므로, 예를 들어 업서트가 성공한 경우에만 get 작업이 시도됩니다.

(간결성을 위해 아래 예제에서는 대부분 결과 확인을 생략합니다. 하지만 프로덕션 앱은 당연히 ABC를 따라야 하며 항상 확인해야 합니다.)

미래 전망

SDK는 기본적으로 Couchbase Server 6.5에서 사용할 수 있는 새롭고 더 강력한 내구성을 지원합니다:

그리고 버킷 안에 문서를 정리하는 새로운 방법인 컬렉션을 지원하며, 이는 향후 출시될 Couchbase Server의 초석이 될 기능입니다(곧 프리뷰가 제공될 예정). 곧 장난감 컬렉션을 만들 수 있는 기능이 추가될 예정이지만 지금은 기본 컬렉션을 여는 것으로 충분합니다:

이 로직은 지원되는 모든 Couchbase Server 버전(5.x 이상)에서 작동합니다.

또한 복잡한 분산 시스템 추적을 위한 사실상의 표준이 되고 있는 플랫폼인 OpenTracing(현재 OpenTelemetry)에 대한 지원도 포함되어 있습니다:

간단한 API

SDK는 오버로드 대신 네임드 및 기본 매개변수를 활용하므로 코드를 최대한 간단하게 작성할 수 있습니다:

또는 사용자 지정할 수 있습니다:

필요한 대로 설정할 수 있습니다.

비동기식

Java SDK와 마찬가지로 세 가지 API가 제공되므로 필요한 방식으로 애플리케이션을 유연하게 구성할 수 있습니다.

첫 번째는 위의 예제에서 보았던 간단한 차단 동기식 API입니다. 이 방법은 기본값으로 사용하는 것이 좋지만, 물론 필요한 경우 스레딩을 명시적으로 관리해야 합니다.

두 번째는 프로젝트 리액터의 표준 리액티브 유형(모노 및 플럭스)을 사용하는 리액티브 프로그래밍을 중심으로 구축된 것입니다.

반응형 방식으로 업서트하는 예시입니다:

반응형 프로그래밍을 사용하면 모노를 구독할 때까지 아무 일도 일어나지 않습니다. 테스트 목적으로 이 작업을 수행하는 가장 간단한 방법은 블록()을 사용하는 것이지만, 실제 앱에서는 좋지 않은 방법입니다:

반응형 프로그래밍은 복잡하고 심오한 주제이므로 여기서 자세히 설명할 수는 없지만, 숙달하면 특히 실제 분산 시스템의 복잡성을 처리하는 데 강력한 도구를 제공합니다. 특히 반응형 API는 N1QL, FTS 및 분석 쿼리에 대한 역압력을 제공하므로 애플리케이션이 데이터를 따라잡는 데 어려움을 겪고 있는 경우 자동으로 행의 소비 속도를 늦추고 메모리 부족 오류를 방지할 수 있습니다. 궁금하신 분들은 프로젝트 리액터 문서 를 클릭해 자세히 알아보세요.

마지막으로, 반응형 프로그래밍의 스레드 관리와 구성성을 약간 제공하지만 많은 Scala 개발자에게 더 익숙한 형태로 제공되는 Scala Futures를 중심으로 구축된 비동기 API가 있습니다. 간단한 업서트 예시는 다음과 같습니다:

JSON 유연성

핵심 목표는 특정 JSON 구현에 갇히지 않도록 하는 것이었으며, Scala SDK는 기본적으로 Circe, µPickle/µJson, Json4s 및 Jawn을 비롯한 여러 인기 있는 Scala JSON 라이브러리와 잘 작동합니다. 각 라이브러리를 사용하는 방법에 대한 스니펫은 다음에서 확인할 수 있습니다. JSON 문서하지만 호기심을 불러일으키기 위해 Circe가 실제로 작동하는 모습을 보여드리겠습니다. Circe 유형이 SDK로 직접 전송되고 반환되는 방식에 주목하세요:

기본 제공 JSON

'배터리 포함' 접근 방식을 취하는 경우 SDK에 포함된 간단한 JSON 라이브러리인 JsonObject도 있습니다. 주요 목표는 다음과 같습니다:

  • 편의성. 모든 사람이 시작하기 전에 여러 JSON 라이브러리를 평가하고 싶어하는 것은 아닙니다. JsonObject는 괜찮은 기본 선택입니다.
  • 속도. 내부 벤치마킹(출처 를 직접 실행하고 싶을 경우)에 따르면 JsonObject는 일부 중요한 작업에서 가장 가까운 Scala JSON 라이브러리보다 최대 20배 더 빠를 수 있습니다. 이는 대부분 단순하지만 매우 빠르고 가변적인 JVM 데이터 구조를 기반으로 구축되어 있기 때문에 가능합니다.
  • 유연성. 기본 JsonObject 인터페이스는 예외를 던집니다(SDK에서 유일하게 예외를 던지는 곳). 또는 기능적인 Try 기반 인터페이스를 제공하는 JsonObjectSafe로 쉽게 변환할 수 있습니다.
  • 사용 편의성 및 변경 가능성. 우리는 다음 사항에 동의합니다. µJson의 저자 불변성이 일반적으로 바람직하지만, JSON의 특정 경우에는 항상 최선의 선택은 아닙니다. 깊게 중첩된 JSON을 처리하려면 성능 저하가 발생할 가능성은 말할 것도 없고, 읽고 사용하기가 쉽지 않은 렌즈와 같은 기능적 도구가 필요합니다. 또한 JSON은 대부분 제한된 범위(예: 문서 가져오기 및 수정)에서 짧게 처리되는 경우가 많기 때문에 불변성의 안전성이 주는 이점을 거의 누리지 못합니다. 따라서 JsonObject는 간단한 변경 가능한 API를 제공합니다.

자세히 알아볼 수 있습니다. JsonObject 문서는 여기. 물론 불변 데이터, 대수 데이터 유형, 렌즈, 커서 및 기타 기능을 갖춘 보다 '일반적인 Scala' JSON 라이브러리를 사용하고 싶다면 다른 지원 라이브러리 중 하나가 더 나은 선택이 될 수 있으며, 선택은 사용자의 몫이며 동일한 앱에서 여러 JSON 라이브러리를 쉽게 혼합하고 일치시킬 수 있습니다.

직접 사례 수업 지원

Scala SDK는 JSON을 훌륭하게 지원하지만, 때로는 Scala 케이스 클래스로 직접 작업하는 것이 더 쉽고 바람직할 때가 있습니다.

케이스 클래스에 이 작은 보일러플레이트만 추가하면 SDK가 자동으로 직렬화 로직을 생성할 수 있습니다:

그런 다음 해당 케이스 클래스를 SDK로 직접 전송하고 다시 받을 수 있습니다:

내부적으로 이 데이터는 사용자가 예상하는 JSON으로 변환되어 Couchbase Server에 저장됩니다:

이것은 추가 직렬화 메타데이터 등이 없는 일반 JSON이므로 케이스 클래스로 자유롭게 작성하여 JSON 라이브러리 또는 다른 SDK에서 읽거나 그 반대로도 읽을 수 있습니다.

다음 내용을 확인하세요. 케이스 클래스 사용에 대한 문서 를 클릭하세요.

간편한 쿼리

Couchbase 분석, N1QL 및 전체 텍스트 검색을 최대한 쉽게 사용할 수 있도록 만들었습니다. 다음은 행이 JsonObject로 변환되는 N1QL 쿼리의 예입니다.

물론 이러한 결과를 위에서 지원되는 JSON 유형 중 하나로 가져오거나 Scala 케이스 클래스로 직접 가져올 수도 있습니다.

또한 위에서 언급했듯이 반응형 API를 사용하면 애플리케이션이 관리 가능한 속도로 행을 소비하고 매우 큰 쿼리에서 메모리 부족 문제가 발생하지 않도록 자동 백프레셔를 무료로 사용할 수 있습니다.

 

Couchbase Scala SDK를 시작하고 싶으시다면, 다음 내용을 확인해보세요. 빠른 시작 가이드. 아직 초기 알파 버전이지만 지금 바로 사용 가능합니다. GA에 가기 전에 몇 가지 획기적인 변경 사항이 있을 수 있지만, 반대로 생각하면 지금이 바로 사용해 보고 아래에 댓글을 남기거나 포럼, 트위터 또는 gitter. 정해진 것은 없으며, 몇 가지 사항을 변경하여 최고의 SDK로 만들 수 있는 기회를 환영합니다.

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

작성자

게시자 그레이엄 피플, 수석 소프트웨어 엔지니어, Couchbase

Graham은 Couchbase의 선임 소프트웨어 엔지니어로, 주로 Scala 및 Java 클라이언트를 담당하는 SDK 및 커넥터 팀에서 일하고 있습니다. 그에게 가정용 퇴비에 대해 물어보며 하루를 시작하세요.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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