문서 데이터베이스인 카우치베이스는 다양한 유형의 문서를 하나의 버킷(버킷은 데이터베이스에 해당)에 저장할 수 있는 뛰어난 유연성을 제공합니다. 예를 들어 의류 소매업체에서 모든 옷과 모든 신발을 구분하고 싶을 때와 같이 비슷한 유형의 문서를 함께 참조해야 하는 경우가 자주 있습니다. 지금은 키 접두사나 유형 필드를 사용하여 Couchbase에서 이 작업을 수행할 수 있지만, 애플리케이션이 더 번거로워집니다.
데이터베이스 계층에서 유사한 항목을 컨테이너화하면 애플리케이션이 더 단순해질 뿐만 아니라 가장 낮은 수준에서 데이터 처리의 효율성을 높일 수 있습니다. 또한, 버킷 아래에 추가적인 수준의 봉쇄가 있으면 버킷보다 더 세밀한 단위로 액세스를 제어할 수 있습니다.
이로써 버킷을 사용할 때보다 더 확장 가능한 멀티테넌트 플랫폼을 카우치베이스에서 구축할 수 있는 길이 열렸습니다. 이러한 목표를 가지고 '컬렉션'이라는 기능을 개발했습니다.
카우치베이스 서버 6.5에서는 컬렉션의 개발자 프리뷰를 사용할 수 있습니다.
이 블로그에서는 컬렉션이 무엇인지, 컬렉션이 지원하는 사용 사례는 무엇인지, 컬렉션이 제공하는 기능은 무엇인지 개략적으로 설명하겠습니다. 샘플 코드는 다음과 같습니다. Johan의 블로그 게시물.
참고: 개발자 미리 보기 기능은 프로덕션 환경에서는 사용할 수 없습니다. 개발자 미리 보기에 관한 자세한 가이드라인은 여기에서 확인하세요: 개발자 프리뷰 문서.
컬렉션이란 무엇인가요?
이는 관계형 데이터베이스에서 '테이블'이 하는 것처럼 유사한 데이터를 그룹화하는 Couchbase 버킷 내부의 논리적 데이터 컨테이너입니다.
관계형 데이터베이스의 '스키마'와 유사한 '범위'라는 데이터 구성에 사용할 수 있는 또 다른 수준도 있습니다. 각 범위 내의 네임스페이스는 다른 범위와 독립적이므로 서로 다른 범위에서 동일한 컬렉션 이름을 가질 수 있습니다. 마찬가지로 문서 키는 컬렉션 내에서만 고유해야 하므로 동일한 키를 가진 문서가 다른 컬렉션에 존재할 수 있습니다.
이 새로운 도입으로 이제 클러스터, 버킷, 범위 및 컬렉션 수준에서 역할 기반 액세스 제어를 적용할 수 있습니다.
참고: 개발자 프리뷰에는 범위 및 컬렉션 수준 RBAC이 없지만, 프로덕션 버전에서는 Couchbase 7.0에서 사용할 수 있습니다.
원활한 업그레이드와 이전 버전과의 호환성을 위해 모든 버킷에는 '_기본' 범위가 있고, '_기본' 범위에는 '_기본' 컬렉션이 있습니다. 기본 컬렉션은 버킷에 대한 직접 참조가 자동으로 _기본 컬렉션에 매핑되므로 이전 버전과의 호환성을 제공합니다. 또한 업그레이드 시 모든 기존 데이터는 자동으로 _default 컬렉션으로 이동합니다.
기본 컬렉션은 하위 호환성 메커니즘으로 제공되지만, 새 애플리케이션은 명명된 컬렉션을 사용하여 작성하는 것이 좋습니다.

컬렉션으로 간소화된 데이터 구성
앞서 언급했듯이 새로운 논리적 그룹화를 통해 관계형 데이터베이스의 테이블과 유사하게 데이터를 더 잘 정리할 수 있습니다.
다음과 같은 혜택이 있습니다:
- 해당 관계형 테이블에 대한 컬렉션을 생성하여 관계형 스키마를 Couchbase에 더 쉽게 매핑할 수 있습니다.
- 인덱스 구축, 복제 설정, 쿼리, 백업/복원 등 다양한 목적을 위해 유사한 문서를 하나의 단위로 참조할 수 있습니다.
- 인덱서가 전체 버킷에 대한 문서를 수신하고 필터링하는 대신 데이터 서비스가 컬렉션에 대한 문서만 전송하면 되므로 더욱 확장 가능한 인덱싱이 가능합니다.
- N1QL 작성 용이성 - 문서 유형에 대한 속성을 사용하여 컬렉션을 동적으로 구성할 필요 없이 문에서 직접 테이블로 컬렉션에 액세스할 수 있습니다.
예를 들어 컬렉션이 있는 쿼리와 없는 쿼리를 비교합니다:
SELECT * FROM products WHERE type = 'clothes';
vs.
SELECT * FROM products.clothes;
컬렉션을 사용하여 멀티테넌트 애플리케이션 실행
멀티테넌트 애플리케이션은 테넌트 간에 다양한 수준의 격리 및 기본 인프라의 다양한 수준의 리소스 공유를 필요로 합니다.
현재 Couchbase 내에서:
- 별도의 클러스터를 배포하여 완벽한 물리적, 보안적, 논리적 격리를 달성하지만 리소스 공유를 최소화합니다.
- 클러스터당 여러 개의 버킷을 사용하여 보안 및 논리적 격리를 달성할 수 있지만 버킷당 오버헤드 측면에서 자체적인 한계가 있습니다.
- 단일 버킷에 여러 테넌트를 배치하면 리소스를 가장 잘 공유할 수 있지만 애플리케이션이 보안 또는 논리적 격리를 처리해야 합니다.
컬렉션을 도입(및 범위로 그룹화)함으로써 Couchbase는 버킷 내에서 보다 세분화된 수준에서 보안 및 논리적 격리를 제공할 수 있습니다. 하나의 버킷에 수천 개의 그룹을 만들 수 있으므로 단일 클러스터에서 수천 개의 테넌트를 호스팅할 수 있습니다. 반면, 단일 클러스터에서 호스팅할 수 있는 버킷의 수는 제한되어 있으며(적절한 크기 조정으로 Couchbase Server 6.5에서는 이 제한이 30개로 늘어남), 멀티테넌트 애플리케이션의 요구에는 충분하지 않은 경우가 많습니다.
컬렉션으로 마이크로서비스 통합하기
최신 애플리케이션은 마이크로서비스의 집합으로 작성되는 경우가 많으며, 하나의 애플리케이션은 100개의 마이크로서비스로 구성될 수 있습니다. 마이크로서비스별로 버킷이나 클러스터를 사용하는 것도 여전히 옵션이지만, 컬렉션(및 범위)은 더 많은 마이크로서비스를 단일 Couchbase 클러스터로 통합할 수 있는 확장 가능한 대안을 제공합니다.
멀티테넌시와 마이크로서비스 기반 아키텍처는 상호 배타적이지 않습니다. 많은 멀티테넌트 애플리케이션은 마이크로서비스 아키텍처를 사용하여 작성됩니다. 버킷, 범위 및 컬렉션을 통해 이제 다양한 수준의 봉쇄를 사용할 수 있으며 테넌트, 마이크로서비스 및 테이블을 매핑하는 방법을 유연하게 사용할 수 있습니다.
개발자 프리뷰의 기능 사용 가능성
Couchbase 6.5 클러스터에서 개발자 미리 보기 스위치를 켜면(개발자 프리뷰 문서)를 클릭하면 컬렉션 및 범위를 사용할 수 있습니다. DP 기능의 주요 범위 및 컬렉션 기능은 다음과 같습니다:
- 임시 및 카우치베이스 버킷 모두에서 지원
- 모든 Couchbase SDK는 DDL 및 CRUD 작업을 지원합니다.
- SDK, REST API 또는 couchbase-cli에서 생성하여 놓을 수 있습니다.
- 컬렉션에 대해 모든 CRUD 작업을 수행할 수 있습니다(다음을 포함). 하위 문서).
- 각 컬렉션의 아이템 수는 cbstats에서 확인할 수 있습니다.
- DCP 프로토콜은 단일 버킷을 스트리밍하는 기존 기능에 더해 단일 범위 또는 단일 컬렉션을 스트리밍할 수 있도록 개선되었습니다.
참고: DP는 주로 키-값 액세스를 위한 것입니다. RBAC는 나중에 제공될 예정입니다. XDCR, 인덱싱 및 N1QL, 이벤트, 애널리틱스 및 모바일과의 통합은 나중에 미리 볼 수 있습니다.
다음 단계
다음은 새로운 개발자 프리뷰 기능을 사용해 볼 수 있는 몇 가지 리소스입니다:
다운로드
문서
블로그
이것이 Couchbase Mobile과 어떻게 통합되나요? 특히 특정 범위 또는 컬렉션 내의 문서를 동기화하도록 동기화 게이트웨이에 지시하는 간단한 방법이 있나요?
현재 카우치베이스 모바일은 기본 컬렉션과만 통합됩니다. 향후 릴리스에서는 동기화 게이트웨이에 범위 또는 컬렉션 내의 문서를 동기화하도록 지시하는 방법이 제공될 예정이지만 아직은 아닙니다.