토요일, 12월 10, 2011

[독서광] 카산드라 완벽 가이드

애독자 여러분들의 성원에 힘입어 오늘은 클라우드 관련 서적 중 데이터베이스 관련 기술을 담고 있는 '카산드라 완벽 가이드'를 읽고 서평을 정리해보겠다. 지난번에 올려드린 [독서광] MongoDB 완벽 가이드를 재미있게 읽으신 분이라면 이 책도 역시 흥미 진진하게 읽을 수 있지 않을까 싶다. 단, 지난번 MongoDB 책만큼이나 이 책도 기존 관계형 데이터베이스 관리 시스템에 익숙한 분이 읽기는 과정에서 상당히 어려운 용어와 개념이 등장하므로 마음을 단단히 먹고 접근해야 할 필요성이 있다. 책 목차를 보면 가장 끝에 '용어집'이 나오는데, 읽다보면 왜 용어집까지 동원해야 하는지 감이 오시리라. B급 프로그래머도 처음부터 끝까지 다 읽고나서 3장(데이터 모델), 5장(아키텍처)을 다시 한번 읽느라(이런 경우는 상당히 드문 사례다. ㅋㅋ) 서평을 늦게 올렸으니 애독자 여러분들께서도 한 번 읽고나서 어렵다고 실망하지 마시기 바란다.

이 책의 부제목을 보면 '페이스북, 트위터를 지탱하는 기술 NoSQL'이라고 붙어 있고, 또한 인터넷에 올라온 여러 자료를 보면 카산드라에 대해 아주 훌륭한 이야기가 많기 때문에 신이 내린 선물로 생각하는 분들도 많지만... 이름값(?)을 하기 때문에 만병 통치약은 아니다. 카산드라가 데이터베이스 세상을 지배하는 예언자라는 생각은 오라클 데이터베이스가 어떤 경우에도 죽지 않고(오래 전에(요즘은 저얼때 그렇지 않다고 믿는다!) 오라클 서버 데몬이 core dump 내고 죽는 경우를 봤는데, 옆에서 그 장면을 보고서도 이럴리 없다고 고개를 갸우뚱하는 사람들을 봤다. 낄낄) 완벽한 성능을 발휘한다는 미신 만큼이나 위험하다. 그나저나 데이터베이스 이름은 다들 왜 이렇게 잘 짓는거야! 그렇다면 카산드라의 정체는 과연 무엇일까? 본문 중에 보면 50단어 카산드라라고 해서 다음과 같이 설명하는 내용이 나온다.

아파치 카산드라는 오픈 소스, 분산된, 비집중화된, 지속적으로 확장 가능한, 고가용성, 결함 허용, 조정가능한 일관성, 컬럼 지향 데이터베이스로 아마존 다이나모의 분산 디자인과 구글 빅테이블의 데이터 모델을 기반으로 페이스북에서 만들었고, 웹에서 매우 유명한 몇몇 사이트에서 사용하고 있다.

카산드라를 이해하기 어려운 주요 이유는 기존의 마스터 슬레이브로 동작하는 아키텍처를 따르지 않고 P2P를 따라 움직이기 때문이다. 일반적인 상식으로 카산드라를 이해하려면 상당한 지적 저항이 일어나기 때문에 이 책은 1장과 부록 A에서 거의 필사적(?)으로 카산드라의 큰 철학과 다른 모델과 차이점을 설명하려 애쓴다. 간단하게 설명하자면, 카산드라는 C(Consistency), A(Availability), P(Partition Tolerance) 중에서 C와 A를 강조하는 MySQL이나 C와 P를 강조하는 MongoDB와는 달리 A와 P를 강조하려다 보니 일관성을 다소('다소'라는 표현에 주의하자. '완전히'가 아니다) 희생하는 아키텍처를 따른다. 이러다보니 참 재미있는 특성이 생겼다. 읽기 보다는 쓰기가 더 빠르고(일반적인 데이터베이스와는 반대다), 단일 장애 지점이 존재하지 않으며(P2P를 다시 한번 생각하라!), 샤딩이 그냥 되며(랜덤하게 노드를 골라서 쓰면 자기들끼리 알아서 동기화 해버린다!), 노드 추가에 따른 탄력적인 확장성이나 노드가 오동작하거나 죽더라도 고가용성을 달성하기가 어렵지 않다. 따라서 목적에 맞는(예: 쇼핑몰에서 장바구니 담기, 개인 전용 편지함 읽기) 시나리오에서는 십분 위력을 발휘할 수 있게 된다.

아키텍처만 어려우면 뭐 그려니 하겠지만, 데이터 모델이나 질의 방법도 절대 쉽지 않다(다행스럽게도 최신 버전에는 SQL과 살짝 유사한 질의 언어(CQL)가 추가되었다. 그 전에는 눈물이 앞을 가렸을 듯...). 구글의 빅테이블에 익숙한 분들이라면 카산드라에서 제공하는 데이터 모델(키스페이스, 컬럼 패밀리, 슈퍼 컬럼, 컬럼이라는 사총사가 등장해서 머리가 띵하게 만들어준다) 역시 손쉽게 이해가 갈지 모르지만 일반적인 관계형 데이터 모델에 익숙한 분들이라면 MongoDB와는 또 다른 난감함을 선사한다. 이런 차이점을 설명하려고 본문(호텔을 모델링하는 응용을 만들어본다)과 부록(블로그를 만든다고 가정하고, 자료를 넣고 질의해본다)에 예제를 소개하고 있지만, 실제 사례(use case)와는 동떨어져 예제를 위한 예제(잘 읽어보면 데이터 모델과 이런 모델을 다루는 카산드라만의 방식을 이해할 수 있지만, 실제 뭔가 해보도록 도와주기에는 2% 부족하다. 아무래도 B급 프로그래머 머리가 나쁜 모양이다. T_T)가 되어버린 점이 조금 아쉽다. 부록에서 큰 마음 먹고 twissandra와 같은 현장감 있는 예제를 분석해 설명했으면 오히려 더 좋았을 거라는 못된(!) 생각을 잠시 해봤다. 아, 모니터링과 성능 최적화도 기초적인 내용만 설명하고 있으므로, 카산드라를 실제 현장에 적용하려는 분들께서는 다른 문서를 참조할 필요가 있겠다.

결론: 이 책을 읽고 나서 카산드라의 아아주 복잡한 개념들(머클 트리, 벡터 클록, 블룸 필터, 스니치, 안티 엔트로피, 힌트 핸드오프)을 한번에 쏘옥 이해하기는 어렵지만(원래 어려운 데다 책을 읽어봐도 설명이 다소 햇갈린다. 예를 들어, 본문 중 "키스페이스는 데이터를 범위로 분할한다. 키스페이스는 범위에서 데이터를 분할한다."라는 설명이 뭔지 이해가 되나? 설명에 재귀호출을 걸어놓으면 독자보고 우짜라고!!! T_T) 출발점으로서는 부족함이 없다는 생각이다. 특히 3장, 5장, 부록 A는 두세번씩 정독해보면 카산드라를 이해하는 데 큰 도움이 되리라 확신한다.

뱀다리: 카산드라 버전이 바뀔 때마다 상당한 기능 추가와 삭제가 일어나므로 0.6을 기반으로 작성된 원서를 번역하며 0.8에서 변경된 내역을 추적하느라 역자들이 고생했겠다는 생각이 드는데, (역자들의 고생과는 별개로) 벌써 1.0.x으로 버전이 올라가버렸기에 본격적으로 카산드라를 사용해서 개발하려는 분들께서는 책 내용을 100% 곧이 곧대로 믿지 마시고 반드시 소스 코드와 문서를 교차 참조해야 뒷탈이 없을 것이다.

보너스: 넷플릭스 기술 블로그에 올라온 좋은 내용을 소개한다. 카산드라 부록 A에서도 집중적으로 나오지만, NoSQL이라 해서 모두 특징/기능/성능이 동일하지 않다는 사실을 다시 한번 기억해둘 필요가 있다.

The reason why we use multiple NoSQL solutions is because each one is best suited for a specific set of use cases.
EOB

댓글 없음:

댓글 쓰기