출판사 및 저자
- 저자: 알렉스 쉬
- 출판사: 인사이트
책 소개
가상 면접 사례로 배우는 대규모 시스템 설계 기초는 차근차근 단계를 밟아나가면서 시스템을 설계한다면 어떤 것을 고려해야하는 지 경험있는 개발자 분께서 앞에서 천천히 시연해주는 듯한 그런 좋은 책이었습니다.
가능하면 읽으시는 분들께서 제목과 부제목을 통해 글의 내용이 본인에게 유용할지 판단하실 수 있도록 하는 것이 제가 이 블로그의 지향점입니다. 그런데 이 책은 도저히 맞는 부제목을 생각할 수가 없었습니다. 그 정도로 책은 제목에서 전달하겠다 말한 이야기를 충실하고 이해하기 쉽게 설명합니다. 이 책이 대상 독자로 면접자를 가정하고 있긴 하지만, 주제로 대규모 시스템 설계 기초를 다루고 있는 만큼 구직자가 아닌 분께도 충분히 도움이 될만한 내용을 담고 있다 생각합니다.
이 책은 가상 면접 사례로 배우는 대규모 시스템 설계 기초입니다. 이 책을 읽으면 대규모 시스템을 작성해야하는 상황을 맞이했을 때 발생 가능한 문제에는 어떤 것이 있고, 이를 해결하기 위해서 사용할 수 있는 방법, 그리고 과정들에 대해서 배울 수 있습니다.
이 책은 크게 세 개의 대단원 구성으로 나누어져 있습니다.
- 시스템을 설계할 때 고려해야 할 기본 원칙과 지식 이를 다루는 과정
- 부품으로 사용될 작은 시스템들을 설계하는 방법
- 이들을 조합해서 대규모 시스템을 설계하는 방법
우선 규모 확장성(QPS: Queries Per Second)을 고려해서 설계하는데 필요한 기술들을 소개합니다. 이와 관련된 기술들에는 CDN, 수평적 확장, 메시지 큐 등이 있습니다. 이런 기술들 중 어떤 것을 사용할 지 판단하는 근거를 생각하는 것 역시 중요합니다. 이를 위한 개략적인 추정을 하기 위해서 메모리 접근 시간과 같은 디테일에 대한 지식을 처음으로 가르쳐줍니다. 그리고 위 지식들을 종합해서 시스템을 설계하는 과정을 다음의 문제 이해 및 설계 범위 확정, 개략적인 설계, 상세 설계의 단계를 통해 예시를 들어가면서 설명합니다.
그리고 이 설계하는 과정을 적용해서 처리율 제한 장치, 안정 해시, 유일 ID 생성기와 같은 대규모 시스템에서 활용하게 될 작은 시스템들을 설계하는 것을 보여줍니다. 이 때는 알고리즘 수준까지 내려가서 기반 기술에 대한 자세한 설명을 포함합니다.
그리고 이들을 다 같이 엮어서 뉴스 피드 시스템, 채팅 시스템, 검색어 자동완성 시스템, 유튜브와 같은 구체적인 대규모 시스템을 설계할 때 할 법한 설계적인 고민들을 보여줍니다.
물론 실제 제품에서 해야할 고민에 비해서는 훨씬 간략한 내용들이지만, 이를 통해 시니어 개발자 분들께서 대규모 시스템을 설계할 때 고려하는 것들에 대한 편린을 엿볼 수 있었던 기회였습니다. 동시에 내가 이용하고 있는 수 많은 서비스들이 이런 고민들을 통해서 수 많은 사람들에게 안정적으로 서비스가 되고 발전한다는 것이 굉장히 어렵고 멋진 일이며 나 역시도 이런 일을 하는 사람이 되고 싶다는 조금의 욕심도 들었습니다.
여러 프로그램이 상호작용하는 시스템을 설계해야하는 상황에 놓여서 고민을 하고 있는 개발자분이시라면, 이 책을 통해 자신의 모호한 질문들을 구체화하고 해결해나가는 방향을 잡는 데 도움을 주는 든든한 선배분과 함께하는 듯한 경험을 하실 수 있으리라 생각합니다.