의견.png

"카우치디비"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
6번째 줄: 6번째 줄:
  
 
# 모든 문서는 데이터와 연관된 인덱스 업데이트는 동기적으로 디스크에 쓴다.
 
# 모든 문서는 데이터와 연관된 인덱스 업데이트는 동기적으로 디스크에 쓴다.
 
 
# 이어서 업데이트 된 [[데이터베이스]] 헤더를 쓰고, 각 청크들이 모여서 4K가 채워지면 디스크에 동기적으로 쓴다.
 
# 이어서 업데이트 된 [[데이터베이스]] 헤더를 쓰고, 각 청크들이 모여서 4K가 채워지면 디스크에 동기적으로 쓴다.
  
14번째 줄: 13번째 줄:
 
* 보안과 유효성 검증 = 카우치디비(CouchDB)는 누가 문서를 읽고 [[수정]]할 수 있는지 [[제한]]할 수 있도록, 간단하면서도 확장 가능한 [[보안]] 모델을 가지고 있다.
 
* 보안과 유효성 검증 = 카우치디비(CouchDB)는 누가 문서를 읽고 [[수정]]할 수 있는지 [[제한]]할 수 있도록, 간단하면서도 확장 가능한 [[보안]] 모델을 가지고 있다.
 
#관리자 접근 = 관리자 계정의 경우 다른 관리자 계정을 만들거나 설계 문서를 수정할 수 있다.
 
#관리자 접근 = 관리자 계정의 경우 다른 관리자 계정을 만들거나 설계 문서를 수정할 수 있다.
 
 
#리더 접근 = 카우치디비(CouchDB) 문서에 [[리더]](Reader) 목록을 저장한다. 따로 정의된 게 없으면 누구나 읽을 수 있지만, 목록이 [[정의]]되어 있는 경우에는 [[지정된 사용자]]만 읽기가 가능하다. 뷰에서 접근할 때도 이 접근 제한이 동일하게 적용된다. 접근 권한이 없으면 뷰 조회 결과에서 빠지도록 되어 있다.
 
#리더 접근 = 카우치디비(CouchDB) 문서에 [[리더]](Reader) 목록을 저장한다. 따로 정의된 게 없으면 누구나 읽을 수 있지만, 목록이 [[정의]]되어 있는 경우에는 [[지정된 사용자]]만 읽기가 가능하다. 뷰에서 접근할 때도 이 접근 제한이 동일하게 적용된다. 접근 권한이 없으면 뷰 조회 결과에서 빠지도록 되어 있다.
 
 
#업데이트 접근 = 디스크에 문서를 쓰는 시점에 [[자바스크립트]] 함수를 이용하여 유혀성 검증이 이뤄진다. 유효성 검증을 통과하면 그대로 업데이트를 진행할 수 있는 반면, 그렇지 않은 경우에는 작업이 중단되고 [[클리이언트]]는 오류 응답을 받는다. [[자바스크립트]] 함수의 매개변수로 사용자 계정 정보와 업데이트 한 문서가 같이 넘어오므로, 이 값을 이용하여 권한을 결정한다. 가령, 최초 작성자만 문서를 수정할 수 있도록 하고 싶다면 간단히 문서의 author 필드와 현재 사용자 계정을 비교하도록 코드를 작성하면 된다.<ref>양봉열 〈[https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=221&dbnum=127630&mode=detail&type=techreport 데이터기술자료]〉 , 《kdata 한국데이터산업진흥원》 , </ref>
 
#업데이트 접근 = 디스크에 문서를 쓰는 시점에 [[자바스크립트]] 함수를 이용하여 유혀성 검증이 이뤄진다. 유효성 검증을 통과하면 그대로 업데이트를 진행할 수 있는 반면, 그렇지 않은 경우에는 작업이 중단되고 [[클리이언트]]는 오류 응답을 받는다. [[자바스크립트]] 함수의 매개변수로 사용자 계정 정보와 업데이트 한 문서가 같이 넘어오므로, 이 값을 이용하여 권한을 결정한다. 가령, 최초 작성자만 문서를 수정할 수 있도록 하고 싶다면 간단히 문서의 author 필드와 현재 사용자 계정을 비교하도록 코드를 작성하면 된다.<ref>양봉열 〈[https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=221&dbnum=127630&mode=detail&type=techreport 데이터기술자료]〉 , 《kdata 한국데이터산업진흥원》 , </ref>
  
 
== 주요 특징 ==
 
== 주요 특징 ==
 
*Document Storage = 문자열로 이뤄진 JSON과 같은 형태의 Document를 저장한다.
 
*Document Storage = 문자열로 이뤄진 JSON과 같은 형태의 Document를 저장한다.
 +
  
 
*ACID Semantics = 동시성 제어가 가능하며, 많은 사용자가 읽어나, 쓸 때 충돌없이 동작이 가능하다.
 
*ACID Semantics = 동시성 제어가 가능하며, 많은 사용자가 읽어나, 쓸 때 충돌없이 동작이 가능하다.
 +
  
 
*Map/Reduce Views and Indexes = [[자바스크립트]]를 이용해 Map/reduce작업을 진행하여 값을 구할 수 있으며, 인덱스와 뷰 등을 생성하여 관리할 수 있다.
 
*Map/Reduce Views and Indexes = [[자바스크립트]]를 이용해 Map/reduce작업을 진행하여 값을 구할 수 있으며, 인덱스와 뷰 등을 생성하여 관리할 수 있다.
 +
  
 
*Distributed Architecture with Replication = 양방향의 데이터 복제 허용하여, 복제된 DB에서 변경이 일어나더라도 다른 복제본과 데이터를 서로 동기화한다.
 
*Distributed Architecture with Replication = 양방향의 데이터 복제 허용하여, 복제된 DB에서 변경이 일어나더라도 다른 복제본과 데이터를 서로 동기화한다.
 +
  
 
*REST API = URI를 기준으로 POST, GET, PUT, DELETE를 이용하여 CRUD 처리가 가능하다.
 
*REST API = URI를 기준으로 POST, GET, PUT, DELETE를 이용하여 CRUD 처리가 가능하다.
 +
  
 
*Eventual Consistency = 분산형 컴퓨팅에서 사용되는 동시성 일관성 모델인 Eventual Consistency 보장
 
*Eventual Consistency = 분산형 컴퓨팅에서 사용되는 동시성 일관성 모델인 Eventual Consistency 보장
 +
  
 
*Built for Offline = 스마트폰과 같은 기기에도 데이터 복제가 허용되며, 온라인 상황에서 데이터 동기화 실시<ref>바라매 〈[https://m.blog.naver.com/PostView.nhn?blogId=windfalcon1&logNo=220401315081&proxyReferer=https%3A%2F%2Fwww.google.com%2F CouchDB]〉 , 《네이버블로그》 , 2015-06-25</ref>
 
*Built for Offline = 스마트폰과 같은 기기에도 데이터 복제가 허용되며, 온라인 상황에서 데이터 동기화 실시<ref>바라매 〈[https://m.blog.naver.com/PostView.nhn?blogId=windfalcon1&logNo=220401315081&proxyReferer=https%3A%2F%2Fwww.google.com%2F CouchDB]〉 , 《네이버블로그》 , 2015-06-25</ref>

2019년 6월 25일 (화) 16:07 판

카우치디비(CouchDB)는 Cluster Of Unreliable Commodity Hardware의 약어로 2005년에 개발이 시작되고, 2008년초에 아파치 인큐베이팅 프로젝트에 등록된 문서 기반 데이터베이스다. 이 프로젝트를 이끌고 있는 사람은 Damien Katz씨로 로터스에서 근무했고 현재는 IBM에서 일하고 있다. 카우치디비는 아파치 프로젝트 중에서 유일하게 얼랭을 언어로 사용하고 있다. 얼랭으로 구현되어 있지만 사용자들은 얼랭을 알 필요가 없다.[1]

기술 개요

  • 문서 저장소

문서는 카우치디비(CouchDB)에서 가장 기본적인 데이터 단위이며, 다수의 필드와 첨부 파일로 구성된다. 문서에는 데이터베이스 시스템이 관리하는데 필요한 메타데이터도 포함된다. 각 문서 필드는 유일한 이름을 가지고 있고, 텍스트, 숫자, 불린, 리스트 등 다양한 타입의 값을 사용할 수 있으며, 텍스트 크기나 필드 수에는 아무런 제약이 없다. CVS나 서브버전을 쓴다면 익숙하겠지만, 카우치디비(CouchDB)의 업데이트 모델은 낙관적인 모델이라 잠금을 사용하지 않는다. 만약 여러 명의 사용자가 동시에 같은 문서를 편집하는 상황이 발생하면, 나중에 저장하는 사람은 충돌이 발생했음을 알게 된다. 나중에 넣는 최신 버전을 기반으로 다시 써서 넣도록 되어있다.

  1. 모든 문서는 데이터와 연관된 인덱스 업데이트는 동기적으로 디스크에 쓴다.
  2. 이어서 업데이트 된 데이터베이스 헤더를 쓰고, 각 청크들이 모여서 4K가 채워지면 디스크에 동기적으로 쓴다.

카우치디비(CouchDB)는 비정형 데이터를 다루기 위해 자바스크립트 함수를 이용해 데이터 가공을 처리한다. 이 자바스크립트 함수를 뷰라고 하는데 MapReduce 모델로 되어있다. 뷰는 카우치디비(CouchDB) 문서를 인수로 받아 계산을 수행하면서 키-값 쌍을 추가한다. Reduce 함수가 정의되어 있다면 Map 함수에서 발생시킨 키-값 쌍을 받아서 키를 기준으로 데이터를 가공한다. 조회 결과는 Map 함수에서 넘겨준 키를 기준으로 정렬된다. 키 값이 null이면 문서 ID를 기준으로 정렬한다.

  • 보안과 유효성 검증 = 카우치디비(CouchDB)는 누가 문서를 읽고 수정할 수 있는지 제한할 수 있도록, 간단하면서도 확장 가능한 보안 모델을 가지고 있다.
  1. 관리자 접근 = 관리자 계정의 경우 다른 관리자 계정을 만들거나 설계 문서를 수정할 수 있다.
  2. 리더 접근 = 카우치디비(CouchDB) 문서에 리더(Reader) 목록을 저장한다. 따로 정의된 게 없으면 누구나 읽을 수 있지만, 목록이 정의되어 있는 경우에는 지정된 사용자만 읽기가 가능하다. 뷰에서 접근할 때도 이 접근 제한이 동일하게 적용된다. 접근 권한이 없으면 뷰 조회 결과에서 빠지도록 되어 있다.
  3. 업데이트 접근 = 디스크에 문서를 쓰는 시점에 자바스크립트 함수를 이용하여 유혀성 검증이 이뤄진다. 유효성 검증을 통과하면 그대로 업데이트를 진행할 수 있는 반면, 그렇지 않은 경우에는 작업이 중단되고 클리이언트는 오류 응답을 받는다. 자바스크립트 함수의 매개변수로 사용자 계정 정보와 업데이트 한 문서가 같이 넘어오므로, 이 값을 이용하여 권한을 결정한다. 가령, 최초 작성자만 문서를 수정할 수 있도록 하고 싶다면 간단히 문서의 author 필드와 현재 사용자 계정을 비교하도록 코드를 작성하면 된다.[2]

주요 특징

  • Document Storage = 문자열로 이뤄진 JSON과 같은 형태의 Document를 저장한다.


  • ACID Semantics = 동시성 제어가 가능하며, 많은 사용자가 읽어나, 쓸 때 충돌없이 동작이 가능하다.


  • Map/Reduce Views and Indexes = 자바스크립트를 이용해 Map/reduce작업을 진행하여 값을 구할 수 있으며, 인덱스와 뷰 등을 생성하여 관리할 수 있다.


  • Distributed Architecture with Replication = 양방향의 데이터 복제 허용하여, 복제된 DB에서 변경이 일어나더라도 다른 복제본과 데이터를 서로 동기화한다.


  • REST API = URI를 기준으로 POST, GET, PUT, DELETE를 이용하여 CRUD 처리가 가능하다.


  • Eventual Consistency = 분산형 컴퓨팅에서 사용되는 동시성 일관성 모델인 Eventual Consistency 보장


  • Built for Offline = 스마트폰과 같은 기기에도 데이터 복제가 허용되며, 온라인 상황에서 데이터 동기화 실시[3]










각주

  1. 류프리 〈카우치DB(Couch DB)〉 , 《네이버블로그》 , 2017-08-12
  2. 양봉열 〈데이터기술자료〉 , 《kdata 한국데이터산업진흥원》 ,
  3. 바라매 〈CouchDB〉 , 《네이버블로그》 , 2015-06-25


  의견.png 이 카우치디비 문서는 데이터에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.