Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

[Book] NoSQL: 빅 데이터 세상으로 떠나는 간결한 안내서

NoSQL: 빅 데이터 세상으로 떠나는 간결한 안내서

NoSQL: 빅 데이터 세상으로 떠나는 간결한 안내서 - 8점
프라모드 사달게이 & 마틴 파울러 지음
윤성준 옮김
인사이트


이 책의 작년에 아마존에서 SQL쪽 베스트셀러 중 하나였던 NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence의 번역서로 이름도 유명한 마틴 파울러가 프라모드 사달게이와 공저로 쓴 책이다.

이 책은 200페이지 정도로 데이터베이스 책 치고는 별로 두껍지 않은 분량을 가지고 있는데 책의 초반에 저자들이 언급했듯이 NoSQL을 사용할 지 고민할 때 판단의 근거가 될 수 있는 개념을 최대한 간결하게 제공하는데 그 목적이 있다. 그래서 NoSQL이 가진 개념들이나 고려사항들을 설명하고 있고 각 NoSQL 데이터베이스의 자세한 사용방법등은 별로 다루고 있지 않다. 물론 각 종류별 특성을 설명하면서 간략히 사용방법을 소개하기는 하지만 이는 NoSQL의 데이터베이스 종류별(키-밸류, 그래프, 도큐먼트 등)로 개념을 설명하기 위한 것일 뿐이므로 실제로 사용하려면 관련 책을 다시 보아야 할 것이다.(아마 각각의 데이터베이스에 대한 책이 이 책의 분량을 뛰어넘을 것이다.)

즉, 이 책은 NoSQL에 대해서 아직 잘 몰라서 어떤 NoSQL을 선택해야 할지 모르거나 NoSQL에 대해서 공부해 보고 싶을 때 처음 보기에 딱 좋은 책이다. NoSQL은 RDBMS와 대비되는 개념으로 하나의 이름으로 묶어서 사용하고는 있지만 사실 이 안에는 전혀 다른 특성을 가진 키-밸류 스토어, 그래프, 도큐먼트 디비등이 모두 포함되어 있으므로 하나의 NoSQL을 사용해 봤다고 다른 종류의 NoSQL을 쉽게 사용할 수 있는 것이 아니다. 그래서 처음 NoSQL을 공부하려면 기존에 RDBMS를 공부했을 때와는 많이 다른 새로운 개념들로 혼란을 겪게 되는게 그런 혼란을 줄여주고 NoSQL에 대한 전체적인 그림을 이해하는데 상당히 도움이 되는 책이고 설명도 상당히 잘 되어 있고 번역품질도 좋은 편이다. 이미 NoSQL을 어느 정도 사용하고 있다면 이 책이 별로 도움이 될지는 모르겠지만 NoSQL 중 하나정도만 다뤄보고 다른 NoSQL에 대해서는 거의 모르거나 NoSQL을 처음 공부하기에는 개념잡기가 아주 좋은 책이다. 개념의 설명도 잘 되어 있고 고민해 보아야 할 부분에 대한 힌트도 많이 주는 편이다. 이 책에도 나와있듯이 NoSQL은 아직 역사가 짧기 때문에 많은 유즈케이스가 존재하지 않고 RDBMS에서의 경험만으로는 적용하기 어려운 많은 개념이 포함되어 있는데 이런 부분에 대한 자료도 많지 않고 공부하려고 해도 너무 많은 내용을 보아야 하는데 이 책이 그런 부분에 대한 길잡이를 해줄만 하다. NoSQL에 대해서는 예전에 정리했던 NoSQL에 대해서라는 글도 참고할만 하다.(어느새 저 정리를 한지가 3년이나...)

책의 내용

1부 "기본 개념"에서는 NoSQL에 공통적으로 적용될 만한 기본적인 개념들을 설명하고 있다. 기존의 RDBMS 구조에서 왜 NoSQL이 필요했고 그래서 NoSQL은 어떤 기능에 초점을 맞추고 있는지를 쉽고 명확하게 설명한다. 이 책에서는 NoSQL을 특정 기술이 아니라 하나의 동향으로 보고 있고 NoSQL이 필요한 가장 큰 이유를 클러스터가 필요한 규모의 데이터 크기와 성능 요건하에서의 데이터 접근 처리좀 더 편리한 데이터 조작 방식을 통한 애플리케이션 개발 생산성 향샹으로 보고 있다.

NoSQL 데이터베이스에 대한 흔한 이야기 중 하나는 NoSQL 데이터베이스에는 스키마가 없기 때문에 애플리케이션 운영 중에도 데이터 구조를 바꾸기 쉽다는 것이다. 우리는 동의하지 않는다. 무스키마 데이터베이스 역시 암묵적 스키마를 가지고 있으며 데이터 구조를 바꿀 때 이 규칙을 수정해야 한다.

처음에는 NoSQL의 데이터 모델이 가지는 기본적인 개념을 설명하면서 관계형 데이터베이스가 튜플 중심인데 반해 집합지향이라는 개념을 설명한다.(모든 NoSQL이 집합지향인 것은 아니다.) 집합 지향은 어플리케이션 데이터 모델을 개발할 때 데이터를 어떻게 접근할 지를 고민해 보아야 하고 관계형 데이터베이스도 복잡한 관계를 처리하는데 아주 뛰어난 것은 아니라는 것을 유념하라고 하고 있다. 그리고 스키마가 없기 때문에 균일하지 않은 데이터를 처리하기 쉽지만 데이터를 확인하려면 어플리케이션 코드를 봐야한다는 문제도 있다.

이어서 NoSQL의 특징인 클러스터링을 설명하고 있다. 샤딩으로 수평적 확장을 할때의 장점과 발상할 수 있는 문제 및 해결방법등을 제시하고 샤딩에 비해서 마스터-슬레이브 복제를 할 때는 또 어떤 다른 점이 있는지를 설명하고 있다.

흔히 듣는 주장중 하나가 NoSQL 데이터베이스는 트랜잭션을 지원하지 않으므로 일관성도 지원하지 않는다는 것이다. 이런 주장은 일반적으로 틀렸다고 할 수 있는데 많은 중요사항을 얼버무려 넘겼기 때문이다. 이에 대한 첫재 해명은 트랜잭션이 없다는 것은 보통 일부 NoSL 데이터베시으 특히 집합 지향 데이터베이스에만 해당하는 것이다. 둘째, 집합 지향 데이터베이스는 원자적 업데이트를 지원하지만 한 집합에 대해서만 지원한다.

클러스터를 이용할 때는 일관성이 항상 문제되는데 이를 어떻게 해결하고 접근해야 하는지에 대한 범용적인 개념을 설명하는데 어려운 개념이지만 이해하기가 참 좋다. 그리고 중요한 개념중 하나인 결과적 일관성(eventual consistency) 즉, 특정 시점에는 노드에 복제 일관성 불일치가 있을 수 있지만 결국에는 모든 노드가 같은 값으로 업데이트 된다는 개념을 설명하고 있다.

2부 "적용"에서는 NoSQL의 종류별로 좀더 구체적으로 설명하고 있다. 키-값 저장소, 문서 데이터베이스, 칼럼 패밀리 데이터 저장소, 그래프 데이터베이스를 차례차례 설명하면서 어떤 특성을 가지고 있고 어떤 장단점이 있는지를 설명해서 상황에 따라 어떤 종류를 사용해야 할지 판단해야 할 근거를 제공한다. 각 종류마다 적절한 사용처와 사용하지 말아야 할 경우를 제시하는 것도 고민할 때 꽤 유용할 꺼라 생각한다.

2부의 뒷부분에서는 스키마를 변경해야 하거나 레거시 시스템에 적용해야 하는 등의 실제로 일어날 수 있는 상황에 대해서 설명하고 있고 NoSQL외에 다른 데이터 처리 방법등에 대해서 소개하고 있는데 이 뒷부분은 크게 중요하지는 않아 보인다.(몇페이지 되지도 않는다.)

2013/10/04 23:42 2013/10/04 23:42