최근 페이스북같은 소셜 미디어의 확산과 더불어 빅데이터 관련 NoSQL 이라는것을 들어보았을 것입니다.
아파치 카산드라는 오픈 소스, 분산된, 비집중화된,가용성, 빅데이터 관점에서의 공개 프로젝트로 웹에서 매우 유명한 몇몇 사이트에서 사용하고 있다.
전반적으로 번역본의 특징이 많이 느껴지며, 대학교제보다는 어느정도의 아니 그 이상의 지식이 있어야만 이해할 수 있는 수준이며, 생소한 용어들도 많이 나옵니다.
키스페이스, 컬럼 패밀리, 가십, SSTable, SEDA 등 책에서 설명이 나오긴 하지만, 카산드라 고유의 단어로 사용되기도 하고, 많은 지적 수준을 요구하기도 합니다.
또한 기본적으로 책에서 설명하는 예제코드가 자바로 구현되어 있기 때문에 자바의 상식과 웹과 네트워크 개념 숙지도 필요합니다.
물론 DB에 대해 특히 저장구조에 대한 이해야 필요합니다.
전반부에는 쉽게 개요만 큰 그림에 대한 설명은 잘 되있었습니다. CAP의 준수에 대해서는 상세히 설명은 되어 있었습니다.
(물론 3가지는 다 만족하기 어려우며 2가지는 만족한다.는 주제가 확 보이지는 않았지만...)
그리고 예제는 따라하기 식이 아니여서 많이 어렵지 않았는가 생각합니다..
처음 카산드라를 접하는 사람에게는 데이터를 기록하고 읽고 하는 모든 부분이 코드로 작성되기에 처음 이해할 때 어렵게 느꼈던 부분일것 같습니다.
구성을 살펴보면, 1장에서는 카산드라를 전반적 소개 그리고,관계형 데이터베이스와의 차이점을 간단히 언급하며, 2장부터 본격적으로 카산드라의 설치와 데이터모델, 아키텍쳐, 데이터의 읽기/쓰기 절차 세부 유지보수 를 설명합니다. 내부 아키텍처와 예제들을 소개하며, 세부적인 기술사항들을 전개해나갑니다.
이해를 돕기 위해 본문 곳곳에 추가적인 설명이 첨부되어 있긴합니다만, 이것도 어느정도 지식이 필요합니다.
마지막으로 용어정리까지 어려워하는 독자들을 위해 최대한 이해를 돕고자 구성이 되어 있습니다.
중요한건 책을 다 읽고 숙독한다고 해서, 카산드라를 이해하기는 힘듭니다.
다만, 페이스북은 빅데이터를 처리하기 위해서 이런것들이 있구나, 유사한 Mongo DB, 하둡등도 있구나, 기존 RDB랑 다르구나! 정도만 느낄겁니다.
다만, 이 책을 덮은후 "더 알고싶구나" 하면서 느끼는 책인것은 확실한듯 합니다.
이해하기 어려운 부분이 많아 책의 구성과 특징 위주로 리뷰를 하겠습니다.
개발자라면 NoSQL이라는 말을 최근에 한번이라도 들어본 적이 있을것입니다. 카산드라는 페이스북에서 개발하여 아파치재단에 오픈소스로 공개한 프로젝트입니다.
필자가 책 초반에 예고는 했지만 생소한 용어들이 많이 나옵니다.
참고로 이 책을 읽으시는 분들은 저자의 다음 말을 기억하시는게 도움이 될 듯 합니다.
“카산드라를 배우려면 관계형 분야의 지식은 잠시 잊는 것이 효과적이다.”
이 책은 프로그래밍을 막 시작한 초급자에게는 어려울 수 있습니다. 중급자에서 상급자의 수준에 적합할 것 같습니다. 또한 기본적으로 자바언어를 다룰 수 있어야 합니다. 카산드라를 자바개발자만 사용할 수 있는 것은 아니지만, 일단은 책에서 설명하는 예제코드가 자바로 구현되어 있기 때문입니다. 책의 내용 이해를 위해 웹과 네트워크에 대한 지식도 어느 정도 숙지하고 있어야 합니다. 무엇보다도 중요한 것은 카산드라가 관계형 데이터베이스와는 전혀 다른 방식의 저장구조를 구현하고 있다는 점을 염두해두고, 카산드라에서 사용되는 새로운 용어와 개념에 익숙해져야 합니다.
1장에서는 카산드라를 소개하면서 관계형 데이터베이스에 대한 핵심적이고 날카로운 분석내용을 짧지만 명확하게 제시합니다. 관계형 데이터베이스는 트랜잭션이라는 특징이 있고, 간결하면서도 강력한 SQL을 통해 데이터를 관리할 수 있습니다. 그러나 모든 스키마를 관계형모델에 매핑할 수 있는 것은 아니며, 데이터와 사용량의 증가 시 하드웨어적인 수직적 확장으로는 처리속도가 느려지는 문제를 근본적으로 해결할 수는 없다는 점을 언급합니다.
그렇다면 카산드라는 어떤 특징이 있을까요? 오픈소스, 분산된, 비집중화된, 지속적으로 확장 가능한, 고가용성, 결함 허용, 조정가능한 일관성, 컬럼 지향 데이터베이스라는 단어로 요약할 수 있습니다.
2장부터는 카산드라의 설치와 데이터모델, 아키텍쳐, 데이터의 읽기/쓰기 방법을 상세하게 설명합니다. 예제 전문을 수록하여 꼼꼼하게 설명하거나, 메소드 하나에 각 절을 할애하여 설명하고 있습니다. 또한 카산드라의 내부동작이나 아키텍쳐를 설명하기 위해서 저자는 관계형 데이터베이스의 개념과 카산드라의 차이를 적절한 예로 제시하고 있습니다. RDB에 익숙한 독자들에게 N x M의 고정된 테이블이 아닌 데이터베이스를 설명하기 위한 최상의 방법일 것입니다.
저자는 관계형 데이터베이스 보다 카산드라와 같은 NoSQL 부류의 데이터베이스가 최선이라고 말하지 않습니다. 각각 장단점이 있기 때문에 프로젝트의 성격에 맞게 사용하라고 권유합니다.
번역본 임에도 문장이 매우 매끄럽습니다. 이해를 돕기 위해 본문 곳곳에 추가적인 설명이 첨부되어 있습니다. 카산드라의 버전업 주기가 빠르기에 책의 집필 시점에서도 버전이 업그레이드 되고 있었다고 합니다. 역자분들 또한 최신버전으로 반영하려 애쓴 모습이 보입니다. 특히 역자주를 통해 버전 간의 차이점과 어느 버전을 반영했는지 명시하고 있습니다. 가장 마음에 들었던 부분은 용어집입니다. 뒷부분에 별도로 용어집을 두어서 책에서 언급된 용어들에 대한 설명을 자세히 하고 있습니다. 참고하면서 읽으시면 좋을 듯 합니다.
IT에서 일하기 시작하면서 가장 먼저 알게된 데이터베이스는 MySQL이었다. 그런데, 이 MySQL이란 녀석은 정말 참하게도 초등학교 6년, 중 3년, 고 3년 내내 보았던 시간표 녀석과 그리도 닮아있기에, 아하~ 이런거구나 하고 아주 쉽게 개념을 익혔었다.
그로부터.. 시간이 꽤 오래 흘렀다. 지금은 소셜(사람과 사람) 지향을 뒷받침 하는 데이터베이스로서 카산드라나 MongoDB 같은 아이들이 성장했다.
책을 처음 받아보았을땐 새 1마리가 하늘을 올려다 보고 있는 모습이 인상적이기도 했고, 카산드라 참 재미있겠다 싶었는데, 재미와 별도로 제일 어려웠어요! 라는 느낌을 책을 모두 읽은 후에야 알게되었다.
우선 NoSQL이란 단어를 한번이라도 들어보지 못했다면, "그건 모에요?"라고 물어보실거고, 들어봤다면 그게 SQL이 없는 데이터베이스인가요 라고 물어보실거다.
본 책의 용어 정리에도 NoSQL이란 단어가 언급되지만, SQL을 사용하지 않는다고 해서 카산드라나 MongoDB, CouchDB 같은 것들이 모두 동일한 특징이나 행동 방법을 갖지 않고, 목표로 하고 있는 모든 것들이 다 다르다.
카산드라가 막연히 페이스북에서 사용되기에 한번 책을 보고 해보고 싶다 라고 책을 선택한다면 아마도 후회할 것이다. 어느분의 도서 리뷰처럼 이 책은 그저 카산드라의 기본정도는 알고 삽질하자이기 때문인데, 그 이유가 카산드라가 가지고 있는 고유한 특징 때문이다.
클러스터, 키스페이스, 컬럼 패밀리, 컬럼, 로우, 슈퍼컬럼, 디자인 패턴, 가십, SSTable, SEDA, 결과적 일관성, 힌트 핸드오프 등.. 아니 뭐.. 사실 이런 단어 중 한두개는 다른 곳에서 들어봤을지도 모르지만, 카산드라에서 이 모든 단어는 카산드라 고유의 단어로 사용된다.
카산드라는 대량의 데이터를 한번에 받아들이기 위해서 일관성을 다소 희생한다. 늘 그렇지만 한국 사람들 꼭 단어 하나씩 잘라먹고 이해한다. "다소" 라는 단어가 있었음에 주의해야 한다.
카산드라는 기본적으로 1대의 PC에서 동작시키는 데이터베이스라고 볼 수 없다. P2P 음악 공유 프로그램이었던 냅스터를 기억하는가? 그 냅스터에 쓰였던 P2P 기술이 분산 시스템 확인과 적용에 필요한 가십 프로토콜로 일부 가지를 치게 되었는데 이러한 가십 프로토콜로 카산드라 노드 구성을 통하여 사용하다 보니 이러한 과정에서 데이터의 유실보다 기록된 최신의 데이터보다 과거 데이터를 볼 수 있다. 뭐 이런 종류의 말로 받아들이는게 좋다.
물론 카산드라 노드 구성자가 정확성을 중요시 한다면 복제 계수, 일관성 레벨 설정을 통하여 강력한 일관성을 얻을수도 있지만, 굳이 이렇게 할 정도라면 관계형 데이터베이스를 쓰는게 나을지도 모른다.
지극히 개인적으로 C급 프로그래머로 카산드라 책의 예제 애플리케이션을 보면서 뭔 말인가 싶었는데 5장, 6장을 넘나들면서 보다보니 겨우 코드가 이해되었다. 이렇게 이해를 어렵게 만든데에는 카산드라의 스키마 설계 방식이 데이터 검색 구조에 맞게 스키마를 설계하는 것이기 때문이기도 하다.
본 도서의 원서는 카산드라 0.6 버전을 기준으로 다루고 있는데, 번역서는 0.8 버전을 기준으로 코드를 수정하거나 하는 식으로 재구성을 하거나 중간중간 해당 버전에 맞춰서 설명한 것이 좋았던 책이었다. 하지만 독자가 이 책을 읽을 시점의 카산드라 버전은 1.0 버전을 넘어섰기에 1.0 버전을 가지고 본 도서의 내용을 완전하게 실습해보기 어려울수도 있으니 카산드라의 최신 문서를 볼 필요가 있겠다.
원서보다 번역서가 최신이라는건 번역서에만 있는 장점일지도 모르겠으나, 어쩌면 단점일지도 모르겠다.
참 카산드라 자체가 JMX로 많은 부분을 감시하거나 수정할 수 있으니 자바 시스템을 관리할 줄 안다면 많은 부분에서 카산드라를 원격 조정할 수 있을 것이다.
그리고 카산드라의 태생이 분산 데이터베이스이기 때문에 하둡과의 연동에 대해서도 다루고 있으며 이러한 분산 데이터베이스에서 성능을 어떻게 최적화할 수 있는지에 대해서도 다루고 있다.
책을 보면서 한가지 아쉬웠던건 만족할만한 예제는 없었다는 것과 책에선 Thift 인터페이스와 Avro 인터페이스 모두 약간씩 다루고 있기에 향후 Avro 인터페이스로 바뀔때를 대비하여 Thift 에서 Avro 로 변경되는 마이그레이션 관련 부분이 있었다면 어땠을까 싶었다.
그리고 카산드라에서 데이터를 가져오는 부분은 있었으나 데이터를 검색하는 (어디까지나 SQL에 생각을 고정해서 본다면 where 이후 구문) 방법을 알 수 없었다(없진 않겠지만 찾지 못했다)
그리고 카산드라에서 데이터를 기록하고 읽고 하는 모든 부분이 코드로 작성되기에 처음 이해할 때 어렵게 느꼈던 부분이기 하다.
지난 40여년간 관계형 데이터베이스가 시장의 주도권을 잡았고 이제 비관계형 데이터베이스가 시장을 잠식해 가고 있다고 해서 관계형 데이터베이스가 비관계형 데이터베이스에 완전하게 시장을 잠식 당할거진 않을 거라고 생각된다.
서로 목표로 하고 있는 시장이 다르고 기능과 목표가 다르기 때문이다. 기존에 대규모 관계형 데이터베이스로 데이터의 관리와 사용에 애를 먹었던 기업이나 단체라면 카산드라가 하나의 답이 될지 모른다.
하지만 카산드라가 만병 통치약은 아니며 독자들이 이와 같은 상황에 직면했을때 카산드라가 하나의 선택 방안이 될수도 있다는 그런 것이다.
여담이지만, 카산드라가 소설가 베르베르 베르나르의 카산드라의 거울인줄 알았던 완전 무식하기만 했던 본 독자다. 아이러니하게도 카산드라의 서드파티 툴 중에서는 카산드라의 오빠인 헥터의 이름을 딴 도구도 있다는게 그나마 무식했던 본 독자를 위로한다.
좋은 책을 리뷰할 수 있는 기회를 주신 한빛미디어에게 감사한다.