개발 책 추천: 가상 면접 사례로 배우는 대규모 시스템 설계 기초2
이번 독서 스터디에선 가상 면접 사례로 배우는 대규모 시스템 설계 기초2 를 완독했습니다. 최근에 개발책들이 잘 나오고 있는데 이 책은 그 중에서도 내용도 좋고 내용 전달 방식도 좋은 것 같아요
기술이나 이론을 설명하는 책은 많아요. 그러나 다양한 시스템을 설계해보는 책은 그렇게 많지 않습니다.
이 책은 실제 시스템을 설계하기 위해 이야기를 나누면서 요구사항을 정리하고 요구되는 대규모 시스템에 맞는 기술과 상황에 맞게 Trade-off 를 생각해볼 수 있는 대해 잘 정리된 책입니다.
책의 구성이 각 챕터마다 동일하게 되어 있어 새롭고 낯선 주제라도 이해하고 생각하기 좋습니다.
각 챕터는 아래와 같은 구조를 가집니다.
- 1단계 문제 이해 및 설계 범위 확정
- 2단계 개략적 설계안 제시 및 동의 구하기
- 3단계 상세 설계
- 4단계 마무리
- 요약
처음 1단계 내용을 읽고 놀랐습니다. 면접관과 지원자가 이야기를 나누는 플롯인데 다루는 크기가 생각보다 많았거든요
8장 분산 이메일 서비스에 부분 1단계의 일부입니다
지원자: 얼마나 많은 사람들이 사용하는 제품입니까?
면접관: 10억명입니다.
...??
다른 장에서도 10억건의 광고 클릭과 2백만 회 개제에 대한 데이터 크기를 다루기도 합니다.
1권에서는 이런 건수에 대한 저장소 크기나 QPS(Query Per Second) 등을 계산하는 방법도 알려주는데 2권에선 그런 내용은 생략되어 있습니다.
그리고 기능적인 부분에 대해 지원자-면접관 형태로 이야기를 나누면서 요구사항을 확정하고 Trade-off 에 대해 이야기를 나눕니다.
그리고 면접에 이야기 나눈 부분에 대해 기능 요구사항과 비기능 요구사항으로 나뉘어서 정리를 하고 개략적 추정을 진행합니다
- 기능 요구사항은 주제에 관련된 필수 기능
- 비기능 요구사항은 시스템 가용성과 지연시간, 멱등성 등과 관련된 내용입니다
- 개략적 추정은 데이터량, DAU, QPS, 저장소 크기 등을 고려하여 계산합니다
회사에서 인프라 신청 등을 할 때 필수적으로 필요한 부분인데 이런 부분을 알려주는 곳이 별로 없는데 이 책에서는 계속 이런 요구사항 정리와 개략적 추정을 통해 트레이닝이 됩니다.
2단계 개략적 설계안 제시 및 동의 구하기에서 기능 요구사항에 대한 구현을 다룹니다 API나 데이터 모델, 개략적 설계안 등을 정하는데 설계안에선 이 시스템을 구성하기 위해 어떤 데이터베이스를 고를지 어떤 도구를 통해 아키텍처를 설계할지에 대한 내용이 있어서 기술적인 부분도 공부가 많이 됩니다.
3단계 상세설계 는 2단계에서 나아가 비기능 요구사항까지 고려해서 선택할만한 시스템에 대해 알려주고 각 시스템에 대한 장단점을 정리하고 기술을 고르는 이유를 정합니다. 전체적인 프로세스와 그에 맞는 전체적인 설계도도 완성하고 대안적인 시스템에 대한 점도 정리해줍니다.
4단계 마무리 에서는 전체적인 정리를 해줍니다. 나중에 책을 다시 읽을 때 마무리 부분을 보면서 다시 리마인드하면서 공부하기 좋을 것 같습니다.
그동안 일을 하면서 Trade off 로 버렸던 부분도 있었는데 이 책을 보면서 새로 알게된 부분도 많습니다. 10장의 실시간 게임 순위표에서 레디스 sorted set 을 통한 실시간 순위 정하기 같은 내용이 그랬습니다.
책의 구성 뿐아니라 경험하기 어려운 새롭고 다양한 주제에 대해 재밌게 공부할 수 있는 책이라 추천드립니다.