CH 2 다양한 Nosql 데이터베이스(2.1, 2.2)
2.1 분산 데이터베이스에서의 데이터 관리
일반적인 데이터베이스에서 데이터를 저장하고 조회하는 목적을 달성하기 위해 데이터베이스 관리 시스템은 다음 세 가지 기능을 수행해야 한다.
- 영구적인 데이터 저장
- 데이터 일관성 유지
- 데이터 가용성 확보
영구적인 데이터 저장
데이터는 영구적으로 저장되어야 한다. 이 말은 데이터베이스 서버가 고장나더라도 데이터는 소실되지 않고 저장되어야 한다는 뜻이다. 따라서 데이터는 디스크, 플래시, 테이프, 혹은 다른 장기기억장치에 저장된 데이터만이 영구적으로 저장됐다고 볼 수 있다.
데이터 일관성 유지
흔히 둘 이상의 사람이 데이터베이스를 사용하면서 같은 데이터를 동시에 사용하고자 할 때 읽기와 쓰기에 관한 이슈가 발생한다. 이 때 한 사람이 여러 데이터를 변경하면, 모든 데이터가 변경이 완료되었을때 다른 사람이 변경내역을 조회할 수 있도록 하는것이 데이터 일관성이라고 한다.
이렇게 여러 단계에 걸쳐 일어나는 과정을 단일작업처럼 처리하는 것을 트랜잭션이라 한다.
데이터 가용성 확보
데이터베이스는 수많은 원인으로 사용 불가 상태가 될 수 있다. 이러한 상황을 피하는 한 가지 방법은 두 대의 데이터베이스 서버를 운용하는 것이다. 데이터를 갱신하고 요청된 질의에 응답하는 데 사용되는 서버를 주 서버, 다른 서버를 백업 서버라고 한다. 백업 서버는 주 서버에 있는 데이터베이스의 복사본이다.
데이터베이스 트랜잭션 작업으로 주 서버에 데이터를 넣고 백업서버에 복사하는 과정까지 하나의 과정으로 묶으면 데이터의 일관성이 유지된다.
이렇게 데이터베이스 서버 두 대를 운용하면 서버 하나가 고장 나더라도 다른 한 대의 서버를 사용할 수 있다는 장점이 있다. 쓸만하지만 비용 문제가 수반되는 방식이며, 데이터베이스 애플리케이션과 애플리케이션 사용자는 데이터 쓰기 작업이 완료될 때까지 기다려야 한다는 단점이 있다.
응답 시간 - 일관성 - 지속성 간의 균형 맞추기
Nosql 데이터베이스는 결과적 일관성을 구현한다. 즉, 데이터 복사본들이 다른 값을 갖는 시기가 있지만 결국에는 모든 복사본이 같은 값을 갖게 된다는 뜻이다.
Nosql 데이터베이스는 종종 읽기와 쓰기 작업을 할 때 쿼럼이란 개념을 사용한다. 쿼럼은 완료되었다고 여겨지는 읽기나 쓰기 작업에 반드시 응답해야 하는 서버의 수를 말한다.
읽기 작업이 수행될 때 Nosql 데이터베이스는 서버 여러 대에서 데이터를 읽는다. 읽기 작업에 올바른 응답을 하는 한 가지 방법은 해당 데이터가 저장된 모든 서버에 질의하는 것이다. 그리고 데이터베이스는 반환되는 응답값 중 유일한 응답값의 수를 세어 구성임계값(configurable threshold)과 같거나 이를 초과하는 응답값을 반환한다.
읽기 임계값을 작게 할 수록 응답은 빨라지지만 일관성이 깨진 데이터가 반환될 위험은 커진다. 예를 들면 서버 5대에 데이터를 복제하는경우, 읽기 임계값을 3으로 잡으면 3대에 복제가 된 상태에서 데이터를 반환하게 된다.
CAP 이론: 일관성, 가용성, 그리고 파티셔닝
컴퓨터 과학자인 에릭 브루어의 이론으로 알려진 CAP 이론은, 분산 데이터베이스는 일관성(C), 가용성(A), 파티션 허용(P) 이 세가지 속성을 동시에 가질 수 없다는 내용이다. 여기서 일관성은 서버 간에 일관된 데이터를 유지함, 가용성은 질의에 대한 응답을 제공함, 파티션 허용은 둘 이상의 데이터베이스 서버가 연결된 네트워크에 문제가 생기더라도 이 서버들은 여전히 일관된 데이터를 갖고 있다는 뜻이다.
2.2 ACID 와 BASE
ACID: 원자성, 일관성, 고립성, 지속성
A는 원자성 Atomicity 을 가리킨다. 원자성이란 말 그대로 더는 분할되지 않는 단위를 말한다. 트랜잭션처럼
여러 단계를 한번에 처리하는것은 하나의 처리단위로 봐야 한다는 것이다.
C는 일관성 Consistency 을 의미한다. 관계형 데이터베이스에서는 엄격한 일관성 이라고도 한다. 다른 말로 풀어 설명하면 트랜잭션은 데이터의 무결성을 위반한 상태로 데이터베이스를 내버려 두지 않는다는 뜻이다.
I는 고립성 Isolation 을 뜻한다. 고립된 트랜잭션은 완료되기 전까지 다른 사용자들에게 보이지 않는다.
D는 지속성 Durability 을 뜻한다. 일단 한 트랜잭션이나 작업 하나가 완료되면 서버에 전원공급이 끊어지는 상황에서도 데이터가 완료된 상태로 남아 있음을 의미한다. 즉 데이터가 디스크나 플래시 등의 영구저장매채에 저장된다는 뜻이다.
관계형 데이터베이스 관리 시스템은 ACID 트랜잭션을 지원하도록 설계되었다. Nosql 데이터베이스는 일반적으로 BASE 트랜잭션을 지원하는데, 일부 Nosql 데이터베이스는 일정 수준에서 ACID 트랜잭션을 지원하기도 한다.
BASE: 기본적인 가용성, 소프트 상태, 결과적 일관성
BA는 기본적인 가용성 Basically Available 을 뜻한다. 이 말은 분산 시스템에서 부분적인 고장이나 실패는 있을 수 있지만, 시스템의 나머지 부분은 계속 기능을 수행한다는 의미다. Nosql 데이터베이스는 종종 다른 서버에 복사본을 여러 개 만들어 두어, 서버 중 한 대에 문제가 생기더라도 요청된 질의에 응답할 수 있게 한다.
S는 소프트 상태 Soft State 를 가리킨다. 일반적으로 컴퓨터 과학에서 소프트 상태는 새로 고쳐지지 않으면 데이터가 소실된다는 뜻이다. Nosql에서 소프트 상태란 결국 데이터가 더 최신 상태인 데이터로 덮여 쓰이는 것을 마한다.
E는 결과적 일관성 Eventually Consistent 을 말한다. 이 말은 데이터베이스가 일관성이 없는 상태가 될때가 있음을 의미한다.
결과적 일관성의 유형
결과적 일관성은 Nosql 데이터베이스에서 매우 중요한 특성이다. 결과적 일관성에는 다음과 같이 몇 가지 유형이 있다.
- 인과적 일관성 casual consistency
- 최신 데이터 읽기 일관성 read-your-writes consistency
- 세션 일관성 session consistency
- 단조 읽기 일관성 monotonic read consistency
- 단조 쓰기 일관성 monotonic write consistency
인과적 일관성
인과적 일관성은 데이터베이스가 작업이 갱신된 순서를 반영하는 것을 보장한다. 예를들어 A가 데이터를 1000으로 변경하고, 1초뒤 B가 데이터를 2000 변경하면, 이 데이터의 모든 복사본은 먼저 1000으로 갱신된 후 2000으로 갱신된다.
최신 데이터 읽기 일관성
최신 데이터 읽기 일관성은 일단 레코드 하나를 갱신했다면 이 레코드에 대한 모든 질의는 갱신된 값을 반환받는다는 의미로 이전에 기록한 값과 일치하지 않는 값을 반환받을 일은 절대 없다는 것이다.
세션 일관성
세션 일관성은 세션이 살아있는 동안 최신 데이터 읽기 일관성을 보장한다. 세션이란 클라이언트와 서버 간, 혹은 사용자와 데이터베이스 간의 대화라고 생각하면 된다. 이러한 대화가 지속되는 한 데이터베이스는 대화 중 수행했던 모든 읽기 작업을 기억하고 있다. 만약 세션이 종료되고 같은 서버와 또 다른 세션을 연결했다면 이 서버가 이전 세션에서 수행한 내역을 기억할거라고 보장할 수 없다.
단조 읽기 일관성
단조 읽기 일관성은 질의를 해서 그 결과를 볼 때 해당 값의 이전버전은 절대 볼 수 없다는 뜻이다.
단조 쓰기 일관성
단조 쓰기 일관성은 몇 개의 갱신 명령어를 실행했을 때 이 명령어들이 실행된 순서대로 처리됨을 뜻한다.