이 블로그 게시물은 이 시리즈의 마지막 블로그 게시물입니다. 카우치베이스 를 ASP.NET 개발자에게(또는 관점에 따라 그 반대의 경우도 마찬가지입니다 :). 제가 구축해 온 샘플 앱을 전체 CRUD 기능으로 완성해 보겠습니다. 앱에 이미 사람 목록이 표시되어 있습니다. 이 포스팅이 끝나면 웹 앱을 통해(Couchbase 콘솔에서 직접 추가하는 대신) 새 사람을 추가하고, 사람을 편집하고, 사람을 삭제할 수 있습니다.

시작하기 전에 고지 사항을 알려드립니다. 몇 가지 모델링을 해봤습니다. 의사 결정 를 사용하기로 결정했습니다. 개인 문서에 대한 키는 "Person::{guid}" 형식이어야 하며, 리포지토리 수준에서 "Person::" 접두사를 적용하기로 결정했습니다. 또한 간결한 데모를 위해 MVC 앱에서 중간 보기 모델이나 편집 모델을 사용하지 않기로 결정했습니다. 여러분도 저와 같은 결정을 내릴 필요는 없습니다! 여러분의 특정 사용 사례에 어떤 의미가 있는지 생각해 보시고 댓글을 통해 장단점을 자유롭게 논의해 주시기 바랍니다.

새 사람 문서 추가하기

이전 블로그 게시물에서는 Couchbase 콘솔을 통해 새 문서를 추가했습니다. 이제 ASP.NET 페이지의 표준 HTML 양식을 통해 이를 가능하게 만들어 보겠습니다.

먼저 사람 클래스를 약간 변경해야 합니다:

"Id" 필드를 추가하고, 이 필드에 [키] 속성을 추가합니다. 이 속성은 System.ComponentModel.DataAnnotations에서 가져오지만, Linq2Couchbase는 "이 필드를 Couchbase 키에 사용"을 의미하는 것으로 해석합니다.

이제 홈 컨트롤러에 아주 간단한 새 액션을 추가해 보겠습니다:

그리고 부트스트랩 탐색 기능으로 연결해 보겠습니다(이 기능은 제가 이전에 몰래 삽입한 것으로, 반드시 사용해야 하는 것은 아닙니다):

해당 양식은 저장 작업에 게시할 것이므로 다음에 양식을 만들어야 합니다:

매개변수에 사용된 Person 유형이 이전과 동일한 유형임을 알 수 있습니다. 좀 더 복잡한 웹 애플리케이션에서는 편집 모델, 유효성 검사, 매핑 등을 사용하고 싶을 것입니다. 저는 이 모든 것을 생략하고 모델을 PersonRepository의 새로운 메서드로 바로 보냈습니다:

이 리포지토리 메서드는 ID가 아직 설정되어 있지 않은 경우 설정합니다(나중에 '편집'을 다룰 때 설정할 예정). IBucketContext의 '저장' 메서드는 Linq2Couchbase에서 가져온 것입니다. 키가 없는 경우 새 문서를 추가하고, 있는 경우 기존 문서를 업데이트합니다. 이를 "업서트" 작업이라고 합니다. 사실 Linq2Couchbase 없이도 거의 동일한 작업을 수행할 수 있습니다:

기존 사람 문서 편집하기

이제 ASP.NET 사이트에서 기존 사람 문서를 편집할 수 있기를 원합니다. 먼저 _person.cshtml 부분 보기를 변경하여 각 사람에 대한 편집 링크를 추가해 보겠습니다.

다시 말하지만, 여기에서는 부트스트랩을 사용하고 있지만 필수는 아닙니다. 이 과정에서 '삭제' 링크도 추가했는데, 이 부분은 나중에 설명하겠습니다. 한 가지 더 지적할 것이 있습니다: routeValues를 생성할 때 Id에서 "Person::"을 제거했습니다.. 이렇게 하지 않으면 ASP.NET이 잠재적으로 악의적인 HTTP 요청에 대해 불평할 것입니다. 각 사람에게 좀 더 친숙한 "슬러그" 를 URL에 사용할 수 있으며, 문서 키로도 사용할 수 있습니다. 이는 사용자와 사용 사례에 따라 달라질 수 있습니다.

이제 홈 컨트롤러에서 편집 액션이 필요합니다:

동일한 Edit.cshtml 보기를 재사용하고 있지만 이제 문서 ID를 저장하는 숨겨진 필드를 추가해야 합니다.

짜잔! 이제 개인 문서를 추가하고 편집할 수 있습니다.

Add or Edit a Person document

이미 ASP.NET MVC에 익숙한 분들에게는 그리 인상적이지 않을 수도 있습니다. 이제 Couchbase와 같은 NoSQL 데이터베이스가 제공하는 멋진 기능에 대해 살펴보겠습니다.

개인 문서에 저장된 데이터에 반복 작업하기

어떤 사람에 대한 더 많은 정보를 수집하고 싶습니다. 전화번호와 그 사람이 좋아하는 영화 목록을 얻고 싶다고 가정해 보겠습니다. 관계형 데이터베이스를 사용하면 다음과 같이 추가해야 합니다. 적어도 두 개의 열, 그리고 외래 키가 있는 영화를 담을 다른 테이블이 하나 이상 있어야 합니다.

카우치베이스에는 명시적인 스키마가 없습니다. 대신 Person 클래스에 프로퍼티를 몇 개 더 추가하기만 하면 됩니다.

또한 해당 UI를 추가해야 합니다. 사용자가 동영상을 원하는 개수만큼 추가할 수 있도록 약간의 jQuery를 사용했습니다. 구현 세부 사항은 중요하지 않으므로 여기서는 코드를 보여드리지 않겠습니다. 하지만 전체 깃허브에서 샘플 제공에서 확인하실 수 있습니다.

Iteration on Person with new UI form

또한 추가 정보를 (조건부로) 표시하기 위해 _person.cshtml을 변경해야 합니다:

다음은 그 모습입니다(이번에는 두 사람 문서로):

Iteration on Person with new UI display

SQL 스키마를 마이그레이션할 필요가 없었습니다. 외래 키 관계를 만들 필요도 없었습니다. OR/M 매핑도 설정할 필요가 없었습니다. 몇 개의 새 필드를 추가하기만 하면 Couchbase가 이를 해당 JSON 문서로 변환해 주었습니다.

Iteration on Person with new JSON document

사람 문서 삭제하기

이미 '삭제' 링크를 추가했으므로 새 컨트롤러 액션을 만들기만 하면 됩니다...

...그리고 새로운 리포지토리 방법:

이 메서드는 Linq2Couchbase를 사용하지 않는다는 점에 유의하세요. IBucket의 Remove 메서드를 사용하고 있습니다. IBucketContext에서 사용할 수 있는 Remove가 있지만 키가 아닌 객체를 전달해야 합니다. 저는 IBucket을 사용하기로 선택했지만 본질적으로 더 나은 것은 없습니다.

마무리

이 블로그 시리즈를 읽어주셔서 감사합니다. 다음 ASP.NET 프로젝트에 Couchbase를 고려하거나 포함하는 데 도움이 되셨기를 바랍니다. 다음은 Couchbase 여정을 이어가는 데 도움이 되는 몇 가지 흥미로운 링크입니다:

  • 관심이 있으시다면 카우치베이스용 ASP.NET ID 공급자 (github). Couchbase에 신원 정보를 저장하려는 경우 이 방법을 사용할 수 있습니다. 이 블로그 게시물을 작성할 당시에는 초기 개발자 프리뷰 버전으로 소셜 로그인이 지원되지 않습니다.
  • Linq2Couchbase는 많은 기능과 문서가 있는 훌륭한 프로젝트이지만 아직 진행 중인 작업입니다. 관심이 있으시다면 다음 사이트를 방문해보세요. 깃허브의 Linq2Couchbase. Gitter에 대해 질문하고 이슈나 풀 리퀘스트를 자유롭게 제출하세요.
  • 지금 바로, 카우치베이스가 $500 상품을 증정합니다. 를 참조하세요. 이 ASP.NET 예제를 반복해 보고 싶으신가요? 좋아하는 IDE용 플러그인을 만들고 싶으신가요? ASP.NET ID 공급자에서 누락된 기능을 구현하고 싶으신가요? 참가만 해도 소정의 기념품을 받으실 수 있습니다.

결론

나는 이 예제의 전체 소스 코드는 깃허브에서 확인할 수 있습니다..

제가 무엇을 놓쳤나요? 오늘 ASP.NET으로 Couchbase를 사용해 보지 못한 이유는 무엇인가요? 의견을 남겨 주세요, 트위터에서 나를 핑하기를 참조하거나 이메일(matthew.groves AT couchbase DOT com)로 문의하세요. 여러분의 의견을 듣고 싶습니다.

작성자

게시자 카우치베이스 팀

의 선임 웹 관리자입니다. 웹 사이트 관리자로서 디자인, 구현, 콘텐츠 및 성능을 포함한 웹 사이트 자산에 대한 전반적인 책임을 맡고 있습니다.

댓글 남기기