데이터 중심 애플리케이션 설계 리뷰

Hyemi Noh
5 min readJun 4, 2023

--

아마존에서 무려 4119개의 레이팅이 있고 별점 4.8/5.0에 이르는 분산 시스템 및 데이터 분야 책의 명작을 읽었다. 다 읽는데 거의 한 달 반이 걸렸다. 내용이 방대한 만큼 한 번 정리해보면 좋을 것 같아서 리뷰를 작성해본다.

책 소개

https://image.yes24.com/goods/59566585/XL

번역본으로 읽어서 이미지도 번역본으로 첨부해본다. 책 커버가 멧돼지여서 멧돼지 책이라고도 불린다. yes24의 책 소개를 인용하면 “데이터를 처리하고 저장하는 다양한 기술의 장단점을 검토”하는 책이다. 분산시스템이나 데이터 분야를 공부해봤다면 한 번 쯤 들어봤을 용어와 기술이 등장한다. 저자는 캠브리지 대학교의 분산 시스템 연구원이면서 링크드인에서 소프트웨어 엔지니어로도 일했다. 그래서 주제에 해당하는 이론과 실전 내용 모두 잘 나와있는 게 가장 큰 장점같다. 단점은 어렵다는 것이다. 🥲

추천 대상

  • 실무에서 분산 시스템을 쓰거나 쓸 예정인 2년차 이상의 데이터 엔지니어 혹은 플랫폼 백엔드 엔지니어
  • 데이터 저장, 처리, 전달 혹은 분산 시스템 전반에 관심이 있는 2년차 이상의 소프트웨어 엔지니어

책 내용이 쉽지는 않아서 혼자 읽는 것보다는 여러 명이서 스터디 교재로 읽는 걸 추천한다. 만약 분산 시스템을 어느 정도 알고 있고 시간을 들여서 천천히 읽고 싶다면 혼자 읽는 것도 괜찮다.

읽게된 계기

사실 2년 전쯤에 이전 회사에서 이 책으로 스터디를 한 적이 있다. 하지만 퇴사를 하면서 책을 반 정도 밖에 못 읽었다. 그때 당시에도 많은 사람들이 추천하는 좋은 책이라는 걸 알고 있었기 때문에 아쉬움이 컸다. 하지만 방대한 분량과 당장 부족한 다른 부분에 집중하다보니 다시 읽어볼 엄두를 못 냈다.

현재 데이터 솔루션 회사에서 데이터 엔지니어로 일하고 있고 올해 2분기쯤부터는 더 확실하게 데이터 엔지니어링을 해봐야겠다고 마음을 먹었다. 그런데 데이터 엔지니어링을 위한 근본 지식이 아직 부족하다는 생각이 들었다. 기술 스택도 중요하지만 그 기저에 깔린 근본 지식을 알면 더 이해하기 쉽고 잘 사용할 수 있을 것 같았다. 그래서 분산 시스템 및 데이터 관련 이론 및 실무 내용이 잘 나와있는 이 책을 읽기로 결정했다.

전반적인 내용

책은 세 파트로 나눠져있다.

첫번째 파트는 먼저 신뢰성, 확장성, 유지보수성 같은 애플리케이션을 잘 만들기 위해서 필요한 특성에 대해서 설명한다. 그리고 RDB, Document DB, Graph DB등 다양한 데이터 모델과 쿼리 랭귀지가 나오는데 이 부분은 스킵해도 큰 상관은 없을 것 같다. 다음은 SS테이블, LSM 트리, 컬럼 지향 방식 같은 데이터 저장을 위한 데이터 구조가 나온다. 마지막으로 데이터 직렬화(Serialization), 스키마, 프로세스간 데이터 전달이 나온다. 책에서는 의도적으로 ‘부호화’라고 했지만 일반적으로 직렬화라고 해서 이렇게 표현했다. 이론적으로는 데이터 구조가 핵심 챕터이고 실무적으로는 마지막이 핵심 챕터이다. 특히 딱 한가지만 읽어야한다면 스키마 관련 내용을 강력 추천한다. 실무에서 스키마로 인한 고통을 덜 받을 수도 있기 때문이다.

두번째 파트는 분산 시스템을 공부하면 반드시 보게 되는 복제(replication), 파티셔닝, 트랜잭션, 일관성, 합의가 차례로 나온다. 업무를 하면서 AWS Dynamo, ElasticSearch, Cassandra 등 분산시스템을 쓴다면 ‘복제’와 ‘파티셔닝’은 꼭 보는 걸 추천한다. 여기에서 각 접근법 별로 어떤 장점이 있고 어떤 이슈가 발생할 수 있는지 알려주기 때문이다. ‘트랜잭션’은 RDB를 쓰면서 트랜잭션과 관련된 발생할 수 있는 다양한 이슈를 알 수 있다. ‘분산 시스템의 골칫거리 부분’은 네트워크 결함과 시스템의 시계는 믿을 게 못 된다는 충격적인 사실이 나온다. 마지막 ‘일관성과 합의’는 동시에 여러 대상에 쓰기 및 읽기가 가능한 상황에서 어떻게 일관성을 보장할 건지에 대해 내용이 나온다. 파트를 요약하면 시스템을 안정적으로 만들기 위해 복제와 파티셔닝을 어떻게 할 수 있는지, 이로 인해 장애 복구와 읽기및 쓰기에 어떤 이슈가 발생할 수 있는지, 이를 해결하기 위해 어떤 방법이 있는지가 소개된다.

세번째 파트는 배치 처리, 스트림 처리가 나온 뒤, 저자가 생각하는 데이터 시스템의 미래가 나온다. 배치 처리는 세부 내용보다는 기저에 깔린 철학, 맵리듀스 전반, 맵리듀스 이후의 내용이 나온다. 스트림 처리는 이벤트 기반의 메세징 시스템, CDC, 이벤트 소싱, 스트림 분석이 나온다. 역시 이전 파트처럼 스트림에서 발생할 수 있는 이슈와 해결 방법이 나온다. kafka 같은 이벤트 스트리밍 기술을 업무에 사용하거나, 하나의 쓰기를 여러 저장소에 반영해야하거나, 스트림 분석을 해야한다면 도움이 될 것 같다. ‘데이터 시스템의 미래’에서는 여러 내용이 나오지만 end-to-end argument가 가장 기억에 남는다. 결국 안전한 시스템을 위해 TCP, 트랜잭션 같은 기저 기술만으로는 한계가 있고 end user client로부터 모든 연산 경로에 사용하는 식별자가 필요하다고 저자는 주장한다. 가장 마지막에는 기술이 아닌 데이터를 다루는 소프트웨어 엔지니어로서 필요한 윤리 의식이 나온다. 소프트웨어 엔지니어로서 일하다보면 이런 부분은 간과하기 쉬운데, 한 명의 사회 구성원으로서 꼭 명심하고 있어야 할 것 같다.

마무리

드디어 600 페이지에 달하는 이 책을 완독했다. 뭔가 해냈다는 생각이 들어서 뿌듯하다. 하지만 모든 내용을 잘 이해한 건 아니다. 정말 이해가 안 된 것도 있고 쉽지 않은 내용을 몇 십분 동안 계속 읽으려니 집중이 안 되기도 했다. 특히 9, 11, 12 챕터가 제일 익숙하지 않아서 머리에 잘 안 들어왔다. 2년 뒤쯤에 다시 한 번 읽어야되나 고민이 된다. 아무튼 한 번이라도 완독한 내 자신을 칭찬한다. 😇

--

--

Hyemi Noh
Hyemi Noh

No responses yet