CouchbaseMock으로 Couchbase 클러스터 모킹하기

면책 조항: 항상 실제 카우치베이스 클러스터와 비교하여 애플리케이션을 테스트하여 적절한 기능을 보장합니다.

CouchbaseMock 소개

잘 알려지지 않은 프로젝트인 카우치베이스 모의 는 꽤 오래 전부터 존재해 왔습니다. 아주 오래 전, 카우치베이스의 이름이 아직 Membase클라이언트가 제대로 작동하는지 테스트하기 위해 서버 역할을 할 간단한 애플리케이션이 필요했습니다.

각 SDK 릴리스 전에 실제 클러스터에 대해 광범위한 테스트 모음을 실행하지만, CouchBaseMock은 오늘날에도 여전히 이러한 용도로 사용됩니다. 연기 테스트 (또는 건전성 테스트)를 수행한 후 각 커밋을 Git 리포지토리에 병합합니다.

Java의 보편성과 모의 버전의 작은 설치 공간(약 2.5MB 다운로드)으로 인해 전체 Couchbase 클러스터를 설치할 수 없는 리소스 제약이 있는 시스템에서 클러스터 역할을 하기에 이상적입니다. 이 모의 버전에는 장애 조치, 재조정 및 복제와 같은 다양한 작업을 제어되고 결정적인 방식으로 시뮬레이션하기 위한 몇 가지 특수 명령이 추가로 포함되어 있습니다.

지난 몇 주 동안 저는 다음과 같은 기능을 추가하기 위해 노력해 왔습니다. 보기 에 대한 지원! - 이제 모크가 디자인 문서를 이해하고 데이터베이스의 모든 문서에 대해 사용자 정의 맵 또는 축소 기능을 실행할 수 있습니다. C SDK(libcouchbase) 내에서 더 높은 수준의 기능을 통합하기 위해 뷰 지원이 필요했으며, 자세한 내용은 다른 게시물에 게시할 예정입니다.

CouchbaseMock의 맵리듀스 뷰

모의 모델은 Couchbase가 제공하는 모든 보기 관련 API에 올바르게 응답합니다. 원하는 SDK를 사용할 수 있습니다(또는 curl)를 사용하여 디자인 문서를 만들고 뷰를 쿼리하기 위한 적절한 REST API 호출을 실행합니다.

Java 모의 테스트에서 뷰 구현은 다음을 임베드하여 수행했습니다. Mozilla Rhino (자바로 작성된 자바스크립트 인터프리터)를 모의 테스트에 사용하세요. JavaScript 지도 그리고 감소 함수는 Rhino에서 구문 분석되며, 나머지 모의 코드에서는 Java 객체로 표현됩니다.

특히 항목 정렬의 경우 Couchbase의 정렬이 "전통적인" JavaScript 정렬과 약간 다르게 작동하기 때문에 뷰의 기능을 아주 세부적인 수준까지 반영하기 위해 각별한 주의를 기울였습니다.

실제 JSON 출력은 터미널에서 쉽게 읽을 수 있도록 각 행 뒤에 줄 바꿈이 삽입되도록 형식도 지정했습니다.

마지막으로, 실제 맥주 샘플 데이터베이스도 모의 버전과 함께 번들로 제공됩니다. XZ 압축을 사용하면 데이터베이스가 실제 다운로드에서 차지하는 공간이 매우 적습니다.

CouchbaseMock의 관리 REST API

또한 모의에서는 버킷을 즉시 생성하고 삭제할 수 있습니다. Couchbase가 이해하는 것과 동일한 REST API를 사용하여 이 작업을 수행할 수 있습니다. 현재는 기본적인 버킷 생성, 삭제, 나열 기능만 지원되지만 향후 더 많은 기능이 구현될 수 있습니다.

카우치베이스 모의 실행

CouchbaseMock을 사용하려면 먼저 소스 리포지토리에서 다운로드하세요:

빌드가 완료되면 CouchbaseMock-1.0.0-.jar 에서 대상 디렉토리에 저장합니다. 는 git에서 축약된 sha1입니다.

마지막으로, 사용법은 실행하는 것만큼이나 간단합니다:

그리고 -S 옵션을 사용하면 맥주 샘플 버킷을 사용합니다. 기본적으로 모의는 포트 8091로 설정할 수 있지만 명령줄 옵션을 사용하여 사용자 지정할 수 있습니다.

모의 서비스가 실행되면 원하는 SDK에서 키-값 연산 수행, 보기 정의/조회, 버킷 생성/소멸 등 모의 서비스와 상호작용할 수 있습니다.

최종 참고 사항

CouchbaseMock은 Couchbase 클러스터와 "같은" 것을 스핀업할 수 있는 편리한 방법입니다. 대부분의 애플리케이션과 SDK에서 드롭인 방식으로 작동하며, 실제로 Mock 자체의 뷰 테스트는 Java SDK에서 복사/붙여넣기 방식으로 이루어집니다.

모의 테스트는 내부 프로젝트이며 주요 목적은 SDK 테스트입니다. 따라서 모의는 Couchbase를 사용하여 애플리케이션을 테스트하는 공식적인 방법이 아니며, 모의의 기능 및 인터페이스와 관련하여 안정성을 보장하지 않으며 필요에 따라 추가되거나 제거될 수 있습니다.

위와 같이 모의 테스트는 전체 클러스터를 설치하지 않고도 카우치베이스(또는 SDK!)를 사용하여 애플리케이션의 기본 기능을 테스트할 수 있는 편리한 방법입니다.

또한 애플리케이션 자체가 Java로 작성된 경우 모의 테스트의 소스 코드 내부에서 테스트에 포함할 수 있는 방법을 찾아볼 수도 있습니다.

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

작성자

게시자 마크 넌버그, 소프트웨어 엔지니어, 카우치베이스

마크 넌버그는 카우치베이스에서 일하는 소프트웨어 엔지니어입니다. 그는 C 클라이언트 라이브러리(libcouchbase)와 Python 클라이언트를 유지 관리합니다. 또한 이전 회사에서 사용하던 Perl 클라이언트도 개발했는데, 이것이 Couchbase에서 일하게 된 계기가 되었습니다. Couchbase에 입사하기 전에는 전자상거래 분석 회사에서 분산형 고성능 라우팅 시스템을 개발했습니다. Mark는 예루살렘 히브리 대학교에서 언어학을 전공했습니다.

댓글 하나

  1. 이 모의 서버에 N1QL 기능을 포함할 계획이 있나요? 저희 앱에 N1QL을 많이 사용하고 있으며 이를 위해 모의 서버를 사용하고 싶습니다.

  2. 안녕하세요, 오늘 2017 년 현재 카우치베이스와 접촉하는 코드를 단위 테스트하는 가장 좋은 방법은 카우치베이스 모의입니까? (게시물은 2015 년부터 내가 놓친 것이 없는지 확인하고 싶습니다).

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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