이번 릴리스는 Couchbase .NET SDK에 대한 .NET Core 지원을 위한 공식 GA 릴리스입니다! .NET Core는 .NET 프레임워크의 최신 화신이며 다음과 같이 설명됩니다. ".NET Core는 Windows, Linux 및 Mac에서 실행되는 웹 애플리케이션 및 서비스를 만들기 위한 매우 빠르고 가벼운 모듈식 플랫폼입니다."

잠깐만요... 다시 읽어보세요: ".NET Core는 웹 애플리케이션과 서비스를 만들기 위한 매우 빠르고 가벼운 모듈식 플랫폼입니다. 윈도우, 리눅스 및 맥에서 실행. NET 애플리케이션을 OSX 및 Linux에서 실행하고 있나요? 우리는 어떤 기이한 세상에 살고 있을까요? 확실히 "새로운" Microsoft입니다!

이 블로그 게시물에서는 2.4.0 릴리스의 새로운 기능, 패키징(NuGet)의 변경 사항, SDK가 지원하는 .NET 버전에 대해 살펴봅니다. 또한 데이터 구조와 같은 몇 가지 새로운 기능도 시연해 보겠습니다.

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

2.4.0은 30개가 넘는 커밋이 포함된 대규모 릴리스입니다. 2.4.0까지 3번의 개발자 프리뷰를 릴리스했다는 점을 고려하면 실제로는 지난 6개월 동안 이 릴리스에 이르기까지 훨씬 더 많은 커밋이 이루어졌음을 알 수 있습니다. 다음은 몇 가지 인상적인 기능에 대한 개요입니다. 아래의 '릴리스 노트' 섹션에서 모든 커밋을 확인할 수 있습니다:

.NET 핵심 지원

물론 2.4.0의 가장 중요한 기능은 .NET Core 지원으로, 첫 문단에서 알 수 있듯이 이제 Mac OS 또는 Windows에서 개발하여 Linux에 배포할 수 있습니다(또는 그 반대로도 가능하지만 아직 도구가 약간 미숙합니다). 이는 기존 Windows 개발자에게는 매우 중요한 변화입니다.

.NET Core에 대해 잘 모르는 경우 다음에서 자세히 알아볼 수 있습니다. .NET Core 웹 사이트. 한 가지 멋진 점은 오픈 소스(Apache 2.0)이며 소스는 모두 Github에서 사용할 수 있다는 것입니다.

카우치베이스 SDK는 특히 넷스탠다드1.5 이상을 지원합니다. 명령줄 도구의 1.0.0-preview2-1-003177을 사용하여 SDK를 테스트했습니다.

패키징 변경 사항

세 가지 개발자 프리뷰와 마찬가지로 NuGet 패키지에는 .NET 풀 프레임워크(.NET 4.5 이상 대상)와 .NET 코어(.NET 코어 1.1 대상) 모두에 대한 바이너리가 포함되어 있습니다. 종속성을 포함하려는 대상 프로젝트에 따라 올바른 바이너리가 사용됩니다.

따라서 Visual Studio 프로젝트가 4.5 이상의 .NET 풀 프레임워크 애플리케이션인 경우 전체 프레임워크 버전의 .NET 바이너리를 받게 됩니다. 마찬가지로, 애플리케이션이 .NET Core 애플리케이션인 경우 .NET Core 버전의 바이너리가 사용됩니다. 이를 활성화하기 위해 사용자가 해야 할 일은 없습니다.

이전 .NET 4.5 버전의 패키지는 더 이상 릴리스되지 않으며, 2.3.11은 2.3.X 시리즈의 마지막 지원 릴리스입니다.

코어용 MS 로깅

.NET Core의 경우 다음과 같이 변경하기로 결정했습니다. Common.Logging 를 MS 로깅으로 전환하지 않는 이유는 주로 타사(로그4넷 등)는 현재 .NET Core를 안정적으로 지원하고 있습니다.

또한, 다음에서 이동하여 공통.로깅  를 MS 로깅으로 변경하여 타사 종속성을 하나 더 제거했는데, 이는 언제나 좋은 일입니다. Common.Logging으로 충분하지 않았다는 것은 아니지만 Microsoft의 종속성을 사용하는 것이 더 합리적입니다.

다음은 .NET Core를 대상으로 하는 2.4.0 클라이언트를 구성하고 NLog를 사용하는 예제입니다:

먼저 프로젝트.json에 종속성을 추가합니다:

그런 다음 프로젝트에 다음 내용으로 nlog.config 파일을 추가합니다:

마지막으로 로깅을 위해 Couchbase SDK를 구성하는 코드를 추가합니다:

project.json에는 copyToOutput.포함  값에 대한 nlog.구성 . 이는 빌드 시 툴링이 해당 파일을 출력 디렉터리에 복사하기 위해 필요합니다.

이제 .NET 4.5 풀 프레임워크 바이너리의 경우 다음에 대한 종속성은 공통.로깅 가 그대로 유지되며 기존 로깅 구성은 기존과 동일하게 작동합니다.

데이터 구조

데이터 구조는 다음과 같은 일반적인 컴퓨터 과학 데이터 구조처럼 Couchbase 문서로 작업하는 새로운 방법입니다. 목록대기열사전 또는 세트. SDK에는 두 가지 구현이 있습니다. 카우치베이스버킷  는 공통 데이터 구조 연산을 위한 기능을 제공하고 다른 하나는 시스템.컬렉션.제네릭 . 다음은 SDK에 있는 각 데이터 구조 클래스에 대한 설명입니다:

  • 카우치베이스 사전<TKey, TValue> : 카우치베이스 문서 내에 저장된 키와 값의 모음을 나타냅니다.
  • 카우치베이스 목록<T> : 인덱스로 개별적으로 액세스할 수 있는 카우치베이스 서버에 저장된 객체 컬렉션을 나타냅니다.
  • 카우치베이스 큐<T> : FIFO 동작이 있는 영구적인 카우치베이스 데이터 구조를 제공합니다.
  • 카우치베이스세트<T> : 중복이 없는 오브젝트 모음인 카우치베이스 퍼시스턴트 집합을 제공합니다.

이러한 모든 클래스는 카우치베이스.컬렉션  네임스페이스를 사용합니다. 다음은 카우치베이스 큐<T> :

멀티플렉싱 IO

Couchbase SDK는 과거에 연결 풀링을 사용하여 지연 시간 및 리소스 사용률을 희생하면서 높은 처리량과 확장성을 제공했습니다. Couchbase에서 2.2.4 클라이언트가 사용하도록 구성할 수 있는 멀티플렉싱 IO 또는 MUX-IO라는 더 나은 IO 모델을 도입했습니다(기본값은 풀링된 연결).

2.4.0에서는 MUX-IO를 기본 IO 모델로 설정하고 연결 풀링을 선택 사항으로 만들었습니다. 이는 구성의 일부 연결 풀링 속성이 여전히 SDK를 사용할 수 있다는 의미입니다. 예를 들어

  • 풀 구성.MaxSize  를 여전히 사용하지만 비교적 작은 값(예: 5-10)이어야 합니다.
  • 풀 구성.MinSize 는 0 또는 1이어야 합니다.

MUX-IO를 사용하지 않도록 설정하려면 간단히  클라이언트 구성.사용 연결 풀링를 참(기본값은 거짓)으로 설정하여 연결 풀링을 사용합니다:

N1QL 및 뷰 스트리밍

스트리밍 N1QL 및 뷰는 검색되는 데이터의 양이 많은 특정 경우에 성능 최적화를 위한 것입니다. 그 이유를 이해하기 위해 비스트리밍 쿼리가 어떻게 작동하는지 살펴보겠습니다:

  1. 요청이 서버로 전송됩니다.
  2. 서버는 전체 응답을 처리한 후 결과를 스트림으로 반환합니다.
  3. 클라이언트는 전체 스트림을 버퍼링한 다음 스트림을 "T" 유형의 컬렉션으로 직렬화합니다. 여기서 T는 각 결과가 매핑되는 POCO입니다.
  4. 서버는 목록을 애플리케이션에 다시 반환합니다. 결과

여기서 무엇이 잘못될 수 있을까요? 매우 큰 결과와 메모리 리소스는 유한하다는 점을 생각해 보세요. 아웃오브메모리 예외 ! 가비지 컬렉션과 관련된 다른 부작용도 있습니다.

스트리밍 클라이언트의 경우 프로세스는 다음과 같습니다:

  1. 요청이 서버로 전송됩니다.
  2. 서버는 처리 작업을 수행하고 응답 헤더를 사용할 수 있게 되는 즉시 결과를 스트림으로 반환합니다.
  3. 클라이언트는 헤더와 메타데이터를 부분적으로 읽은 다음 반복이 발생할 때까지 일시 중지합니다.
  4. 애플리케이션이 반복을 시작하면 결과 를 사용하면 각 항목이 기본 컬렉션에 저장되지 않고 한 번에 하나씩 읽혀집니다.

여기서 가장 큰 장점은 컬렉션이 커지고 .NET에서 내부적으로 크기를 조정해도 작업 메모리 세트가 커지지 않는다는 것입니다. 대신 작업 메모리 크기가 고정되어 있고 읽기 개체가 버려지는 즉시 GC가 발생할 수 있습니다.

스트리밍 N1QL 및 보기를 사용하려면 다음을 수행하기만 하면 됩니다. 사용스트리밍() 메서드에 참을 전달하여 스트리밍합니다:

false를 전달하면 전체 응답이 버퍼링되어 처리된 후 반환됩니다.

N1QL 쿼리 취소

이 기능을 사용하면 작업 취소 토큰을 사용하여 장기 실행 중인 N1QL 쿼리가 완료되기 전에 취소할 수 있습니다. 예를 들어

이 커밋은 다음과 같은 커뮤니티 기여를 통해 이루어졌습니다. 브랜트 버넷 의 CenteredgeSoftware.com!

Linux에서 중요한 TLS/SSL 참고 사항

Linux에서 SSL을 사용하는 경우 발생할 수 있는 한 가지 문제가 있습니다. 서버에 7.30.0 미만의 버전이 설치되어 있는 경우 PlatformNotSupportedException이 발생한다는 것입니다. 해결 방법은 Linux에 설치된 libcurl을 7.30.0 이상으로 업그레이드하는 것입니다. 이에 대한 자세한 내용은 Jira 티켓에서 확인할 수 있습니다: NCBC-1296.

 

작성자

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

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

댓글 하나

  1. [...] 이에 대한 자세한 내용은 Jeff의 블로그 게시물 Couchbase .NET 2.4.0 - .NET Core GA 소개에서 읽어보세요. [...]

  2. [...] 최근 출시된 Couchbase .NET SDK 2.4.0에는 많은 새로운 기능이 추가되었습니다. 그러나 언급할 가치가 있는 사소한 기능이 하나 있습니다. [...]

  3. [...] Couchbase .NET SDK 2.4.0을 출시하면서 Couchbase는 이제 .NET Core를 공식 지원합니다. 이로써 .NET [...]의 새로운 세계가 열립니다.

댓글 남기기