이 블로그 게시물은 시리즈의 3부입니다.:
코드를 작성할 준비가 되셨나요? 이 블로그 게시물에서는 새 ASP.NET MVC 프로젝트를 시작하고, NuGet을 사용하여 Couchbase SDK를 추가하고, Couchbase 사용을 시작할 수 있는 인프라를 준비해 보겠습니다.
방금 Visual Studio에서 파일-> 새로 만들기로 시작하고 ASP.NET 웹 애플리케이션을 선택한 다음 "MVC"를 선택했습니다. ASP.NET MVC에 어느 정도 익숙하다고 가정하겠지만, 이상한 점이 있으면 댓글을 남겨 주세요, 트위터에서 나를 핑하기를 참조하거나 저에게 이메일(matthew.groves AT couchbase DOT com)로 문의하세요.
Couchbase 클라이언트 라이브러리 설치
가장 먼저 해야 할 일은 Couchbase .NET 클라이언트를 추가하는 것입니다. NuGet UI에서 "참조"를 마우스 오른쪽 버튼으로 클릭하고 "관리 NuGet 패키지"를 클릭한 다음 "찾아보기"를 클릭한 다음 "CouchbaseNetClient"를 검색하여 이 작업을 수행할 수 있습니다. (원하는 경우 "Linq2Couchbase"를 대신 검색할 수도 있습니다. 이를 설치하면 CouchbaseNetClient도 설치되지만, 이후 블로그 게시물까지는 실제로 Linq2Couchbase를 사용하지 않을 것입니다.)
NuGet 명령줄을 선호하는 경우 패키지 관리자 콘솔을 열고 다음을 입력합니다. 설치-패키지 카우치베이스넷클라이언트
.
ASP.NET 앱이 Couchbase 클러스터와 통신하도록 하기
이제 Couchbase에 연결할 수 있도록 ASP.NET 앱을 설정해 보겠습니다. 가장 먼저 해야 할 일은 Couchbase 클러스터를 찾는 것입니다. 이 작업을 수행하기에 가장 좋은 위치는 애플리케이션이 시작될 때 Global.asax.cs입니다. 최소한 클러스터에서 하나의 노드를 지정하고, 그 노드를 클러스터 도우미
. 이 작업은 다음에서 한 번만 수행하면 됩니다. Application_Start
. 애플리케이션이 종료되면, 애플리케이션을 종료할 때 클러스터 도우미
를 사용하여 필요하지 않은 리소스를 정리하고 폐기할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public 클래스 Mvc애플리케이션 : 시스템.웹.HttpApplication { 보호됨 void Application_Start() { 지역등록.모든 영역 등록(); FilterConfig.등록글로벌필터(글로벌 필터.필터); RouteConfig.등록 경로(루트 테이블.경로); var 구성 = new 클라이언트 구성(); 구성.서버 = new 목록 { new Uri("http://localhost:8091") }; 구성.UseSsl = false; 클러스터 도우미.초기화(구성); } 보호됨 void Application_End() { 클러스터 도우미.닫기(); } } |
몇 가지 참고 사항:
- 이 코드는 로컬 컴퓨터(localhost)에서 Couchbase 노드를 실행하고 있다고 가정합니다. 그렇지 않은 경우 localhost로 대체하세요. 예를 들어 사무실의 다른 컴퓨터에서 Couchbase 노드를 실행하고 있으므로 다음과 같이 대체할 수 있습니다.
새로운 Uri("http://192.168.1.5")
. - 내 Couchbase 노드에서 실행 중인 인증서가 없기 때문에 UseSsl이 false로 설정되어 있습니다. 인터넷을 통해 Couchbase에 액세스하는 경우 SSL을 사용하여 데이터 트래픽이 투명하게 전송되지 않도록 할 수 있습니다.
IoC 컨테이너 설정
클러스터헬퍼가 초기화되면 이를 사용하여 버킷에 액세스할 수 있습니다.
앱에서 종속성을 연결할 수 있는 방법은 여러 가지가 있지만 저는 IoC 컨테이너를 사용하는 것을 좋아합니다. .NET에 사용할 수 있는 IoC 도구는 많지만 제가 가장 좋아하는 도구는 다음과 같습니다. 구조맵. StructureMap과 MVC를 통합하는 또 다른 NuGet 패키지가 있습니다. 이 패키지를 설치하면 MVC 컨트롤러 객체가 StructureMap을 통해 인스턴스화됩니다. NuGet(UI 또는 콘솔)을 사용하여 설치합니다, StructureMap.MVC5
.
프로젝트에 StructureMap과 다른 여러 파일을 추가합니다. 그 중 하나는 기본 규칙을 사용하도록 StructureMap을 설정하는 DefaultRegistry.cs입니다.
Couchbase에서 해야 할 일은 StructureMap이 IBucket의 인스턴스를 제공할 수 있도록 해당 레지스트리를 수정하는 것입니다. 그런 다음 IBucket을 사용하여 Couchbase 버킷과 상호 작용(문서 가져오기, 문서 추가, 문서 업데이트 등)합니다. 다음은 IBucket 등록을 설정하는 방법입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public 클래스 기본 레지스트리 : 레지스트리 { 1TP5지역 생성자 및 소멸자 public 기본 레지스트리() { 스캔( 스캔 => { 스캔.호출 어셈블리(); 스캔.기본 규칙(); 스캔.함께(new 컨트롤러 규칙()); }); // 이 다음 'For'는 Couchbase에 추가한 것입니다. For().싱글톤().사용("카우치베이스 버킷 받기", x => 클러스터 도우미.GetBucket("hello-couchbase", "비밀번호!")); } 1TP5트렌드지역 } |
이 예제에서는
- 저는 클러스터 도우미를 사용하여 특정 버킷을 가져오고 있습니다(저는 'hello-couchbase'라고 불렀지만 원하는 대로 불러도 됩니다). 이 버킷이 Couchbase에 존재하는지 확인합니다('default' 또는 예제 버킷 중 하나를 사용할 수 있습니다. 이 블로그 시리즈의 1부).
- 버킷에 비밀번호를 설정할 필요는 없지만, 비밀번호를 설정하는 것이 좋습니다.
- IBucket 인스턴스는 여러 인스턴스를 보유할 이유가 없기 때문에 싱글톤입니다.
컨트롤러에서 IBucket 사용
이것이 작동한다는 것을 보여주기 위해 HomeController와 같은 컨트롤러의 생성자에 IBucket을 추가해 보겠습니다. 이미 컨트롤러를 인스턴스화하도록 StructureMap이 설정되어 있고, IBucket을 인스턴스화하는 방법도 이미 알려드렸습니다. (장기적으로는 컨트롤러에서 직접 IBucket을 사용하고 싶지 않을 수도 있습니다. 이에 대해서는 향후 블로그 게시물에서 자세히 설명합니다.)
1 2 3 4 5 6 7 8 9 10 |
public 클래스 홈컨트롤러 : 컨트롤러 { 비공개 읽기 전용 IBucket _버킷; public 홈컨트롤러(IBucket 버킷) { _버킷 = 버킷; } } |
그런 다음, Couchbase 콘솔에서 직접 버킷에 문서를 추가합니다. 부여한 키를 기록해 두세요.
이제 HomeController에 액션을 추가합니다. 이것은 데모를 위한 일회용 액션입니다. 키를 기반으로 문서를 가져오고 응답에 문서 값을 쓰는 가장 간단한 작업입니다.
1 2 3 4 5 6 |
public 액션 결과 색인() { var doc = _버킷.Get("foo::123"); 반환 콘텐츠("이름: " + doc.가치.이름 + ", 주소: " + doc.가치.주소); } |
doc.Value
유형은 동적
를 사용하므로 사용하는 필드(제 경우에는 이름과 주소)가 버킷에 넣은 JSON 문서와 일치하는지 확인하세요. 브라우저에서 MVC 사이트를 실행하면 다음과 같은 화면이 표시됩니다:
축하합니다, Couchbase를 사용하는 ASP.NET 사이트를 성공적으로 작성하셨습니다. 그렇게 어렵지 않았나요?
결론
지금까지 ASP.NET MVC에서 Couchbase에 연결하고 사용하는 아주 기본적인 방법을 보여드렸습니다. 하지만 더 많은 것을 할 수 있습니다. 다음 블로그 게시물에서는 Linq2Couchbase를 사용하여 엔티티인 저장소를 구축하는 방법과 이 저장소를 사용하여 실제 기능을 갖춘 웹 사이트를 만드는 방법을 보여드리겠습니다. 언제나 그렇듯이 도움이 필요하면 댓글을 남겨 주세요, 트위터에서 나를 핑하기를 참조하거나 이메일(matthew.groves AT couchbase DOT com)로 문의하세요.
여기에 설명 된 모든 것을 설명했지만 종속성 주입 오류를 해결할 수 없습니다.
"이 객체에 대해 정의된 매개변수 없는 생성자가 없습니다.". StructureMap 쪽에서 수행해야 할 다른 작업이 있나요....?
이 블로그 게시물은 Couchbase Server 4.x를 염두에 두고 작성되었습니다. 버전 5 또는 6을 사용하는 경우 ClusterHelper.OpenBucket이 버킷을 반환하지 않을 수 있습니다. 인증은 버전 4와 5 사이에서 변경되었습니다.
이 예제에서는 "scan.WithDefaultConventions()"를 사용하므로 구조맵 규칙을 따르고 있는지 확인하는 것도 좋습니다.
마지막으로, 제가 이 글을 쓴 시점부터 구조맵은 Lamar를 위해 일몰되었습니다(https://jasperfx.github.io/lamar/), 가능하면 그쪽으로 전환하는 것이 좋습니다.