개발자 필독서 - 데이터 중심 애플리케이션 설계
개요
2021년 5월에 처음 읽고 2024년 5월에 재독을 마쳤다.
두 번째 읽는 덕분에, 그리고 지난 삼 년동안 공부와 업무로 알게 된 것들에 기대어 조금 더 책을 깊이있게 읽었다 싶다.
알라딘 링크: http://aladin.kr/p/t1Nzd
감상
데이터 중심 애플리케이션 설계는 데이터라는 주제를 놓고 개발자가 알아야 할 것들을 망라한 책이다. 개발자 추천 서적에 빠지지 않고 자주 언급이 되는데 이러한 추천은 책 자체 내용의 충실함 못지 않게 저자인 마틴 클레프만의 헌신이 느껴졌기 때문이 아닐까 싶다. 개발자라는 직업을 공유하는 입장에서는 감사할 따름인 것이다.
작은 소망은 이 책이 핵심은 유지하면서도 최신의 기술적 변화와 성취를 담아 계속 개정되었으면 하는 것이다. 저자의 예측과 희망이 현실에서는 어떻게 되어가는지 보는 재미도 있겠다.
재독, 삼독하자
학교에서 강의 하나를 들으면 중간고사, 기말고사까지 대비하며 한 권의 책을 여러 번 읽고 꼼꼼히 정리한다. 그런데 개발서적은 한 번 스치듯 읽고 넘어가는 경우가 많다 싶다. 한 번 읽는다고 그 책이 나의 것이 될까? 사회생활을 하면서 기술서적을 깊게 읽는 것이 쉽지 않겠지만 이 책은 숙독이 필요하다.
특히나 이 책의 경우는 재독, 삼독을 권하고 싶다. 여럿이서 이 책을 함께 스터디하는 것도 좋겠다. 책의 내용이 좋으면서도 결코 쉽지는 않기 때문이다. 책이 어렵게 쓰였다기 보다는 워낙 방대한 내용을 골고루 다루고 있다. 세월을 두고 한 번씩 다시 읽으면 새로이 다가오는 내용들이 있을 것이다.
그림을 꼼꼼히 보자
이 책에 담긴 그림들은 하나하나 허투루 넣은 것이 없다. 책에서 다루는 내용을 하나의 그림으로 풀어서 보여준다. 읽으면서 그림 하나하나의 의미를 챙겨가며 읽으면 얻는 것이 쏠쏠하고 재미까지 느낄 것이다. 강력히 추천한다.
빼먹을 뻔 했는데 각 장을 소개하는 지도도 챙겨보자. 아름답기까지 한 그림들이다.
책의 내용
재독을 하니 이제서야 책의 전체 그림이 어렴푸시 보이고, 각각의 장들 마다의 이야기도 재미있게 다가왔다. 독서를 마무리하며 다시 한 번 정리하는 시간으로 매우 간단히 적어본다.
[Part 1] 데이터 시스템의 기초
01장: 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션
데이터 시스템을 만들어보자. 충분히 신뢰할 수 있고, 비즈니스가 성장하면 확장할 수 있으며, 유지보수하기 쉬운 시스템을 만드는 것이 목표이다.
02장: 데이터 모델과 질의 언어
데이터 모델로 관계형 모델과 문서 모델, 그리고 그래프형 데이터 모델을 소개한다.
그리고 이러한 데이터 모델에서 원하는 정보를 얻기 위해 질의를 하는 언어도 함께 알아본다.
03장: 저장소와 검색
데이터 시스템의 아래로 내려가다 보면 실제로 데이터를 저장하는 코드를 만나게 된다. LSM 트리와 B 트리에 대해 차근차근 설명해주는데 지식을 하나씩 더해주며 풀어나가고 둘의 장단점을 알려주는데 너무 재미있다.
04장: 부호화와 발전
데이터는 결국은 부호화되어 저장되거나 전송된다. 개발 세계의 똑똑이들이 머리를 짜내어 만들어낸 스리프트, 프로토콜 버퍼, 아브로 등에 대한 설명들이 흥미진진하다.
[Part 2] 분산 데이터
Part 1에서 데이터 시스템을 만드는 기초적인 부분을 다루었다면 이제는 확장을 위해 필요한 지식을 하나씩 쌓아간다.
05장: 복제
컴퓨터 한 대에서 이것저것 할 때가 행복했다. 서비스가 컴퓨터 한 대에서 감당할 수 없게 되는 등 다양한 이유로 복제가 필요하게 된다. 복제라는 화두가 주어지니 이를 어떻게 구현해야 할지, 복제 때문에 생겨나는 문제들에 어떻게 대응할지를 다룬다.
06장: 파티셔닝
같은 데이터를 여러 군데 두는 복제를 넘어 데이터를 나누어 보관하는 파티셔닝도 필요해진다. 복제와 파티셔닝은 함께 사용하는 경우가 많다. 파티셔닝은 복제와 마찬가지로 새로운 고려사항과 문제를 만들어내고 이를 어떻게 다루어야 할지를 생각해보아야 한다.
07장: 트랜잭션
처음 읽었을때는 엄청 힘들었던 부분이었는데 이번에는 쉬운코드님의 데이터베이스 유튜브 강의를 들으면서 보니 이해에 도움이 되었다. 같은 주제로 다양한 콘텐츠로 공부하는 것은 도움이 된다.
08장: 분산 시스템의 골칫거리, 09장: 일관성과 합의
8장과 9장은 정신이 혼미해지는 부분이다. 단단한 바위처럼 믿어왔던 컴퓨터, 데이터의 세계가 이렇게 아슬아슬한 기반위에서 위태롭게 서있는 것이었다니. 네트워크가 얼마나 못믿을 녀석인지, 시간 마저도 배신을 할수 있다는 사실을 알게 된다. 결국은 도메인이 허용하는 기준 내에서 감수할 위험, 사용할 기술과 도구를 선택해야 한다.
[Part 3] 파생
10장: 일괄 처리, 11장: 스트림 처리
두껍고 쉽지 않은 책을 9장까지 읽고 나면 진이 빠지게 마련이다. 하지만 심기일전하고 새로운 책의 첫 장을 펼친 것이라 최면까지 걸어가며 Part 3을 읽기 시작하기를 권해본다. 지금까지 읽어온 내용을 자산으로 삼아 일괄 처리와 스트림 처리를 차례차례 훑어본다. 그리고 10장과 11장은 또다시 12장의 대미를 장식하기 위한 밑바탕이 된다.
12장: 데이터 시스템의 미래
Last but not least, 순서로는 마지막이지만 중요성은 그렇지 않다는 표현이다. 이번에 재독을 하며 12장은 그걸 넘어서서 화룡점정이라는 느낌을 받았다. 11장까지는 학계와 업계의 지식을 모두 모아 잘 정리해준 것이라면 12장에서는 저자의 통찰을 담아 데이터 시스템의 미래에 대한 희망사항, 기대해보는 분야, 현재로서 유망하다 생각하는 시스템의 모습을 이야기한다.
그리고 마지막 절 “옳은 일 하기” 는 윤리를 다룬다. 저자가 이 책을 매우 무겁고 진지한 마음으로 쓴 것이라는 것을 느끼게 해주었다. 단순히 그럴듯한 마무리로 윤리라는 단어를 던져두는 것이 아니라 데이터와 관련한 윤리적인 측면 역시 제대로 챙겨보고 저자의 생각까지 담는다.
마무리
개발이라는 길을 함께 걷는 도반(道伴) 분들께 이 책을 강력히 권한다.