카우치DB
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
카우치DB는 2005년 데미안 카츠가 시작한 오픈 소스 NoSQL 데이터베이스로, 아파치 라이선스 하에 제공된다. ACID 속성을 지원하며, 다중 버전 동시성 제어를 통해 높은 동시성의 읽기 및 쓰기를 처리한다. JSON 형식의 문서를 저장하고, 양방향 복제 및 오프라인 작동을 지원하여 모바일 환경에 적합하다. 뷰를 사용하여 데이터를 구조화하며, HTTP를 통해 CRUD 작업을 수행한다. CERN, 적십자, IBM, 유나이티드 항공 등 다양한 기관 및 기업에서 활용하며, Erlang, ICU, jQuery, OpenSSL, SpiderMonkey 등 여러 오픈 소스 구성 요소를 포함한다.
더 읽어볼만한 페이지
- 얼랭 - RabbitMQ
RabbitMQ는 분산 시스템에서 애플리케이션 간 비동기 메시지 전송을 지원하는 오픈 소스 메시지 브로커 시스템으로, AMQP 기반의 다양한 프로토콜과 프로그래밍 언어를 지원하며, 플러그인과 웹 기반 관리 인터페이스를 통해 기능을 확장하고 서버를 관리한다. - 얼랭으로 작성된 자유 소프트웨어 - 셰프 (소프트웨어)
셰프는 서버 애플리케이션과 유틸리티를 관리하고 구성하는 레시피를 사용자가 작성하도록 하는 형상 관리 소프트웨어이며, 클라이언트/서버 방식 또는 독립형 모드로 실행될 수 있고, 리눅스 및 마이크로소프트 윈도우를 지원하며, 코드형 인프라스트럭처 도구로도 사용된다. - 얼랭으로 작성된 자유 소프트웨어 - RabbitMQ
RabbitMQ는 분산 시스템에서 애플리케이션 간 비동기 메시지 전송을 지원하는 오픈 소스 메시지 브로커 시스템으로, AMQP 기반의 다양한 프로토콜과 프로그래밍 언어를 지원하며, 플러그인과 웹 기반 관리 인터페이스를 통해 기능을 확장하고 서버를 관리한다. - 문서 지향 데이터베이스 - 몽고DB
몽고DB는 2007년 개발되어 2009년 오픈 소스로 전환된 문서 지향적 NoSQL 데이터베이스로, 다양한 데이터 쿼리, 인덱싱, 고가용성, 수평적 확장 기능을 제공하며, 2018년부터 멀티 도큐먼트 ACID 트랜잭션을 지원하고 다양한 에디션과 프로그래밍 언어를 지원한다. - 문서 지향 데이터베이스 - BSON
BSON은 JSON과 유사한 이진 데이터 직렬화 형식으로, JSON보다 효율적인 저장 공간 활용과 빠른 검색 속도를 제공하며 다양한 데이터 유형을 지원하여 MongoDB의 주요 데이터 저장 및 전송 형식으로 사용된다.
카우치DB - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
이름 | 아파치 카우치DB |
![]() | |
![]() | |
개발자 | 아파치 소프트웨어 재단 |
라이선스 | 아파치 라이선스 2.0 |
웹사이트 | 아파치 카우치DB 공식 웹사이트 |
개발 | |
최초 출시 | 2005년 |
최신 버전 | 3.1.1 |
최신 버전 출시일 | 2020년 9월 18일 |
개발 상태 | 활발히 개발 중 |
프로그래밍 언어 | 얼랭, 자바스크립트, C, C++ |
운영 체제 | 크로스 플랫폼 |
기타 | |
장르 | 도큐먼트 지향 데이터베이스 |
관련 링크 | GitHub 저장소 |
저자 | Damien Katz, Jan Lehnardt, Naomi Slater, Christopher Lenz, J. Chris Anderson, Paul Davis, Adam Kocoloski, Jason Davies, Benoît Chesneau, Filipe Manana, Robert Newson |
2. 역사
CouchDB 프로젝트는 2005년 4월 IBM의 전 Lotus Notes 개발자였던 데미안 카츠에 의해 시작되었다.[3] 그는 거의 2년 동안 이 프로젝트를 자비로 운영했으며, GNU 일반 공중 사용 허가서에 따라 오픈 소스 프로젝트로 공개했다.
카우치DB의 주요 특징은 다음과 같다.
2008년 2월, 이 프로젝트는 아파치 인큐베이터 프로젝트가 되었으며, 아파치 라이선스 하에 제공되었다.[4] 몇 달 후, 최상위 프로젝트로 승격되었다.[5] 이로 인해 2010년 7월에 첫 번째 안정 버전이 출시되었다.[6]
2012년 초, 카츠는 Couchbase Server에 집중하기 위해 프로젝트를 떠났다.[7]
카츠가 떠난 후에도 아파치 CouchDB 프로젝트는 지속되었으며, 2012년 4월에 버전 1.2, 2013년 4월에 버전 1.3을 출시했다. 2013년 7월, CouchDB 커뮤니티는 BigCouch, 즉 Cloudant의 CouchDB 클러스터 버전의 코드베이스를 아파치 프로젝트에 병합했다.[8] BigCouch 클러스터링 프레임워크는 현재 아파치 CouchDB 릴리스에 포함되어 있다.[9]
네이티브 클러스터링은 버전 2.0.0에서 지원된다. 그리고 새로운 Mango 쿼리 서버는 JavaScript나 MapReduce 없이 CouchDB 쿼리를 수행할 수 있는 간단한 JSON 기반 방법을 제공한다. 또한 버전 2.0.0에서는 이전 내장 웹 인터페이스인 Futon을 대체하기 위해 새로운 내장 웹 인터페이스인 Fauxton이 도입되었다.[10]
3. 주요 특징
3. 1. ACID 시맨틱
카우치DB는 다중 버전 동시성 제어를 통해 ACID 시맨틱을 제공한다.[11] 이는 카우치DB가 높은 수준의 동시적인 읽기 및 쓰기를 충돌 없이 처리할 수 있도록 한다.
3. 2. 오프라인 지원
카우치DB는 오프라인 상태가 될 수 있는 기기(스마트폰 등)에 데이터를 복제할 수 있으며, 기기가 온라인 상태로 복귀했을 때 데이터 동기화를 처리한다.[11]
3. 3. 분산 아키텍처와 복제
카우치DB는 양방향 복제(또는 동기화)와 오프라인 작동을 염두에 두고 설계되었다.[11] 여러 복제본이 동일한 데이터의 자체 복사본을 가지고 이를 수정할 수 있으며, 나중에 해당 변경 사항을 동기화할 수 있다.
3. 4. 문서 저장
카우치DB는 데이터를 JSON 형태로 표현된 "문서"로 저장한다.[11] 각 문서는 하나 이상의 필드/값 쌍으로 구성되며, 필드 값은 문자열, 숫자, 날짜와 같이 간단한 값뿐만 아니라 정렬된 목록이나 연관 배열도 포함할 수 있다. 카우치DB 데이터베이스의 모든 문서는 고유한 ID를 가지며, 필수적인 문서 스키마는 없다.
3. 5. 최종 일관성
카우치DB는 가용성과 분할 내결함성을 모두 제공하기 위해 최종 일관성을 보장한다.[11]
3. 6. 맵/리듀스 뷰 및 인덱스
저장된 데이터는 뷰를 사용하여 구조화된다. 카우치DB에서 각 뷰는 map/reduce 작업의 Map 역할을 하는 자바스크립트 함수로 구성된다.[11] 이 함수는 문서를 가져와서 반환하는 단일 값으로 변환한다. 카우치DB는 뷰를 인덱싱하고 문서가 추가, 제거 또는 업데이트될 때 해당 인덱스를 최신 상태로 유지할 수 있다.
3. 7. HTTP API
모든 항목은 HTTP를 통해 접근 가능한 고유한 URI를 갖는다. 기본적인 CRUD (생성, 읽기, 업데이트, 삭제) 작업을 위해 HTTP의 POST, GET, PUT 및 DELETE HTTP 요청 메서드를 사용한다.[12]
카우치DB는 또한 웹을 통해 접근할 수 있는 내장된 관리 인터페이스인 Fauxton을 제공한다.[12]
4. 활용 사례
카우치DB의 복제 및 동기화 기능은 네트워크 연결이 보장되지 않는 환경이나 오프라인에서도 작동해야 하는 모바일 장치에서 사용하기에 적합하다.
카우치DB는 CRM, CMS 시스템과 같이 미리 정의된 쿼리가 실행되고 버전 관리가 중요한 애플리케이션에서 데이터를 관리하는 데 유용하다. 특히, 마스터-마스터 복제 기능은 다중 사이트 배포를 쉽게 할 수 있도록 지원한다.[13]
4. 1. 사용자
- CERN(유럽 입자 물리 연구소)은 거대 강입자 충돌기(LHC)의 데이터 관리 시스템의 데이터베이스로 사용한다.[14]
- 적십자는 재해 지역에서 케이스워크를 전자적으로 완료하기 위해 iDAT 애플리케이션을 사용하며, 이 애플리케이션에서 CouchDB는 멀티 노드 P2P 오프라인 우선 데이터베이스로 사용된다.[15]
- IBM 클라우드 서비스는 근본적으로 CouchDB를 기반으로 한다.[16]
- 유나이티드 항공은 3,000대 이상의 비행기에서 기내 엔터테인먼트 시스템에 사용한다.[17][18]
- 아마데우스 IT 그룹은 일부 백엔드 시스템에 사용한다.
- 크레디트 스위스는 상품 부서의 내부 사용을 위한 마켓플레이스 프레임워크에 사용한다.[19]
- 미보는 소셜 플랫폼에 사용되었다. 미보는 구글에 인수되었으며 대부분의 제품은 2012년 7월 12일에 종료되었다.[20]
- npm은 패키지 레지스트리의 복제 데이터베이스로 사용한다.[21]
- 소포스는 일부 백엔드 시스템에 사용한다.
- BBC는 동적 CMS 플랫폼에 사용한다.[22]
- 캐노니컬은 2009년에 동기화 서비스 "Ubuntu One"에 사용하기 시작했지만, 2011년 11월에 사용을 중단했다.[23][24]
- CANAL+는 CANAL+ 해외의 국제 주문형 플랫폼에 사용한다.
- 프로토그리드는 신속한 애플리케이션 개발 프레임워크의 스토리지 백엔드로 사용한다.[25]
5. 데이터 조작: 문서와 뷰
CouchDB는 JSON 문서 모음을 관리한다. 문서는 뷰를 통해 구성된다. 뷰는 집계 함수로 정의되며 필터는 MapReduce와 유사하게 병렬로 계산된다.
뷰는 일반적으로 데이터베이스에 저장되며 해당 인덱스는 지속적으로 업데이트된다. CouchDB는 외부 소켓 서버와 JSON 기반 프로토콜을 사용하는 뷰 시스템을 지원한다.[26] 결과적으로 다양한 언어(JavaScript, PHP, Ruby, Python, Erlang 등)로 뷰 서버가 개발되었다.
5. 1. HTTP를 통한 데이터 접근
애플리케이션은 HTTP를 통해 카우치DB와 상호 작용한다. cURL과 같은 명령줄 유틸리티를 사용하여 데이터베이스와 상호작용할 수 있다. 다음 표는 그 예시를 나타낸다.[1]동작 | 요청 | 응답 |
---|---|---|
서버 정보 접근 | curl http://127.0.0.1:5984/ | |
wiki라는 데이터베이스 생성 | curl -X PUT http://127.0.0.1:5984/wiki | {"ok": true} |
wiki라는 두 번째 데이터베이스 생성 시도 | curl -X PUT http://127.0.0.1:5984/wiki | |
wiki 데이터베이스에 대한 정보 검색 | curl http://127.0.0.1:5984/wiki | |
wiki 데이터베이스 삭제 | curl -X DELETE http://127.0.0.1:5984/wiki | {"ok": true} |
카우치DB에 문서 ID를 제공하도록 요청하여 문서 생성 | curl -X POST -H "Content-Type: application/json" --data { "text" : "Wikipedia on CouchDB", "rating": 5 } http://127.0.0.1:5984/wiki | |
데이터베이스 목록 가져오기 | curl http://127.0.0.1:5984/_all_dbs |
6. 오픈 소스 구성 요소
Erlang 공용 라이선스 (이전 릴리스)