본문 바로가기

책 이야기

[개발] "데이터 중심 어플리케이션 설계" - 구글 취업을 위한 필독서(?)

 우연히 인터넷을 돌아다니다가 미국의 구글이나 페이스북에 취업하기 위한 인터뷰 준비에 대한 글을 보게 되었다. 미국에 갈 일은 없지만 구글이 중요하게 생각하는 기술이 궁금해서 자세히 읽다보니 O'reilly의 'Designing data-intensive applications: The big ideas behind reliable, scalable & maintainable systems' 라는 책을 추천해서 보게 되었다.

 

전형적인 오라일리의 동물 그림이 있는 책이다. 

 

 위키북스에서 번역되어 있고 번역에 대한 불만이 있는 것을 확인했지만 아무래도 재빠르게 훓어보기에는 한글이 아직도 영어보다는 훨씬 편해 번역본으로 사게 되었다. 전체적으로 번역이 이해를 해치는 수준은 아니라고 생각이 들면서도 MySQL을 마이SQL이라고 번역한 부분을 보게 되면서 번역자들께는 죄송하지만 신뢰가 많이 떨어졌다. 그래도 우리는 초보자는 아니니 뭘 말하는지는 아니깐.....

 

책의 두께를 맥북프로 15인치와 비교해 보았다. 상당히 두껍지만 개발도서들은 대개 두꺼우니...

 

 책은 약  580페이지 정도의 두께에 크기는 오라일리 책의 일반적인 크기이다. 크게 3부분으로 나눠져 있다.

 

     1. 데이터 시스템의 기초

     2. 분산 데이터

     3. 파생 데이터

 

 책의 제목에 걸맞게 모두 데이터를 다루고 있다. 책의 첫 장은 '오늘날 많은 어플리케이션은 계산 중심과는 다르게 데이터 중심적이다.'라는 말로 시작하고 나는 이 말에 책 자체에 대해 신뢰감이 생겼다. 원래 컴퓨터는 계산기이다. 그러나 오늘날 컴퓨터는 계산을 넘어 데이터를 관리해 주고 있다. 그래서 CPU의 성능을 넘어 메모리의 중요성이 더욱 커지고 있다. 

 

 데이터 처리를 위한 문서 데이터베이스, 관계형 데이터베이스, 그리고 나아가 그래프 데이터베이스 등도 소개하고 있으며 저장소의 인덱스를 위한 B-Tree 등에 대해서도 설명하고 있다. 그렇다고 해서 각각의 데이터베이스에 대한 자세한 설명을 하고 있는 것은 아니라 경험이 없다면 어려울지도 모르겠다. NoSQL 초기에 MongoDB, HBase를 사용하고 Neo4j를 가지고 친구추천을 개발해 본 적이 있어 익숙하게 느껴지기는 했다. 그래서 간단하게라도 해당 데이터베이스를 설치해서 경험해 보는 것이 책을 이해하는데 도움이 될 듯 하다.

 

다양한 프로그래밍 언어를 가지고 관계형 데이터베이스로 처리하기 힘든 그래프 구조를 다룰 수 있다.

 

 이후 파티셔닝, 분산시스템의 일관성 등에 대해서 설명하고 있어 좀 어려운 부분이다.

 시스템이 돌아가게 만드는 일은 상대적으로 쉽지만 시스템이 커지고 분산 환경이 되면 이전에 고민하지 않은 문제들이 생기게 된다. 전에 Zookeeper를 가지고 분산 시스템을 관리하게 되면 노드가 죽게 될 경우의 데이터의 일관성을 관리하기란 생각보다 쉽지 않다. 왜냐하면 성능도 생각해야 하고 분산 환경에서 메모리에 있던 데이터가 갑자기 날아가게 되면 데이터 정합성에 문제가 생길 수도 있기 때문이다.

 

 그런데 책으로 분산 데이터를 제대로 이해하기는 불가능(?)하다고 생각한다.

 

 개발일이 늘 그렇듯이 간단하게 3개, 5개 정도의 노드에 설치해서 놀아보면서 노드를 죽여도 보고 하면서 배울 수 있다. 수영을 배우려면 책보다는 물에서 물을 먹으면서 배우는게 아무래도 도움이 된다.

 

 마지막으로 스트리밍 처리 등에 대해서 다루고 있는데 Pub/Sub (발행/구독) 구조의 메시징 시스템과 아파치 카프카 등의 메시지 브로커 등의 작동 방식에 대해 설명하고 있어 실제적인 사용법보다는 이론적인 배경을 든든히 하는데 도움이 된다. 요새는 Spark를 쓰는 분들도 봤고 ELK 기반으로 스트리밍 처리도 많이 하고 있는데 이런 실제적인 사용법을 다룬 책은 아니다. 그런 것들의 논문수준의 이론은 아니더라도 기초에 도움이 된다.

 

 책 자체가 두께도 있고 코드가 있어 직접 해 볼 수 있는 것도 아니라 어렵게 느껴질 수 있지만 한 번 읽어두면 도움이 될 책이라는 생각이 든다. 물론 읽고 나면 내 머리 속 지우개처럼 싸악 사라지지만 나중에 찾아는 볼 수 있으니... 특히 취업을 준비하는 주니어보다는 이직을 준비하는 시니어 개발자들이 보면 도움이 되는 책이다.

 

 http://book.naver.com/bookdb/book_detail.nhn?bid=13483879 에서 구매나 구체적인 목차가 확인 가능하다.