[개발자가 꼭 봐야 할 책 - 데이터 중심 애플리케이션 설계]

Distributed Systems 전문이라 가볍게 읽을 수 있는 책을 찾다가 지난 주말 읽어보고 데이터 중심 설계 "기본기"를 다질 수 있는 정보가 많은 책을 추천합니다. 책 이름은 "Designing Data-Intensive Applications" (한국어: 데이터 중심 애플리케이션 설계)입니다. 예전에 잠깐 소개한 책은 (지난 글 참고) 이 책의 챕터 3을 좀 더 깊게 파고드는 책이고, 데이터 베이스 설계를 하는 엔지니어가 아닌 사람이 읽기에는 조금 거리감이 느껴졌지만, 이 책은 소프트웨어를 설계하는 사람이라면 누구나 가볍게 읽어볼 수 있는 책인 것 같습니다. 📌 챕터 별 아주 짧은 요약 및 감상평 섹션 1️⃣ Foundations of Data Systems 챕터 1: Foundations of Data Systems 시스템 설계에 중요한 "reliability", "scalability", "maintainability" 코어 개념을 설명합니다. 조금 아쉬운 점이라면 Distributed 시스템을 디자인할 때 많이 화두 되는 "consistency vs availability"에 대해 챕터 1에서 먼저 파고들면 좋았을 것 같습니다. 대신 다른 챕터에서 "consistency"는 자세하게 다루면서 그에 따른 "availability" 문제에 대해 잘 설명해줍니다. 챕터 2: Data Models and Query Languages Relational Database의 장, 단점을 설명한 후 자연스럽게 NoSQL의 탄생 모티브를 설명하면서 두가지 데이터 베이스의 차이점에 대해 파고듭니다. 시스템 디자인할 때 가장 많이 언급되는 차이점에 대해 자세히 읽어보는 것이 좋은 것 같습니다. 이 개념은 시스템 디자인 면접에도 아주 도움됩니다. 챕터 3: Storage and Retrieval 데이터 베이스에 데이터는 어떻게 저장될까요? 스토리지의 코어 개념인 여러 가지 개념을 소개하는데, 실무에서 자주 언급되는 B-Tree, LSM Tree 그리고 Column-Oriented 스토리지에 대해 자세하게 설명합니다. 챕터 4: Encoding and Evolution 인코딩에 대해 조금 더 깊숙이 파고드는데, 개인적으로 그 부분은 스캔하듯 읽었습니다. 대신 backward compatibility 그리고 forward compatibility를 이해하고 Avro를 좀 더 깊게 이해하는데 집중해서 읽었던 것 같습니다. 섹션 2️⃣ Distributed Data Distributed Systems 개념을 깊게 파고듭니다. 개인적으로 앞 섹션은 가볍게 읽어보고, "Distributed Data" 섹션은 조금 천천히 읽더라도 개념이해를 확실히 하면서 읽는 것이 좋습니다. 라지 스케일의 어플을 개발하는데 중요한 distributed systems 개념을 간단하게 읽어보는 것보다 그 코어 개념을 명확하게 이해하고, 문제점과 향후 솔루션까지 제공해줍니다. 실제 소프트웨어 디자인할 때 가장 많이 도움 될 개념들이 잘 정리되어 있습니다. 챕터 5: Replication leader-follower, multi-leader, leaderless와 같은 데이터 베이스의 replication 방법에 대해 설명합니다. 각 방법의 장, 단점과 문제점 그리고 향후 솔루션을 제공합니다. 3가지 종류는 라지 스케일을 디자인하는데 아주 중요한 개념이라 읽어두면 좋을 것 같습니다. 챕터 6: Partitioning 레플리케이션 외에 라지 스케일의 어플 개발하는데 중요한 파티셔닝 개념을 깊게 파고듭니다. 가장 도움되었던 부분은 각 파티셔닝 옵션의 문제점과 해결 방법입니다. 챕터 7: Transactions ACID의 의미를 설명하고 데이터 베이스 내 commit과 transaction 그리고 Serializability의 의미에 대해 설명합니다. 챕터 8: The Trouble with Distributed Systems 제가 이 책에서 가장 중요하다고 생각한 챕터입니다. Distributed systems의 가장 큰 문제점을 설명하는데, 그중에서 "unreliable clocks" 부분을 좀 더 흥미롭게 읽었던 것 같습니다. 챕터 9: Consistency and Consensus Distributed systems를 이야기할 때 "consistency"를 빼먹을 수 없죠. 이 챕터에서는 "consistency"에 대해 깊게 파고듭니다. "consistency"는 아주 중요한 개념이기 때문에 처음 접하시거나 생소하다면 이 책에서 설명한 개념 외에 인터넷에 찾아보면서 관련 정보에 대해 더 많이 읽어보는 것이 좋을 것 같습니다. 섹션 3️⃣ Derived Data 챕터 10: Batch Processing 챕터 11: Stream Processing 교보 문고 웹사이트에서 찾아보니 한국어 번역 버전도 출판되어 있습니다. 출,퇴근 하거나 쉬는 날 짬 내서 읽고 싶은 책을 고르고 있는 분이라면 이 책 한 번쯤 읽어보는 것을 추천합니다. 다음 포스팅에서는 테크 도서를 효율적으로 읽는 법 (노트 받아 적기, 하이라이트, 복습하기 등등) 간단하게 적어볼게요. 궁금하신 점이나 책을 읽어보신 분은 감상평을 짧게 코멘트에 남겨주세요. 교보 문고 책: http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791158390983 🪴 함께 읽으면 좋은 글: [시니어 개발자가 읽어야할 책 8권 추천] https://careerly.co.kr/comments/56496 [코딩 면접을 위해 꼭 알아둬야 하는 알고리즘 패턴 8가지와 문제 유형] https://careerly.co.kr/comments/62250 [알고리즘 문제 풀기 공부하는 법] https://careerly.co.kr/comments/60668

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2022년 9월 11일 오전 8:41

 • 

저장 173조회 9,441

댓글 0