SlideShare una empresa de Scribd logo
1 de 62
Ultra Durability NoSQL, CouchDB
발표자 및 소속 회사
2
• 발표자, 정명훈
• 소속: Cloudant Korea에서 CouchDB 기반 DBaaS(PaaS) 컨설팅
• 경력: Java 개발, 미들웨어(Application Server), 가상화, 데이터베이스 및 CDC
• 관심: 오픈소스와 클라우드
• 소속 회사, Cloudant
• CouchDB 기반으로 클라우드 서비스로 제공(Database As A Service)
• 유럽 입자물리 연구소(CERN)의 Higgs 입자 연구에 참여했던 MIT 과학자 세 명이
창립 (2008년 설립)
• 약 30,000개 이상의 회사/사용자에게 서비스 제공
CouchDB의 역사
3
• 2005년 Damien Katz(IBM, Lotus 개발자)에 의해 시작
Internet에 적합한 Database 목표
 Cluster Of Unreliable Commodity Hardware의 약자
• 2006년 Erlang, JSON, JavaScript 기반으로 전환
• 2008년 Apache Incubator 프로젝트
• 2010년 첫 stable version 출시
• 2013년 Cloudant에 의해
BigCouch(Clustering) 프로젝트와 통합
• BigCouch 통합 버전 출시 예정…
 CouchDB 2.0
Damien Katz
CouchDB의 특징
4
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control (MVCC)
• Eventual Consistency between Distributed Nodes
• Erlang OTP
CAP 이론 – CouchDB, A-P 특성 만족
5
CAP 이론 – CouchDB, A-P 특성 만족
6
No Lock  “Optimistic Lock”
Multi Version Concurrency
Control  Append-Only DB
Eventual Consistency
CouchDB 기본 상식
7
• B-Tree에 데이터와 Index 저장
• CouchDB의 용어
• Database  RDB의 Table
• Document  RDB Table의 Record/Row
• CouchDB는 Stand-alone, BigCouch/Cloudant는 Clustering
• Lock이 없고 복수 Client의 동시 액세스 허용 (Optimistic Lock)
• 하나의 Document를 복수의 Version으로 관리
CouchDB의 특징
8
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency
• Erlang OTP
CouchDB의 특징
9
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency
• Erlang OTP
JSON based Ultra Durable Data Store
JSON Document Store
10
• JSON = JavaScript Objection Notation format
• Boolean, Number, String, Array, Dictionary 등 다양한 데이터 타입
• 특별한 스키마 제약이 없고 다중 문서 등과 같은 자유로운 형식 (Schemaless)
• 비정형 데이터: 텍스트+바이너리 혼합 데이터, 프로파일 데이터 등
• ID는 특별히 지정하지 않으면 자동으로 Unique하게 생성
저장
문서 별, 고유 ID와 Version 번호 자동 생성 됨
날짜 Type
배열
긴 문자열
바이너리 데이터(attachment) 저장
11
• 바이너리 데이터(파일, 사진 등)를 Attachment로 저장
• BASE64 형식으로 주고 받고 실제로는 바이너리 형식 저장
저장
ACID Compliant Data Store
12
• ACID(Atomic Consistent Isolated Durable) 특성 준수
• “Crash-Only” 디자인: Commit된 데이터를 절대로 덮어 쓰지 않고
Consistent한 데이터 보장  특별한 Shutdown 과정 불필요
 Ultra Durable
• DB Read 작업에서 전혀 Lock을 잡지 않고, 다른 Client의 Read/Write
작업(동일 문서라도)을 대기할 필요 없음  대규모 서비스에 적합
• CouchDB의 Read 작업은 MVCC(Multi-Version Concurrency Control)
모델 기반으로 Consistent 한 데이터 snapshot 사용
CouchDB의 특징
13
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency
• Erlang OTP
Secondary Index
14
• _id를 기준으로 한 Primary Unique Index를 보완
• _id 이외의 다른 필드 또는 필드들의 조합을 대상으로 함
• Key 값은 중복 허용
• 예: author, subject, [author, subject]
• 생성 방법
• 일반 Design Document
• Map/Reduce를 사용 (Map의 emit 함수)
데이터
Map 함수
인덱스
조회 결과
View – Secondary Index의 결과
15
• Map의 emit 함수 실행 결과가 실시간 처리 되어 View 형태로 저장
(원본 DB의 별도)
• 원본 데이터 변경 시 전체 재 계산이 아닌 변경분만 재 계산 (Incremental
Map/Reduce)
• 클러스터(Cloudant, BigCouch)에서는 여러 노드에 분산되어 처리 및
저장 됨
• 동일 데이터(Database)에 대한 복수 View 생성 가능
• Reduce를 통해 데이터 통계(RDB의 sum & group by에 해당) 생성
(사용 여부는 선택적)
Map/Reduce
16
• 주로 JavaScript로 작성 되며, 다른 언어도 지원 가능
• 일반적인 Map/Reduce와 마찬가지로…
• Map 함수에서 key, value 쌍을 생성
• Reduce 함수에서 데이터(key, value 쌍의 배열)에 대한 계산, 통계 작업
• 병렬 처리 – 클러스터에서는 여러 노드에서 분산 처리 및 결과 취합
Map/Reduce
17
• CouchDB의 Map/Reduce는…
• Real time: DB의 데이터에 변경이 생기면 바로 실시간 재 계산 (View)
• Incremental: 데이터 변경 시, 전체를 재 계산 하지 않고 필요한 부분만 재 계산
하는 방법 (http://eagain.net/articles/incremental-mapreduce/)
• Chained Map/Reduce
• 복수의 Map/Reduce 작업을 이어서 하는 것 (Real time, Incremental 특성 유지)
• Map/Reduce 결과를 2차 DB로 동기화하여 거기서 다시 Map/Reduce를 실행
• Cloudant에서 제공
• http://examples.cloudant.com/sales/_design/sales/index.html
CouchDB의 특징
18
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency
• Erlang OTP
Strong Focus on Replication
19
• Couch 계열 DB의 특징
• CouchDB 호환 DB(Cloudant, TouchDB, PouchDB) 간 상호 동기화 지원
• 모든 Document(레코드)에 Revision ID(MVCC)가 있어 변경 사항을 쉽게 추출
 변경 데이터만 증분(incremental) 복제/동기화
 Fault Tolerant (서버/DB Crash 시에도, 데이터 동기화 보장)
• 단방향, 양방향, N:N Multi-Master, Server/Cloud to Mobile 동기화 가능
• 일회성 복제 및 동기화, 지속적인(Continuous), 필터(원하는 패턴) 동기화
• Use Cases
• 글로벌 거점 간 데이터 동기화(Multi-Master 복제)
• 모바일, 사물인터넷(Internet Of Things)
데이터 수집
• 각종 기기(Device) 또는 단말(Edge)에서 수집된 정보를
메인 DB로 복제
Replication 동작 과정
20
REV-10 REV-09 REV-08 REV-07 REV-05 REV-04…
REV-11
REV-14
REV-16
• 초기 Replication 설정
• 동작 중인 Replication 모니터링
BARFOO
REV-01
REV-02
REV-03
Pull 방식
Replication 소스 및
타겟 지정
Replication 상태
정보
Push 방식
Pull 방식
• 동기화를 담당할 Job을 소스, 타겟
원하는 위치에서 운영 가능 (소스-
Push or 타겟-Pull)
• DB 자체의 고유 기능(Document의
Revision ID 관리)을 바탕으로
정확하고 안정적인 동기화 가능
• 별도의 동기화 서버나 프로세스
불필요 (DB 자체의 기본 기능)
• 상호 양방향 동기화 지원
Changes Event를 통한 메시징
21
• Replication 및 Revision History(MVCC)에 기반한 변경 이벤트 수신
• Changes Event를 수신하고 있는 각 Client 별로 전달할 메시지(DB Insert/Update/Delete) 관리
• Client가 다운되어 있는 경우에도 재 기동 시, 해당 시간 동안 발생한 메시지 수신 가능 (무시도 가능)
• CouchDB Replication 프로토콜 기반
CouchDB
Client Client
DB Changes History
Changes
Event 수신
Client
Down Client
Changes
Event 수신
REV-10 REV-09 REV-08 REV-07 REV-05 REV-04… REV-01REV-02REV-03
REV-03REV-02REV-01 REV-04 REV-05 REV-06 REV-05 REV-04 REV-02REV-03 …
REV-01REV-02REV-03
REV-4
REV-6 REV-7
Client 별로 다음에 수신할
Changes 번호 관리
다음 전송할
데이터
Replication 활용 예제: Quilter
22
• Replication과 Changes Feed를 활용한 로컬 – 원격 클라우드/서버 파일
동기화 프로젝트
• 관련 문서: http://cloudantkug.wordpress.com/2014/02/19/quilter-
cloudant%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-
%EB%A1%9C%EC%BB%AC%ED%81%B4%EB%9D%BC%EC%9A%B0%EB
%93%9C-%ED%8C%8C%EC%9D%BC-
%EB%8F%99%EA%B8%B0%ED%99%94/
• 소스 Repository: https://github.com/garbados/quilter
• Node.js 기반
• 서버에 올린 사진 파일을 CouchApp을 통해 Publishing 가능
• https://github.com/garbados/egg_chair
CouchDB의 특징
23
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency
• Erlang OTP
RESTful API
24
• 예제:
• 문서
• http://docs.couchdb.org/en/latest/intro/api.html
• http://docs.couchdb.org/en/latest/api/index.html
Web Friendly
• CouchDB 자체가 HTTP 웹서버
• REST 기반 API를 통해 웹 상에서 쉽게 액세스 가능
• Java, JavaScript, Ruby, PHP 등에서 쉽게 호출 가능
• 기존 웹 인프라와 쉽게 연동 가능 (예: Cache, Proxy, Firewall)
• 웹과 유사한 Optimistic Locking 모델
CouchApp
26
• CouchDB의 자체 HTTP 웹서버 기능을 활용한 Application Deployment
방법
• Design Document를 통해 애플리케이션 제어
• 웹 리소스(HTML, 이미지, CSS 등)들을 Attachment 형태로 저장
• JavaScript에서 REST를 통해 DB 데이터 접근 가능
• Virtual Hosting, URL Redirecting 기능 지원
• Application과 Data가 한 번에 관리, 배포, 복제(Replication 통한
App/Data 동시 복제 가능)
• 예제
• DB에 저장된 주소록과 CouchApp으로 제작된 주소록 Viewer
Futon (GUI Tool)
27
• Futon
• 기본 내장된 DB 관리툴
• CouchApp으로 만들어짐
• Fauxton
• Cloudant가 기여한 새로운 Admin Tool
• CouchDB 1.5부터 포함
(사용하려면 별도 작업 필요)
• Node.js 기반
• Design Document 작성 편리
Futon
Fauxton
cURL
28
• Command Line 기반 REST API 테스트 도구
• 쉽고 간단하게 사용할 수 있어 소규모, 즉석 테스트에 사용
• Unix, Linux, Window 버전
• 예제
• Create
• curl -X POST http://localhost:5984/db -H "Content-Type: application/json" -d ‘{"name": "data"}’
• Read
• curl -X GET http://localhost:5984/db/key
• Update
• curl -X PUT http://localhost:5984/db/key -H "Content-Type: application/json" -d ‘{"_rev": "1-
XXXX", "name": "data"}’
• Delete
• curl -X DELETE http://localhost:5984/db/key?rev=1-XXXX
GUI REST Client
29
• Firefox나 Chrome 브라우저의 Plugin
• REST Client
• Java 기반의 REST 테스트 전용 도구
• https://github.com/wiztools/rest-client
• SoapUI
• SOAP/XML 성능 테스트 도구
• REST 지원
• http://www.soapui.org/
• JSON 처리 관련 개선 사항
http://blog.naver.com/javalove93/130185743179
REST Client
SoapUI
Ektorp Java API
30
• 가장 많이 사용되고 기능이 풍부한 API
• Repository: https://github.com/helun/Ektorp
• JPA와 유사한 기능을 가지면서도 단순, 유연한 CouchDB API
• Jackson을 이용한 JSON Document 핸들링
• Spring, Mobile(Android) 지원
• 예제 코드
DB 접속
Secondary Index(MR) 호출
CouchDB의 특징
31
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency
• Erlang OTP
Mobile Support
32
• HTTP REST & JSON 기반
• Mobile에서 직접 통신 용이
• Cookie 기반 세션, OAuth 등을 통해 Mobile 애플리케이션 지원
• Replication을 통한 Disconnected Device 지원
• Mobile DB 작업 내용을 서버 DB와 동기화 가능
• TouchDB, PouchDB(JavaScript), Cloudant Sync for
Android/iOS 등 각종 모바일 전용 DB (CouchDB와 호환)
CouchDB의 특징
33
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control (MVCC)
• Eventual Consistency
• Erlang OTP
Multi Version Concurrency Control(MVCC)
34
• RDBMS는 lock을 통해 read/write
consistency(일관성) 보장
• CouchDB는 lock 대신, 문서의
이력(Revision History)을 모두 보관
• 문서 Update 시 Version이 바뀌었다면
(변경이 있어났음을 의미) Conflict 에러
발생(Optimistic Lock)
• 예: Ver 2를 기준으로 Document Update를
시도했는데, 현재 최신 버전이 Ver 3인 경우
UpdateConflict
• MVCC를 통해 Replication 처리가
매우 용이
• Lock이 필요하면 애플리케이션
로직으로 처리
Append Only DB
35
• Update도 새로운 Version 추가(Append)로 처리
• 오래된 Revision은 주기적으로 정리(Compaction)
• 보안 등의 목적으로
Revision 강제
삭제 가능(Purging)
CouchDB의 특징
36
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency between Distributed Nodes
• Erlang OTP
Eventual Consistency
• 단일 노드에서 Consistency 보장은 상대적으로 용이
• 분산된 클러스터 환경에서 훨씬 복잡한 문제 (CAP Theorem)
• Incremental Replication을 통해 Consistency 해결
• Client는 각자 노드에서 데이터 변경
• 이후 Replication을 통해 동기화
• 다른 노드의 가용성 고민 불필요
• 전체 시스템 Availability 향상
• Conflict 발생 가능성
• 충돌이 발생한 데이터를 모두 보관
• 애플리케이션 로직을 통해 충돌 해결
CouchDB의 특징
38
• JSON Document Storage/Store
• ACID Compliant Data Store  “Ultra Durable”
• Map/Reduce View and Secondary Indexes
• Distributed Architecture and Replication
• REST/HTTP API  “Web Friendly”
• Strong Mobile Support
• Multi Version Concurrency Control
• Eventual Consistency
• Erlang OTP
Erlang OTP(Open Telecom Platform)
39
• Ericsson 에서 만든 Erlang 언어와 해당 언어 기반 Application Server
• CouchDB는 Erlang 언어 및 Erlang OTP 기반으로 작성됨
• Erlang 인터프리터, 컴파일러
• 각 노드 간 통신 프로토콜 및 브로커 (Java의 RMI와 유사)
• Tuxedo, CICS 등과 매우 유사
• Actor Model Concurrency
• 멀티코어, 분산환경에 적합한 모델
• 모든 프로세스나 컴포넌트가 Actor가
되어 서로 Message를 통해 통신
Erlang OTP에 등록되어 동작 중인 프로세스 목록
다 못한 얘기…
40
• 설치 방법
• Cloudant(CouchDB Cloud 서비스)를 통한 테스트
• Security
• HTTP Basic Auth
• Cookie Auth
• OAuth
• Clustering
• BigCouch
Cloudant를 이용한 CouchDB 테스트
41
• Cloudant DB 시작 가이드
• 5GB까지 무료 서비스
• http://www.slideshare.net/JerryJeong2/getting-started-with-cloudant-
dbaaskorean
• Cloudant 웹 UI 사용 방법
• http://cloudantkug.wordpress.com/2014/02/19/cloudant-new-webui/
More Deep-Dive Session
42
CouchDB Clustering
43
• BigCouch + CouchDB  CouchDB 2.0
44
45
46
47
48
Sharding
PUT /db2/docid92
DB Computes:
• key = hash(“docid92”)
• get_shards(key) ==> shard
• get_nodes(shard) ==>
[N1,N3,N4]
• Nodes.foreach: store(doc)
49
Sharding (“Q”)
• Example with Q = 24
• 6 Nodes
• Each node handles 4 shards
• General Rule:
• Few large DBs use large Q
• Many small DBs use small Q
• Q is degree of parallelism
50
Node Computes:
• key = hash(doc._id)
• get_shards(key) ==> shard
• get_nodes(shard) ==> [N1,N3,N4]
• Nodes.foreach: store(doc)
Replication (“N”)
• Store N copies of data
• Configurable per DB
51
Write Quorum (“W”)
• When does DB say “written”?
• When enough nodes have “written”
• What is “enough”?
• Try to store all replicas (N copies)
• When ‘W’ nodes reply
• After fsync’ing to disk
PUT /db2/docid92
52
Read Quorum (“R”)
• When does DB say “here it is”?
• When enough nodes say “here it
is”
• What is “enough”?
• Try to read it from N Nodes
• When “R” nodes reply and agree
GET /db2/docid92
53
54
55
56
57
Indexing - Views, Search, Geo
• What about indexes?
• Built locally for each shard
• Shards runs in parallel - utilize all CPUs
• Merge-sort responses at query time
58
59
60
61
More Deep Dive Contents
62
• 추가 세미나 or 교육…
• CouchDB 관련 웹사이트
• http://docs.couchdb.org/en/latest/ (매뉴얼)
• http://cloudantkug.wordpress.com/ (한국 Cloudant 블로그)

Más contenido relacionado

La actualidad más candente

쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신현욱 김
 
In-memory Caching in HDFS: Lower Latency, Same Great Taste
In-memory Caching in HDFS: Lower Latency, Same Great TasteIn-memory Caching in HDFS: Lower Latency, Same Great Taste
In-memory Caching in HDFS: Lower Latency, Same Great TasteDataWorks Summit
 
Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.Dan Harvey
 
Capture the Streams of Database Changes
Capture the Streams of Database ChangesCapture the Streams of Database Changes
Capture the Streams of Database Changesconfluent
 
Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...
Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...
Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...MongoDB
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기GunHee Lee
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
A smarter way to learn java script
A smarter way to learn java scriptA smarter way to learn java script
A smarter way to learn java scriptAdrianTrasca2
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우if kakao
 
Hadoop Security Today & Tomorrow with Apache Knox
Hadoop Security Today & Tomorrow with Apache KnoxHadoop Security Today & Tomorrow with Apache Knox
Hadoop Security Today & Tomorrow with Apache KnoxVinay Shukla
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013mumrah
 
The Benefits of Using React JS for Web Development!
The Benefits of Using React JS for Web Development!The Benefits of Using React JS for Web Development!
The Benefits of Using React JS for Web Development!Baharika Sopori
 
Building large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudiBuilding large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudiBill Liu
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Flink Forward
 

La actualidad más candente (20)

쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
Dataflow with Apache NiFi
Dataflow with Apache NiFiDataflow with Apache NiFi
Dataflow with Apache NiFi
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신
 
In-memory Caching in HDFS: Lower Latency, Same Great Taste
In-memory Caching in HDFS: Lower Latency, Same Great TasteIn-memory Caching in HDFS: Lower Latency, Same Great Taste
In-memory Caching in HDFS: Lower Latency, Same Great Taste
 
Redis
RedisRedis
Redis
 
Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.Change data capture with MongoDB and Kafka.
Change data capture with MongoDB and Kafka.
 
Capture the Streams of Database Changes
Capture the Streams of Database ChangesCapture the Streams of Database Changes
Capture the Streams of Database Changes
 
Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...
Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...
Replacing Traditional Technologies with MongoDB: A Single Platform for All Fi...
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
RESTful API - Best Practices
RESTful API - Best PracticesRESTful API - Best Practices
RESTful API - Best Practices
 
A smarter way to learn java script
A smarter way to learn java scriptA smarter way to learn java script
A smarter way to learn java script
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
React js
React jsReact js
React js
 
Hadoop Security Today & Tomorrow with Apache Knox
Hadoop Security Today & Tomorrow with Apache KnoxHadoop Security Today & Tomorrow with Apache Knox
Hadoop Security Today & Tomorrow with Apache Knox
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
 
The Benefits of Using React JS for Web Development!
The Benefits of Using React JS for Web Development!The Benefits of Using React JS for Web Development!
The Benefits of Using React JS for Web Development!
 
Building large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudiBuilding large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudi
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...
 

Destacado

[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1정명훈 Jerry Jeong
 
다산선생 지식경영법 - 여박총피법
다산선생 지식경영법 - 여박총피법다산선생 지식경영법 - 여박총피법
다산선생 지식경영법 - 여박총피법정명훈 Jerry Jeong
 
CouchDB Day NYC 2017: Introduction to CouchDB 2.0
CouchDB Day NYC 2017: Introduction to CouchDB 2.0CouchDB Day NYC 2017: Introduction to CouchDB 2.0
CouchDB Day NYC 2017: Introduction to CouchDB 2.0IBM Cloud Data Services
 
[오픈소스컨설팅]Session 2 1. Future of Team Collaboration
[오픈소스컨설팅]Session 2 1. Future of Team Collaboration[오픈소스컨설팅]Session 2 1. Future of Team Collaboration
[오픈소스컨설팅]Session 2 1. Future of Team CollaborationOpen Source Consulting
 
[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미
[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미
[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미Jinho Jung
 
서울열린데이터광장Db활용과 big data
서울열린데이터광장Db활용과 big data서울열린데이터광장Db활용과 big data
서울열린데이터광장Db활용과 big dataSung Woo Leem
 
Innovation 3 3.stages of new product development
Innovation 3 3.stages of new product developmentInnovation 3 3.stages of new product development
Innovation 3 3.stages of new product development정명훈 Jerry Jeong
 
Mvcc in postgreSQL 권건우
Mvcc in postgreSQL 권건우Mvcc in postgreSQL 권건우
Mvcc in postgreSQL 권건우PgDay.Seoul
 
120515 security framework2.20
120515 security framework2.20120515 security framework2.20
120515 security framework2.20skccsocial
 
엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어 2015.12.03
엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어  2015.12.03엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어  2015.12.03
엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어 2015.12.03Devgear
 
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망Open Source Consulting
 
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장Osc Osc
 
네트워크 가상화를 통한 효율적인 빅데이터 처리
네트워크 가상화를 통한 효율적인 빅데이터 처리네트워크 가상화를 통한 효율적인 빅데이터 처리
네트워크 가상화를 통한 효율적인 빅데이터 처리정명훈 Jerry Jeong
 
1 mysql아키텍쳐 v1
1 mysql아키텍쳐 v11 mysql아키텍쳐 v1
1 mysql아키텍쳐 v1resoliwan
 
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)Osc Osc
 
안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기YoungSu Son
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전
Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전
Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전Atlassian 대한민국
 
함수형 프로그래밍 언어 스칼라(Scala) 소개
함수형 프로그래밍 언어 스칼라(Scala) 소개함수형 프로그래밍 언어 스칼라(Scala) 소개
함수형 프로그래밍 언어 스칼라(Scala) 소개DongHee Kim
 
데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은ETRIBE_STG
 

Destacado (20)

[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1
 
다산선생 지식경영법 - 여박총피법
다산선생 지식경영법 - 여박총피법다산선생 지식경영법 - 여박총피법
다산선생 지식경영법 - 여박총피법
 
CouchDB Day NYC 2017: Introduction to CouchDB 2.0
CouchDB Day NYC 2017: Introduction to CouchDB 2.0CouchDB Day NYC 2017: Introduction to CouchDB 2.0
CouchDB Day NYC 2017: Introduction to CouchDB 2.0
 
[오픈소스컨설팅]Session 2 1. Future of Team Collaboration
[오픈소스컨설팅]Session 2 1. Future of Team Collaboration[오픈소스컨설팅]Session 2 1. Future of Team Collaboration
[오픈소스컨설팅]Session 2 1. Future of Team Collaboration
 
[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미
[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미
[Ignite skcomms]11. 물리학 평균학점 c가 말하는 양자물리학 김장미
 
서울열린데이터광장Db활용과 big data
서울열린데이터광장Db활용과 big data서울열린데이터광장Db활용과 big data
서울열린데이터광장Db활용과 big data
 
Innovation 3 3.stages of new product development
Innovation 3 3.stages of new product developmentInnovation 3 3.stages of new product development
Innovation 3 3.stages of new product development
 
Mvcc in postgreSQL 권건우
Mvcc in postgreSQL 권건우Mvcc in postgreSQL 권건우
Mvcc in postgreSQL 권건우
 
120515 security framework2.20
120515 security framework2.20120515 security framework2.20
120515 security framework2.20
 
엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어 2015.12.03
엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어  2015.12.03엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어  2015.12.03
엔터프라이즈 환경의 데이터모델 관리 방안 By 엠바카데로 데브기어 2015.12.03
 
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
 
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장
 
네트워크 가상화를 통한 효율적인 빅데이터 처리
네트워크 가상화를 통한 효율적인 빅데이터 처리네트워크 가상화를 통한 효율적인 빅데이터 처리
네트워크 가상화를 통한 효율적인 빅데이터 처리
 
1 mysql아키텍쳐 v1
1 mysql아키텍쳐 v11 mysql아키텍쳐 v1
1 mysql아키텍쳐 v1
 
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
 
안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전
Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전
Atlassian Product Overview (아틀라시안 제품 소개) - 2016년 4월 버전
 
함수형 프로그래밍 언어 스칼라(Scala) 소개
함수형 프로그래밍 언어 스칼라(Scala) 소개함수형 프로그래밍 언어 스칼라(Scala) 소개
함수형 프로그래밍 언어 스칼라(Scala) 소개
 
데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은
 

Similar a CouchDB - Introduction - Korean

4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 Amazon Web Services Korea
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례Jeongsang Baek
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)NAVER D2
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기Youngjae Kim
 
Introduction of Mesosphere DCOS
Introduction of Mesosphere DCOSIntroduction of Mesosphere DCOS
Introduction of Mesosphere DCOSDeughyeon Chang
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AILablup Inc.
 
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1Ji-Woong Choi
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipelineJongho Woo
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sSeong-Bok Lee
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena DollyJi-Woong Choi
 
AWS와 Open Source - 윤석찬 (OSS개발자 그룹)
AWS와 Open Source - 윤석찬 (OSS개발자 그룹)AWS와 Open Source - 윤석찬 (OSS개발자 그룹)
AWS와 Open Source - 윤석찬 (OSS개발자 그룹)Amazon Web Services Korea
 
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략영욱 김
 
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발강 민우
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)Software in Life
 
RAD Studio 10.2 도쿄
RAD Studio 10.2 도쿄RAD Studio 10.2 도쿄
RAD Studio 10.2 도쿄Devgear
 
빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)Channy Yun
 
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기Gyuwon Yi
 

Similar a CouchDB - Introduction - Korean (20)

4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
 
Introduction of Mesosphere DCOS
Introduction of Mesosphere DCOSIntroduction of Mesosphere DCOS
Introduction of Mesosphere DCOS
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AI
 
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_s
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
 
AWS와 Open Source - 윤석찬 (OSS개발자 그룹)
AWS와 Open Source - 윤석찬 (OSS개발자 그룹)AWS와 Open Source - 윤석찬 (OSS개발자 그룹)
AWS와 Open Source - 윤석찬 (OSS개발자 그룹)
 
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
 
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
 
RAD Studio 10.2 도쿄
RAD Studio 10.2 도쿄RAD Studio 10.2 도쿄
RAD Studio 10.2 도쿄
 
빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)
 
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
 

Más de 정명훈 Jerry Jeong

1시간만에 만드는 음성인식 인공지능 챗봇
1시간만에 만드는 음성인식 인공지능 챗봇1시간만에 만드는 음성인식 인공지능 챗봇
1시간만에 만드는 음성인식 인공지능 챗봇정명훈 Jerry Jeong
 
Google Cloud IAM 계정, 권한 및 조직 관리
Google Cloud IAM 계정, 권한 및 조직 관리Google Cloud IAM 계정, 권한 및 조직 관리
Google Cloud IAM 계정, 권한 및 조직 관리정명훈 Jerry Jeong
 
오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료) 오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료) 정명훈 Jerry Jeong
 
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)정명훈 Jerry Jeong
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)정명훈 Jerry Jeong
 
IoT 기반 융합 서비스 기술 (응용사례)
IoT 기반 융합 서비스 기술 (응용사례)IoT 기반 융합 서비스 기술 (응용사례)
IoT 기반 융합 서비스 기술 (응용사례)정명훈 Jerry Jeong
 
사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW정명훈 Jerry Jeong
 
Getting started with Cloudant DBaaS(Korean)
Getting started with Cloudant DBaaS(Korean)Getting started with Cloudant DBaaS(Korean)
Getting started with Cloudant DBaaS(Korean)정명훈 Jerry Jeong
 
GoldenGate for MySQL 설치 시 필요한 사항
GoldenGate for MySQL 설치 시 필요한 사항GoldenGate for MySQL 설치 시 필요한 사항
GoldenGate for MySQL 설치 시 필요한 사항정명훈 Jerry Jeong
 

Más de 정명훈 Jerry Jeong (10)

1시간만에 만드는 음성인식 인공지능 챗봇
1시간만에 만드는 음성인식 인공지능 챗봇1시간만에 만드는 음성인식 인공지능 챗봇
1시간만에 만드는 음성인식 인공지능 챗봇
 
Google Cloud IAM 계정, 권한 및 조직 관리
Google Cloud IAM 계정, 권한 및 조직 관리Google Cloud IAM 계정, 권한 및 조직 관리
Google Cloud IAM 계정, 권한 및 조직 관리
 
Wso2 api manager 특징 slide share
Wso2 api manager 특징   slide shareWso2 api manager 특징   slide share
Wso2 api manager 특징 slide share
 
오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료) 오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료)
 
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
IoT 기반 융합 서비스 기술 (응용사례)
IoT 기반 융합 서비스 기술 (응용사례)IoT 기반 융합 서비스 기술 (응용사례)
IoT 기반 융합 서비스 기술 (응용사례)
 
사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW
 
Getting started with Cloudant DBaaS(Korean)
Getting started with Cloudant DBaaS(Korean)Getting started with Cloudant DBaaS(Korean)
Getting started with Cloudant DBaaS(Korean)
 
GoldenGate for MySQL 설치 시 필요한 사항
GoldenGate for MySQL 설치 시 필요한 사항GoldenGate for MySQL 설치 시 필요한 사항
GoldenGate for MySQL 설치 시 필요한 사항
 

Último

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Último (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

CouchDB - Introduction - Korean

  • 2. 발표자 및 소속 회사 2 • 발표자, 정명훈 • 소속: Cloudant Korea에서 CouchDB 기반 DBaaS(PaaS) 컨설팅 • 경력: Java 개발, 미들웨어(Application Server), 가상화, 데이터베이스 및 CDC • 관심: 오픈소스와 클라우드 • 소속 회사, Cloudant • CouchDB 기반으로 클라우드 서비스로 제공(Database As A Service) • 유럽 입자물리 연구소(CERN)의 Higgs 입자 연구에 참여했던 MIT 과학자 세 명이 창립 (2008년 설립) • 약 30,000개 이상의 회사/사용자에게 서비스 제공
  • 3. CouchDB의 역사 3 • 2005년 Damien Katz(IBM, Lotus 개발자)에 의해 시작 Internet에 적합한 Database 목표  Cluster Of Unreliable Commodity Hardware의 약자 • 2006년 Erlang, JSON, JavaScript 기반으로 전환 • 2008년 Apache Incubator 프로젝트 • 2010년 첫 stable version 출시 • 2013년 Cloudant에 의해 BigCouch(Clustering) 프로젝트와 통합 • BigCouch 통합 버전 출시 예정…  CouchDB 2.0 Damien Katz
  • 4. CouchDB의 특징 4 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control (MVCC) • Eventual Consistency between Distributed Nodes • Erlang OTP
  • 5. CAP 이론 – CouchDB, A-P 특성 만족 5
  • 6. CAP 이론 – CouchDB, A-P 특성 만족 6 No Lock  “Optimistic Lock” Multi Version Concurrency Control  Append-Only DB Eventual Consistency
  • 7. CouchDB 기본 상식 7 • B-Tree에 데이터와 Index 저장 • CouchDB의 용어 • Database  RDB의 Table • Document  RDB Table의 Record/Row • CouchDB는 Stand-alone, BigCouch/Cloudant는 Clustering • Lock이 없고 복수 Client의 동시 액세스 허용 (Optimistic Lock) • 하나의 Document를 복수의 Version으로 관리
  • 8. CouchDB의 특징 8 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency • Erlang OTP
  • 9. CouchDB의 특징 9 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency • Erlang OTP JSON based Ultra Durable Data Store
  • 10. JSON Document Store 10 • JSON = JavaScript Objection Notation format • Boolean, Number, String, Array, Dictionary 등 다양한 데이터 타입 • 특별한 스키마 제약이 없고 다중 문서 등과 같은 자유로운 형식 (Schemaless) • 비정형 데이터: 텍스트+바이너리 혼합 데이터, 프로파일 데이터 등 • ID는 특별히 지정하지 않으면 자동으로 Unique하게 생성 저장 문서 별, 고유 ID와 Version 번호 자동 생성 됨 날짜 Type 배열 긴 문자열
  • 11. 바이너리 데이터(attachment) 저장 11 • 바이너리 데이터(파일, 사진 등)를 Attachment로 저장 • BASE64 형식으로 주고 받고 실제로는 바이너리 형식 저장 저장
  • 12. ACID Compliant Data Store 12 • ACID(Atomic Consistent Isolated Durable) 특성 준수 • “Crash-Only” 디자인: Commit된 데이터를 절대로 덮어 쓰지 않고 Consistent한 데이터 보장  특별한 Shutdown 과정 불필요  Ultra Durable • DB Read 작업에서 전혀 Lock을 잡지 않고, 다른 Client의 Read/Write 작업(동일 문서라도)을 대기할 필요 없음  대규모 서비스에 적합 • CouchDB의 Read 작업은 MVCC(Multi-Version Concurrency Control) 모델 기반으로 Consistent 한 데이터 snapshot 사용
  • 13. CouchDB의 특징 13 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency • Erlang OTP
  • 14. Secondary Index 14 • _id를 기준으로 한 Primary Unique Index를 보완 • _id 이외의 다른 필드 또는 필드들의 조합을 대상으로 함 • Key 값은 중복 허용 • 예: author, subject, [author, subject] • 생성 방법 • 일반 Design Document • Map/Reduce를 사용 (Map의 emit 함수) 데이터 Map 함수 인덱스 조회 결과
  • 15. View – Secondary Index의 결과 15 • Map의 emit 함수 실행 결과가 실시간 처리 되어 View 형태로 저장 (원본 DB의 별도) • 원본 데이터 변경 시 전체 재 계산이 아닌 변경분만 재 계산 (Incremental Map/Reduce) • 클러스터(Cloudant, BigCouch)에서는 여러 노드에 분산되어 처리 및 저장 됨 • 동일 데이터(Database)에 대한 복수 View 생성 가능 • Reduce를 통해 데이터 통계(RDB의 sum & group by에 해당) 생성 (사용 여부는 선택적)
  • 16. Map/Reduce 16 • 주로 JavaScript로 작성 되며, 다른 언어도 지원 가능 • 일반적인 Map/Reduce와 마찬가지로… • Map 함수에서 key, value 쌍을 생성 • Reduce 함수에서 데이터(key, value 쌍의 배열)에 대한 계산, 통계 작업 • 병렬 처리 – 클러스터에서는 여러 노드에서 분산 처리 및 결과 취합
  • 17. Map/Reduce 17 • CouchDB의 Map/Reduce는… • Real time: DB의 데이터에 변경이 생기면 바로 실시간 재 계산 (View) • Incremental: 데이터 변경 시, 전체를 재 계산 하지 않고 필요한 부분만 재 계산 하는 방법 (http://eagain.net/articles/incremental-mapreduce/) • Chained Map/Reduce • 복수의 Map/Reduce 작업을 이어서 하는 것 (Real time, Incremental 특성 유지) • Map/Reduce 결과를 2차 DB로 동기화하여 거기서 다시 Map/Reduce를 실행 • Cloudant에서 제공 • http://examples.cloudant.com/sales/_design/sales/index.html
  • 18. CouchDB의 특징 18 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency • Erlang OTP
  • 19. Strong Focus on Replication 19 • Couch 계열 DB의 특징 • CouchDB 호환 DB(Cloudant, TouchDB, PouchDB) 간 상호 동기화 지원 • 모든 Document(레코드)에 Revision ID(MVCC)가 있어 변경 사항을 쉽게 추출  변경 데이터만 증분(incremental) 복제/동기화  Fault Tolerant (서버/DB Crash 시에도, 데이터 동기화 보장) • 단방향, 양방향, N:N Multi-Master, Server/Cloud to Mobile 동기화 가능 • 일회성 복제 및 동기화, 지속적인(Continuous), 필터(원하는 패턴) 동기화 • Use Cases • 글로벌 거점 간 데이터 동기화(Multi-Master 복제) • 모바일, 사물인터넷(Internet Of Things) 데이터 수집 • 각종 기기(Device) 또는 단말(Edge)에서 수집된 정보를 메인 DB로 복제
  • 20. Replication 동작 과정 20 REV-10 REV-09 REV-08 REV-07 REV-05 REV-04… REV-11 REV-14 REV-16 • 초기 Replication 설정 • 동작 중인 Replication 모니터링 BARFOO REV-01 REV-02 REV-03 Pull 방식 Replication 소스 및 타겟 지정 Replication 상태 정보 Push 방식 Pull 방식 • 동기화를 담당할 Job을 소스, 타겟 원하는 위치에서 운영 가능 (소스- Push or 타겟-Pull) • DB 자체의 고유 기능(Document의 Revision ID 관리)을 바탕으로 정확하고 안정적인 동기화 가능 • 별도의 동기화 서버나 프로세스 불필요 (DB 자체의 기본 기능) • 상호 양방향 동기화 지원
  • 21. Changes Event를 통한 메시징 21 • Replication 및 Revision History(MVCC)에 기반한 변경 이벤트 수신 • Changes Event를 수신하고 있는 각 Client 별로 전달할 메시지(DB Insert/Update/Delete) 관리 • Client가 다운되어 있는 경우에도 재 기동 시, 해당 시간 동안 발생한 메시지 수신 가능 (무시도 가능) • CouchDB Replication 프로토콜 기반 CouchDB Client Client DB Changes History Changes Event 수신 Client Down Client Changes Event 수신 REV-10 REV-09 REV-08 REV-07 REV-05 REV-04… REV-01REV-02REV-03 REV-03REV-02REV-01 REV-04 REV-05 REV-06 REV-05 REV-04 REV-02REV-03 … REV-01REV-02REV-03 REV-4 REV-6 REV-7 Client 별로 다음에 수신할 Changes 번호 관리 다음 전송할 데이터
  • 22. Replication 활용 예제: Quilter 22 • Replication과 Changes Feed를 활용한 로컬 – 원격 클라우드/서버 파일 동기화 프로젝트 • 관련 문서: http://cloudantkug.wordpress.com/2014/02/19/quilter- cloudant%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C- %EB%A1%9C%EC%BB%AC%ED%81%B4%EB%9D%BC%EC%9A%B0%EB %93%9C-%ED%8C%8C%EC%9D%BC- %EB%8F%99%EA%B8%B0%ED%99%94/ • 소스 Repository: https://github.com/garbados/quilter • Node.js 기반 • 서버에 올린 사진 파일을 CouchApp을 통해 Publishing 가능 • https://github.com/garbados/egg_chair
  • 23. CouchDB의 특징 23 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency • Erlang OTP
  • 24. RESTful API 24 • 예제: • 문서 • http://docs.couchdb.org/en/latest/intro/api.html • http://docs.couchdb.org/en/latest/api/index.html
  • 25. Web Friendly • CouchDB 자체가 HTTP 웹서버 • REST 기반 API를 통해 웹 상에서 쉽게 액세스 가능 • Java, JavaScript, Ruby, PHP 등에서 쉽게 호출 가능 • 기존 웹 인프라와 쉽게 연동 가능 (예: Cache, Proxy, Firewall) • 웹과 유사한 Optimistic Locking 모델
  • 26. CouchApp 26 • CouchDB의 자체 HTTP 웹서버 기능을 활용한 Application Deployment 방법 • Design Document를 통해 애플리케이션 제어 • 웹 리소스(HTML, 이미지, CSS 등)들을 Attachment 형태로 저장 • JavaScript에서 REST를 통해 DB 데이터 접근 가능 • Virtual Hosting, URL Redirecting 기능 지원 • Application과 Data가 한 번에 관리, 배포, 복제(Replication 통한 App/Data 동시 복제 가능) • 예제 • DB에 저장된 주소록과 CouchApp으로 제작된 주소록 Viewer
  • 27. Futon (GUI Tool) 27 • Futon • 기본 내장된 DB 관리툴 • CouchApp으로 만들어짐 • Fauxton • Cloudant가 기여한 새로운 Admin Tool • CouchDB 1.5부터 포함 (사용하려면 별도 작업 필요) • Node.js 기반 • Design Document 작성 편리 Futon Fauxton
  • 28. cURL 28 • Command Line 기반 REST API 테스트 도구 • 쉽고 간단하게 사용할 수 있어 소규모, 즉석 테스트에 사용 • Unix, Linux, Window 버전 • 예제 • Create • curl -X POST http://localhost:5984/db -H "Content-Type: application/json" -d ‘{"name": "data"}’ • Read • curl -X GET http://localhost:5984/db/key • Update • curl -X PUT http://localhost:5984/db/key -H "Content-Type: application/json" -d ‘{"_rev": "1- XXXX", "name": "data"}’ • Delete • curl -X DELETE http://localhost:5984/db/key?rev=1-XXXX
  • 29. GUI REST Client 29 • Firefox나 Chrome 브라우저의 Plugin • REST Client • Java 기반의 REST 테스트 전용 도구 • https://github.com/wiztools/rest-client • SoapUI • SOAP/XML 성능 테스트 도구 • REST 지원 • http://www.soapui.org/ • JSON 처리 관련 개선 사항 http://blog.naver.com/javalove93/130185743179 REST Client SoapUI
  • 30. Ektorp Java API 30 • 가장 많이 사용되고 기능이 풍부한 API • Repository: https://github.com/helun/Ektorp • JPA와 유사한 기능을 가지면서도 단순, 유연한 CouchDB API • Jackson을 이용한 JSON Document 핸들링 • Spring, Mobile(Android) 지원 • 예제 코드 DB 접속 Secondary Index(MR) 호출
  • 31. CouchDB의 특징 31 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency • Erlang OTP
  • 32. Mobile Support 32 • HTTP REST & JSON 기반 • Mobile에서 직접 통신 용이 • Cookie 기반 세션, OAuth 등을 통해 Mobile 애플리케이션 지원 • Replication을 통한 Disconnected Device 지원 • Mobile DB 작업 내용을 서버 DB와 동기화 가능 • TouchDB, PouchDB(JavaScript), Cloudant Sync for Android/iOS 등 각종 모바일 전용 DB (CouchDB와 호환)
  • 33. CouchDB의 특징 33 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control (MVCC) • Eventual Consistency • Erlang OTP
  • 34. Multi Version Concurrency Control(MVCC) 34 • RDBMS는 lock을 통해 read/write consistency(일관성) 보장 • CouchDB는 lock 대신, 문서의 이력(Revision History)을 모두 보관 • 문서 Update 시 Version이 바뀌었다면 (변경이 있어났음을 의미) Conflict 에러 발생(Optimistic Lock) • 예: Ver 2를 기준으로 Document Update를 시도했는데, 현재 최신 버전이 Ver 3인 경우 UpdateConflict • MVCC를 통해 Replication 처리가 매우 용이 • Lock이 필요하면 애플리케이션 로직으로 처리
  • 35. Append Only DB 35 • Update도 새로운 Version 추가(Append)로 처리 • 오래된 Revision은 주기적으로 정리(Compaction) • 보안 등의 목적으로 Revision 강제 삭제 가능(Purging)
  • 36. CouchDB의 특징 36 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency between Distributed Nodes • Erlang OTP
  • 37. Eventual Consistency • 단일 노드에서 Consistency 보장은 상대적으로 용이 • 분산된 클러스터 환경에서 훨씬 복잡한 문제 (CAP Theorem) • Incremental Replication을 통해 Consistency 해결 • Client는 각자 노드에서 데이터 변경 • 이후 Replication을 통해 동기화 • 다른 노드의 가용성 고민 불필요 • 전체 시스템 Availability 향상 • Conflict 발생 가능성 • 충돌이 발생한 데이터를 모두 보관 • 애플리케이션 로직을 통해 충돌 해결
  • 38. CouchDB의 특징 38 • JSON Document Storage/Store • ACID Compliant Data Store  “Ultra Durable” • Map/Reduce View and Secondary Indexes • Distributed Architecture and Replication • REST/HTTP API  “Web Friendly” • Strong Mobile Support • Multi Version Concurrency Control • Eventual Consistency • Erlang OTP
  • 39. Erlang OTP(Open Telecom Platform) 39 • Ericsson 에서 만든 Erlang 언어와 해당 언어 기반 Application Server • CouchDB는 Erlang 언어 및 Erlang OTP 기반으로 작성됨 • Erlang 인터프리터, 컴파일러 • 각 노드 간 통신 프로토콜 및 브로커 (Java의 RMI와 유사) • Tuxedo, CICS 등과 매우 유사 • Actor Model Concurrency • 멀티코어, 분산환경에 적합한 모델 • 모든 프로세스나 컴포넌트가 Actor가 되어 서로 Message를 통해 통신 Erlang OTP에 등록되어 동작 중인 프로세스 목록
  • 40. 다 못한 얘기… 40 • 설치 방법 • Cloudant(CouchDB Cloud 서비스)를 통한 테스트 • Security • HTTP Basic Auth • Cookie Auth • OAuth • Clustering • BigCouch
  • 41. Cloudant를 이용한 CouchDB 테스트 41 • Cloudant DB 시작 가이드 • 5GB까지 무료 서비스 • http://www.slideshare.net/JerryJeong2/getting-started-with-cloudant- dbaaskorean • Cloudant 웹 UI 사용 방법 • http://cloudantkug.wordpress.com/2014/02/19/cloudant-new-webui/
  • 43. CouchDB Clustering 43 • BigCouch + CouchDB  CouchDB 2.0
  • 44. 44
  • 45. 45
  • 46. 46
  • 47. 47
  • 48. 48 Sharding PUT /db2/docid92 DB Computes: • key = hash(“docid92”) • get_shards(key) ==> shard • get_nodes(shard) ==> [N1,N3,N4] • Nodes.foreach: store(doc)
  • 49. 49 Sharding (“Q”) • Example with Q = 24 • 6 Nodes • Each node handles 4 shards • General Rule: • Few large DBs use large Q • Many small DBs use small Q • Q is degree of parallelism
  • 50. 50 Node Computes: • key = hash(doc._id) • get_shards(key) ==> shard • get_nodes(shard) ==> [N1,N3,N4] • Nodes.foreach: store(doc) Replication (“N”) • Store N copies of data • Configurable per DB
  • 51. 51 Write Quorum (“W”) • When does DB say “written”? • When enough nodes have “written” • What is “enough”? • Try to store all replicas (N copies) • When ‘W’ nodes reply • After fsync’ing to disk PUT /db2/docid92
  • 52. 52 Read Quorum (“R”) • When does DB say “here it is”? • When enough nodes say “here it is” • What is “enough”? • Try to read it from N Nodes • When “R” nodes reply and agree GET /db2/docid92
  • 53. 53
  • 54. 54
  • 55. 55
  • 56. 56
  • 57. 57 Indexing - Views, Search, Geo • What about indexes? • Built locally for each shard • Shards runs in parallel - utilize all CPUs • Merge-sort responses at query time
  • 58. 58
  • 59. 59
  • 60. 60
  • 61. 61
  • 62. More Deep Dive Contents 62 • 추가 세미나 or 교육… • CouchDB 관련 웹사이트 • http://docs.couchdb.org/en/latest/ (매뉴얼) • http://cloudantkug.wordpress.com/ (한국 Cloudant 블로그)