.NET

NoSQL을 사용한 ASP.NET Core CRUD: 파트 3

ASP.NET CRUD 애플리케이션은 만들기, 읽기, 업데이트 및 삭제로 구성됩니다. In 파트 1를 사용하여 기본 ASP.NET Core 프로젝트를 설정했습니다. In 파트 2에 첫 번째 읽기 엔드포인트에서 위시리스트 데이터에 대한 SQL++ 쿼리를 사용합니다.

Couchbase의 SQL++는 강력한 쿼리 언어로, 관계형 SQL의 모든 최고의 기능을 포함하고 있으며 JSON 데이터 쿼리를 위한 다양한 기능을 갖추고 있습니다.

하지만 SQL++가 Couchbase에서 데이터와 상호 작용하는 유일한 방법은 아닙니다. 이 글에서는 키-값 API를 사용하는 방법을 살펴보겠습니다.

키-값 대 SQL?

관계형 배경 지식이 있는 경우 SQL에 익숙할 것입니다. 유일한 데이터와 상호 작용하는 방법(엔티티 프레임워크 코어와 같은 도구를 사용하더라도 궁극적으로는 여전히 SQL을 사용하게 됩니다). Couchbase와 같은 NoSQL 데이터베이스의 가장 큰 특징 중 하나는 SQL을 사용할 수 있지만 다른 액세스 방법도 사용할 수 있다는 것입니다. (따라서 반의어 "SQL뿐만 아니라").

Couchbase의 경우, 데이터에 액세스하는 가장 효율적인 방법은 키-값 조회. 카우치베이스가 지원하는 다른 모든 인덱스 및 쿼리(SQL++, 전체 텍스트 검색, 분석, 이벤트등)는 궁극적으로 낮은 키 값 조회를 기반으로 구축되거나 이에 의존합니다.

키-값 API는 최고의 성능을 제공합니다:

    • 키가 지정되거나
    • 코드에 키가 제공되거나
    • 결정론적으로 키를 구성할 수 있습니다.

예: 키-값을 사용해야 하는 경우

다음은 키-값 API를 읽기에 사용할 때(그리고 사용하지 않을 때)에 대한 몇 가지 예입니다:

사용 사례 키 값? 왜 또는 왜 안 될까요?
키로 사용자 조회 "73892 직접 조회
키를 사용하여 사용자의 이메일 주소만 조회"73892 사용자 문서가 크더라도 Couchbase는 키 기반 하위 문서 API를 클릭하면 문서의 일부를 검색할 수 있습니다.
키가 있는 사용자 그룹 조회 "73892“, “47212", 그리고 “90491” 이 경우 여러 키 조회 작업이 필요할 수 있지만 여전히 SQL 선택 ... 어디에서 ... 쿼리.
블로그 게시물에서 댓글 조회 어쩌면 블로그 글에 대한 댓글이 하나의 문서에 있고 블로그 글 키를 알고 있는 경우 블로그 글 댓글 키를 만들 수 있습니다. 예: 블로그 글 키는 다음과 같습니다. 나는 풍선을 좋아해키를 사용하여 댓글을 표시합니다. 좋아요-풍선::댓글
에서 모든 사용자 조회 "Ohio 아니요 사용자의 상태는 키가 아닌 '보조' 속성일 가능성이 높습니다(여러 사용자가 오하이오에 있을 수 있음). 이는 SQL++의 좋은 사용 사례입니다.
로 제품 검색 "풍선" 설명에 아니요 설명은 키가 아닌 보조 속성입니다(여러 제품의 설명에 '풍선'이 있을 수 있음). 이는 전체 텍스트 검색(FTS)의 좋은 사용 사례입니다.

Couchbase는 메모리 우선 아키텍처를 사용합니다. 내장된 캐시는 키-값 조회가 디스크에서 대기하지 않고 메모리에서 직접 데이터를 검색하는 경우가 많으므로 대기 시간이 마이크로초 단위로 짧습니다.

제 경험에 비추어 볼 때 가능한 한 키-값 API를 사용하고, 필요한 경우 SQL++ 또는 전체 텍스트 검색과 같은 보다 유연한 옵션으로 돌아가는 것이 좋습니다.

Get CRUD 엔드포인트 만들기

키-값 API를 사용하여 위시리스트에서 단일 항목을 검색하는 엔드포인트를 만들어 보겠습니다.

이 엔드포인트에는 위시리스트 항목의 ID를 매개변수로 지정해야 합니다:

이 예제에서는 필요하지 않습니다. 클러스터 객체를 사용할 수 있지만(SQL++에서 했던 것처럼), 그래도 컬렉션 객체에 추가합니다. 위시리스트 컬렉션이 위시리스트의 _기본값 범위를 설정하면 스코프 가져오기를 건너뛰고 버킷에서 컬렉션으로 바로 이동합니다..

다음에서 품목이 반품된 경우 GetAsync에 있는 IGetResult 객체를 저장합니다. 카우치베이스는 C# 객체를 저장하지 않고 JSON을 저장합니다. 따라서 직렬화하려면 위시리스트 항목 객체, 사용 item.ContentAs.

이 API는 유연성을 제공합니다. Couchbase에서 반환된 문서를 다음과 같이 직렬화할 수 있습니다. 위시리스트 항목 여기와 아마도 아마존 위시리스트 항목 를 사용하여 애플리케이션의 다른 부분에서

행동하는 핵심 가치

ASP.NET Core 애플리케이션을 실행하고 업데이트된 OpenAPI/Swagger 페이지를 살펴봅시다.

ASP core dotnet tutorial with Couchbase

엔드포인트 /api/get/{id} 아래 선물 가 나열되어야 합니다. 해당 엔드포인트를 클릭하여 확장합니다. 엔드포인트의 /api/getall 엔드포인트와 마찬가지로, 이 엔드포인트에는 가져오려는 위시리스트 항목의 ID라는 매개 변수가 필요합니다.

GUID 중 하나가 기억나지 않는 경우 다음을 실행할 수 있습니다. /api/getall 를 먼저 클릭하고 그 중 하나를 복사하거나 사용하세요: "31c9cc33-8dfe-440c-bd1b-bb038939d2e0"(조이 보토 유니폼에 부여한 ID입니다)라는 문구가 있습니다. 클릭 사용해 보기를 클릭하고 해당 ID를 붙여넣은 다음 실행:

Test the ASPNET Core Couchbase Endpoint

응답에서 반환된 ID는 다음과 같습니다. null. 에서 설명했듯이 파트 2를 입력하면 Couchbase는 ID를 메타데이터로 저장합니다. 이 상황에서는 큰 문제가 되지 않습니다. ID는 매개변수로 제공되었으므로 반환되는 C# 객체에 할당하기만 하면 됩니다:

또는 ID를 반환하고 싶지 않은 경우 를 전혀 사용하지 않는 경우 별도의 C# 뷰 클래스를 만들 수 있습니다. 이름 를 사용하여 ContentAs.

유효성 검사 및 오류 처리는 어떻게 되나요?

정말 현명한 질문입니다! 이 엔드포인트는 확실히 프로덕션에 사용할 준비가 되지 않았습니다. 무엇이 빠졌나요?

    • 오류 처리: 예외가 발생하면 어떻게 하나요?
    • 유효성 검사: 전달된 ID가 유효하지 않은 경우 어떻게 하나요?
    • 인증/승인: 이 API의 소비자에게 읽기 권한이 없어야 하는 경우 어떻게 해야 하나요?
    • 로깅: 무언가 제대로 진행되지 않아 나중에 결과를 검토하고 싶을 때는 어떻게 해야 하나요?

이는 모두 중요한 문제입니다. 이러한 대부분의 경우 ASP.NET Core에는 기본 제공 기능 및/또는 인기 있는 타사 라이브러리를 통해 도움을 받을 수 있습니다. 하지만 다음 사항에 대한 Couchbase 설명서를 확인하세요. .NET SDK로 오류 처리하기 그리고 보안 관리 개요.

다음 단계는 무엇인가요?

ASP.NET Core 프로젝트는 카우치베이스 카펠라에 연결되어 있으며, SQL++와 키-값 API를 통해 데이터를 읽고 있습니다.

다음 블로그 게시물에서는 데이터 생성 및 업데이트("C" 및 "U")에 대해 살펴보겠습니다.

그동안은 그렇게 하셔야 합니다:

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

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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