{{위키데이터 속성 추적}}
{{번역 확장 필요|en|Couchbase Server}}
{{소프트웨어 정보
| name                   = 카우치베이스 서버
| logo                   = 
| screenshot             = Couchbase Server Screenshot.png
| developer              = [[카우치베이스]]
| released               = 2010년 8월
| latest release version = 7.1.3
| latest release date = {{시작 날짜|2022|11|18}}
| programming language   = [[C++]], [[얼랑]], [[C (프로그래밍 언어)|C]],<ref>{{웹 인용|author= Damien Katz|url=http://damienkatz.net/2013/01/the_unreasonable_effectiveness_of_c.html |title=The Unreasonable Effectiveness of C |date= January 8, 2013 |accessdate= September 30, 2016 }}</ref> [[Go (프로그래밍 언어)|Go]]
| genre                  = [[멀티 모델 데이터베이스]], [[키-값 데이터베이스|분산 키-값 데이터베이스]], [[도큐먼트 지향 데이터베이스]]
| license                = [[아파치 라이선스]], [[프리미엄 (사업 모형)|프리미엄]]
| website                = {{URL|couchbase.com}}
}}
'''카우치베이스 서버'''(Couchbase Server, 원래 명칭: 멤베이스/Membase)는 상호작용 애플리케이션에 최적화된 [[오픈 소스 소프트웨어|오픈 소스]] 분산([[셰어드 낫싱 아키텍처]]) [[멀티 모델]] [[NoSQL]] [[문서 지향 데이터베이스]] 소프트웨어 패키지이다. 유연한 JSON 모델로 고정 데이터베이스 스키마의 제약 없이 쉽게 애플리케이션을 수정할 수 있으며, submilisecond (1/1000 ms 이하)의 초고속 데이터 입출력 처리의 높은 성능을 보장한다. 또한, 간편한 스케일 아웃(scale-out)으로 다운타임 없이 시스템 구성 변경 및 확장을 지원한다.

== 주요 특징 ==
=== 유연한 데이터 모델 ===
==== JSON 지원 ====
카우치베이스 서버 2.0 은 기본적으로 JSON 문서를 지원한다. 각각의 JSON 문서는 다양한 구조를 가질 수 있고, 서로 다른 구조를 가진 여러 문서를 동일한 카우치베이스 데이터베이스 버킷에 저장할 수 있다. 또한 데이터베이스 내 다른 문서의 구조를 바꾸지 않고 언제든지 특정 문서 구조를 변경할 수 있어서 애플리케이션 기능 추가를 좀더 빨리 할 수 있다.

==== 인덱스와 쿼리 ====
카우치베이스 2.0은 JSON 문서에 기본 인덱스(Primary Index)와 보조 인덱스(Secondary Index)를 생성할 수 있다. 인덱스는 뷰(View)를 통해 생성하고 쿼리 할 수 있다. 인덱스 생성은 각 노드에서 저장된 데이터를 대상으로 인덱스를 생성하며 클러스터 내 모든 노드에 걸쳐 고르게 분산되어 있다. 쿼리는 카우치베이스 서버에서 문서를 검색하기에 적절한 클라이언트 라이브러리를 사용해서 실행한다. 쿼리는 특정 키 조회, 범위 검색, 합계 조회 기능 등을 포함한다. 심지어 재분배(rebalancing) 또는 장애조치(failover) 등과 같이 클러스터 서버의 구성 변경이 이루어지는 동안에도 쿼리 결과를 제공 한다. 이와 관련하여 아키텍처 또는 뷰(View) 개발 방법 등 보다 상세한 내용은 documentation를 찾아 보십시오.

==== 증분 맵 리듀스 ====
증분 맵 리듀스는 대용량 데이터 셋의 실시간 분석을 위한 강력한 기능들을 제공한다. 인덱스는 데이터 변경 부분에 대해서만 갱신되기 때문에 전체 데이터 셋의 배치 작업이 완료될 때까지 기다릴 필요가 없다. 뷰(View)에서 맵 리듀스(Map Reduce) 함수에 대해 자세히 알기를 원하면 map and reduce functions 문서를 참고하십시오.

=== 간단한 확장성 자동 ===
==== 자동 샤딩(Auto-sharding)을 통한 클러스터 확장 ====
카우치베이스 서버는 애플리케이션 요구사항이 변경되더라도 쉽게 자원을 유지하면서 버튼 클릭 한번으로 클러스터에 서버 추가(또는 삭제)를 할 수 있다. 애플리케이션은 서버를 추가하여 RAM과 I/O 용량을 늘려나가면서 수평적으로 확장하게 된다. 자동 샤딩(Auto-sharding)은 모든 서버에 균등하게 데이터를 분배하여 애플리케이션 변경 없이 해당 요청을 대상 서버로 직접 전달한다. 서버 추가 또는 삭제는 클러스터의 지속적인 데이터 가용성을 위해 데이터 재분배(rebalancing) 작업을 시작하게 한다. 이러한 관리 작업에 대해 좀더 배우길 원하시면 administrative tasks(관리 작업) 문서를 참조하십시오. 또한 카우치베이스 서버 관리자 웹 인터페이스 또는 카우치베이스 서버 관리 REST API를 통해 클러스터를 관리할 수 있다.

==== 클러스터 간 복제 ====
비즈니스 연속성을 보장하기 위한 재난복구 시스템 구축 시 서로 다른 데이터센터에 있는 여러 클러스터의 데이터를 복제 할 수 있다. 또는 최종 사용자에게 가까운 거리에서 데이터를 제공하여 더 나은 사용자 경험(UX, User Experience)을 제공하고자 할 때에도 XDCR을 활용할 수 있다. 클러스터 간 데이터 복제는 단방향 또는 양방향 읽기/쓰기를 모두 지원한다. XDCR 구성 및 자세한 설명은 cross data center replication (XDCR)문서를 읽어 보십시오.

=== 고성능 연속성 보장 ===
{{빈 문단}}
=== 24x365 무중단 ===
{{빈 문단}}

== 구조 ==
최상위 레벨에서 보면, 카우치베이스 클러스터의 각 노드는 동일하고 각각 ‘데이터 관리자’와 ‘클러스터 관리자’ 두 개의 주요 컴포넌트를 가지고 있다. 다른 중요한 아키텍처 요소는 점진적 인덱스와 문서 쿼리를 지원하는 강력한 맵 리듀스(Map Reduce) 엔진과 지리적으로 서로 다른 지역에 있는 데이터 센터 간 복제 기술이다.

애플리케이션은 Java, .NET, PHP, Ruby, Python, C , C++ 등 주요 프로그래밍 언어를 대부분 지원하는 카우치베이스 스마트 클라이언트 SDK를 사용해서 카우치베이스 서버 클러스터와 상호 작용을 한다. 이때 SDK는 클러스터 토폴로지를 인지하고 있어 각 요청을 적합한 서버로 직접 전달한다.

데이터는 지속적으로 클라이언트에 의해 해시되어 모든 서버 노드에 균일하게 분산 저장된다. 클러스터 맵은 각각의 노드에 어떤 데이터가 저장되어 있는지를 기록하고 언제 노드가 추가되고 다운되었는지 알고 있다.

만약 특정 서버가 고장났을 경우, 카우치베이스 서버는 해당 서버 장애를 감지하고 다른 서버에 있는 복제 문서(replica documents)를 활성화시킨 다음 새로운 클러스터 토폴로지를 반영하도록 클러스터 맵을 갱신한다. 이때 스마트 클라이언트는 서버로부터 자동으로 새로운 클러스터 맵을 가져와서 별도의 애플리케이션 변경이나 다운타임 없이 다른 활성화된 서버로 요청을 전달한다.

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* {{공식 웹사이트}}
* [https://twitter.com/couchbase/ Couchbase Twitter page]
* [http://blog.couchbase.com/ Couchbase Blog page]
* [http://www.couchbase.com/events Couchbase Events page]
* [http://www.couchbase.com/develop Couchbase Developer SDK's]
* [https://web.archive.org/web/20120820182153/http://www.couchbase.com/docs/ Couchbase Documentation]

[[분류:NoSQL]]
[[분류:크로스 플랫폼 소프트웨어]]
[[분류:자유 데이터베이스 관리 시스템]]
[[분류:문서 지향 데이터베이스]]