이것이 레디스다 - 초고속 읽기 쓰기를 제공하는 인메모리 기반 NoSQL, Redis
정경석 지음 / 한빛미디어 / 2013년 11월
평점 :
절판


아직까지는 RDBMS가 대세이긴 하지만, 누가봐도 새로운 신흥 세력 NoSQL로 많은 서비스들이 점차 이동하고 있다는 점은 부인할 수 없을 것이다.


SNS 등 엄청난 이용자수의 기하급수적으로 늘어나고 있는 이용량 증가가 관계형 데이터 베이스에서는 한계가 오기 시작하기 때문이다.

하루에도 천문학적 데이터 트래픽을 만들어 내는 Facebook, YouTube, Twitter, Kakao Talk 등은 기존의 테이블 기반의 처리 방식으로 어려워졌다. 이런 엄청난 양의 비정형 데이터를 처리하기 위한 방법으로 나온 대안이 바로 NoSQL이다.


CouchDB, MongoDB 등 유명한 NoSQL의 오픈소스 프로그램들이 있지만, 그 중에서도 REDIS(REmote DIrectory Server)는 ANSI C로 작성된 인메모리 기반의 NoSQL이다. Inmemory란 말 그대로 모든 데이터를 메모리에 저장한 뒤에 조회한다는 말이다. 

Redis는 Twitter, Line, Pinterest 등 유수의 인터넷 서비스 업체들이 사용하고 있는 오픈소스 NoSQL이다. 


Redis는 기존 RDBMS와 다르게 Key-Value 형태로 저장되어 있다. Key를 통해 Value(값)을 찾는다. 데이터 형태는 5가지를 지원하는데, String, List, Hash, Set, Sorted Set이다.


그렇다면 기존의 RDBMS를 사용했을 때의 발생할 법한 문제점을 보자.

Tomcat 서버 3대와 MySQL로 새로운 서비스를 런칭했다. 사용자 반응이 매우 좋아 증가 추세가 가파른 곡선을 그렸다. 그러다 결국 시스템이 다운되었다. 다음과 같은 결과가 나왔다.



시스템을 보니 CPU, Memory모두 최대치 상태였고, MySQL 서버의 리소스는 40%정도만 점유하고 있었다. 따라서 WAS의 리소스 부족이라 판단하고, 3대를 추가해 총 WAS 6대와 MySQL서버 1대로 재동작 시켰다. 그랬더니 서비스 중단 현상이 사라졌다.




그러다 한달 후...다시 서비스가 중단되었다. 그래프를 보았다


이번에는 MySQL 서버의 문제였다. MySQL 서버 응답 지연으로 WAS와 DB사이의 연결이 끊어진 것이다. 


어떻해야 할까? 이번엔 DB서버를 증가시켜야 할까?

WAS를 추가할 때는 해당 하드웨어에 Tomcat을 설치하고, JSP, JAR 파일을 복사하고, DB서버 IP를 설정하면 되었지만, DB서버를 변경하려면 저장된 데이터를 전부 새 서버로 Migration 작업을 해야 한다. 그럴려면 또 서비스를 중단시켜야 한다.


매번 이런 일이 발생할 즈음에 이렇게 서비스를 중단시켜야 할까?

H/W의 성능을 업그레이드 시키는 Scale Up을 한다해도 어느 순간부터는 물리적인 한계가 존재한다. 즉 증가시켜도 증가분만큼 성능이 향상되지 않는 것이다.



NoSQL은 처음부터 Scale Out(같은 H/W를 증가시켜 나가는 것) 염두해 두고 설계했다. 그래서 데이터 트래픽이 증가해도 비슷한 사양의 H/W를 추가하면 대응이 가능하며, 위의 예처럼 데이터 요청량의 증가를 예측하기 어려운 경우에 NoSQL을 사용하는 것이 현명한 선택이다.



RDBMS의 기본은 데이터 간의 관계다. 즉 Table 끼리의 Relation이 가장 중요하다.

반면, NoSQL은 관계는 중요하지 않으며, 처리할 수 있는 데이터양과 성능이 가장 중요하다.




이 책은 무턱대고, REDIS 설치부터 시작해서 사용법을 점진적으로 들어가지 않는다. 아직까지 NoSQL이라는 것에 대한 개념이 생소한 사람들이 많다는 것을 인지하고 있는지, 빅데이터와 NoSQL에 대한 개념과 현재의 환경, 기존의 RDBMS와의 비교 등 다양한 관점에서 알아볼 수 있다.


다음은 NoSQL의 CAP 정리를 시각적으로 나타낸 것이다.

Consistency, Availibility, Patition tolerence를 말하는데, RDBMS나 NoSQL이나 이 셋 중 둘을 고르고, 한 가지 속성을 희생해야 하는 것이 특징이다.

MySQL은 A, C를 가졌으나, P를 희생해야 하고, MongoDB나, Redis는 C, P가 지원하지만, A가 약하다.


이 책에서는 기본적인 데이터 사용법 부터, 실무와 가까운 활용사례를 소스를 예를 들어 설명하고, 확장기법과 관리기법, 튜닝까지도 알려준다.


가장 마음에 드는 것은 쇼핑몰 서비스를 예로 드는 실무에 가까운 활용법이다. 실제로 이런 이론 설명과 몇 가지 사용법으로는 매우 추상적인 단계에 머물게 되는데, 실제 업무에 사용하게 될 상황을 간접적으로나마 체험하게 됨으로써 보다 구체적인 적용을 꾀할 수 있다.


저자는 도움이 되는 책이 되었으면 좋겠고, 설명을 쉽게 하는 책이 되었으면 좋겠다고 했는데 그런 면의 노력이 많이 깃들여져 있는 것 같다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo