Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

couchbase

Couchbase를 Cluster 모드로 설치한다. 설치환경은 아래와 같다.

 Couchbase cluster

  • VirtualBox로 3개의 VM을 만들었다. 각 VM은 2G 이상의 메모리가 필요하다. 메모리가 너무 작으면 실행이 안된다.
  • CouchBase docker Image
  • CouchBase Enterprise 5.0

인스톨

3개의 VM에 도커로 설치했다.
# docker run -d --name db -v ~/couchbase:/opt/couchbase/var --net=host couchbase
couchbase:latest 즉 최신 couchbase 버전을 설치한다. -v 옵션을 이용해서 호스트 파일 시스템을 couchbase 데이터 파일 시스템으로 설정했다. 도커는 overlay filesystem, aufs와 같은 union 파일 시스템을 사용하는데, 이들 파일 시스템은 데이터가 쌓일 수록 성능이 떨어진다.

docker logs db명령으로 couchbase 컨테이너가 성공적으로 실행됐는지 확인해보자.
$ docker logs db
Starting Couchbase Server -- Web UI available at http://<ip>:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs

이제 클러스터를 만들어야 한다. Web wizard UI를 이용해서 간단하게 만들 수 있다. VM중 하나를 선택해서 8091포트로 접근하자. 나는 192.168.56.10 VM에 접근했다.

노드가 포함된 클러스터가 없기 때문에, 새로운 클러스터를 만들 건지 아니면 다른 클러스터에 참여할 건지를 물어본다.

"mycluster"라는 이름의 클러스터를 만들기로 했다.

192.168.56.11과 192.168.56.12는 Join Existing Cluster를 선택해서 "mycluster"의 멤버로 만들었다. Join Existing Cluster의 경우 처음 클러스터를 만든 호스트의 이름(혹은 IP)와 이때 사용한 어드민 아이디 패스워드를 입력하면 된다. Join With Default Configuration을 클릭하면 즉시 클러스터에 추가된다.

3 개의 노드로 구성된 클러스터를 확인 할 수 있다. "엄청나게 간단하게 클러스터를 구성 할 수 있다."

Bucket

카우치베이스 서버는 애플리케이션 데이터를 RAM이나 디스크에 저장한다. 이들 데이터들의 논리적인 집합을 bucket이라고 부른다. RDBMS의 데이터베이스와 같은 개념이라고 볼 수 있겠다. 카우치베이스 클러스터는 여러 개의 버켓을 가질 수 있으며, 각 버킷에 대해서 메모리를 할당하고, 복제본을 설정 할 수 있다.

카우치베이스는 3개의 버켓 타입을 제공한다. RDBMS의 데이터베이스 엔진과 비슷한 개념으로 볼 수 있겠다. 데이터의 특성에 맞는 데이터베이스 엔진을 선택해야 하는 것처럼, 데이터 특성에 맞는 버켓 타입을 선택해야 한다.

Memcached Buckets : in-memory 문서 저장소를 제공한다. 빈번하게 사용하는 데이터의 경우, 애플리케이션의 요청에 대한 응답을 빠르게 하기 위해서 사용 할 수 있다. Memcache는 오픈소스 in-memory NoSQL 데이터베이스인 그 memcahce가 맞다. Memcach가 가지는 고유의 제약을 가지고 있다.

Memcached bucket는 RAM에만 데이터가 존재한다. RAM을 초과해서 데이터를 적재할 경우, 아이템이 메모리에서 제거된다. 이렇게 제거된 데이터는 카우치베이스 서버에서 가져올 수 없다.

Couchbase Buckets: DCP(Database Change Protocol)을 이용해서 자동복제와 고가용성 구성을 만들 수 있다. 데이터는 XDCR(Cross Datacenter Replication)을 통해서 여러 서버에 동적으로 배치된다.

RAM을 초과해서 아이템이 입력되면, 메모리에서 지워지는 아이템이 발생한다. 하지만 디스크에서는 제거되지 않기 때문에, 나중에 데이터가 필요할 경우 디스크에서 메모리로 다시 로드 할 수 있다. 아이템이 삭제될 때 Key-Value만 제거 할지, Key-Value와 함께 메타데이터를 포함한 모든 데이터를 제거할지를 선택 할 수 있다. 전자는 메모리를 희생하고 성능을 높이고 싶을 때, 후자는 성능을 희생하고 메모리를 절약하고 싶을 때 사용한다.

Scale-Out

많은 분산 소프트웨어들이 주키퍼(zookeeper)를 이용해서 스케일을 관리한다.특히 오픈소스 소프트웨어들이 주키퍼를 사용하는 경향이 많은데, 횡적확장을 통한 연동을 지향하는 특징 때문인 것 같다. 주키퍼는 훌륭한 소프트웨어이지만 만만찮은 관리/운용/학습 비용이 들어간다.

카우치베이스는 외부 소프트웨어의 도움없이 스케일을 관리한다. 단지 웹 UI에서 클러스터 노드의 IP, 아이디/패스워드만 입력하면 된다. 대단히 편리하다.

Query

N1QL

카우치베이스는 N1QL 이라는 질의어를 사용한다. SQL과 비슷하기 때문에, JDBD/ODBC 드라이버를 이용해서 질의를 만들 수 있다. 익숙한 SQL을 사용할 수 있다는 것은 큰 장점이다. 개발자는 N1QL을 이용해서 단일 쿼리로 데이터를 정렬, 필터링, 변환, 그룹, Join 할 수 있다.

Insert

테스트용 데이터를 입력해 보자.