2. 대규모 시스템 설계 기초
만일 시스템 설계 문제가 면접에 나왔다면?
• 정말 상용 서비스 수준의 아키텍처를 수립하고 나와야할까?
• 하지만… 이렇게 하려면 경험이 필요한데, 설계 문제를 가볍게 풀 정도의 경험이 있었
다면 이미 그 회사에 취직해서 면접관 자리에 앉아있었을 것이다.
• 그렇다면 시스템 설계를 위한 기초 지식, 문제 분석과 해결 능력, 의사 소통과 협업 역
량을 어떻게 길러야 할까?
• 또한 어떤 태도로 면접에 임해야 할까?
3. 대규모 시스템 설계 기초
이 책의 목차
대규모 시스템을 만들기 위해서는 무엇을 생각해야 할까?
• 1장 사용자 수에 따른 규모 확장성
• 2장 개략적인 규모 추정
• 3장 시스템 설계 면접 공략법
• 4장 처리율 제한 장치의 설계
• 5장 안정 해시 설계
• 6장 키-값 저장소 설계
• 7장 분산 시스템을 위한 유일 ID 생성기 설계
• 8장 URL 단축기 설계
• 9장 웹 크롤러 설계
• 10장 알림 시스템 설계
• 11장 뉴스 피드 시스템 설계
• 12장 채팅 시스템 설계
• 13장 검색어 자동완성 시스템
• 14장 유튜브 설계
• 15장 구글 드라이브 설계
• 16장 배움은 계속된다
4. 대규모 시스템 설계 기초
각 장에 대한 세부 구조
실제 면접 과정에서 진행해야 하는 순서에 맞춰 단계 별로 설명이 나온다
• 1단계 문제 이해 및 설계 범위 확정
• 면접관과 주고 받아야 하는 질문이 무엇일까?
• 2단계 개략적 설계안 제시 및 동의 구하기
• 개략적인 설계안을 제시한 다음에 면접관의 의견을 구하는 방법
• 3단계 상세 설계
• 핵심 사안에 대한 드릴 다운과 탐구
• 4단계 마무리
• 후속 질문, 추가 논의, 개선을 위한 내용
• 그리고 참고문헌
• 세부 사항이라는 함정에 걸리지 않기 위한 추가 학습 자료
5. 대규모 시스템 설계 기초
무엇이 이 책을 흥미롭게 만드는가?(1)
일상에서 접할 수 있는 여러 서비스에 대한 설계 방법을 다루고 있다
• 예를 위한 예가 아니라, 실제 매일 접하는 서비스를 규모 확장성과 가용성이 높게 설계하기 위한 여러 가지 생각거리를 제시한다
• 그리고 앞에서 설명한 몇 가지 단독 시스템을 다시 서브 시스템으로 활용해 더 큰 서비스에 적용하는 방법도 소개한다
• 단독 시스템: 처리율 제한 장치, 안정 해시, 키-값 저장소, 유일 ID 생성기, URL 단축기, 웹 크롤러, 알림 시스템
• 더 큰 서비스: 뉴스 피드, 채팅, 검색어 자동 완성, 유튜브, 구글 드라이브
• 시스템과 서비스 각각에 대해 규모 확장성과 가용성 측면에서 어떤 설계 대안이 존재하며 언제 무엇을 선택할지를 몇 가지 가정에 입
각해 제안한다
• 알고리즘을 고민해야 하는 경우와 시스템 아키텍처를 고민해야 하는 경우를 모두 소개하고 있으므로 상황에 맞춰 어떤 방법으로 접근
할지 힌트를 제공한다
• 뭔가를 선택할 때 어떤 이슈가 있는지 확인해서 이에 대해 합리적인 선택안을 도출하는 방안을 소개한다
6. 대규모 시스템 설계 기초
무엇이 이 책을 흥미롭게 만드는가?(2)
풍부한 다이어그램과 시나리오를 제공한다
7. 대규모 시스템 설계 기초
책을 읽을 때 주의할 사항
이 책을 모범 답안지로 생각하면 안 된다
• 이 책은 덤프가 아니다
• 이 책에 나오는 내용을 단순히 외워서 가면 분명히 역공에 걸릴 가능성이 매우 높다. → 책에서도 여러 차례 강조하지만 시스템 설계는
면접관과 상호 작용 과정에서 다양한 결론이 날 수 있는 개방형 질문이 대부분이므로 암기만으로는 안 된다
• 문제 이해 및 설계 범위 확정 단계의 요구 사항 절을 보면 도약이 일어나는 경우가 있기 때문에 풀려고 하는 문제의 도메인 지식도 확실
해야 한다 → 이 부분은 지원하는 회사의 시스템에 대해 상세한 지식으로 방어할 필요가 있다. 어차피 현업에서 머리 아픈 문제를 낼 가
능성이 높기 때문에…
• 옥의 티: 이 책의 용어 번역이 조금 흔들리고 있으며, 다이어그램 중에서 컴포넌트 구성과 데이터 흐름을 어중간하게 섞어 놓은 부분이
존재하므로 주의 깊게 읽을 필요가 있다.
8. 대규모 시스템 설계 기초
대상 독자
혹시라도 면접에서 시스템 설계 관련 질문이 나올까봐 두려운 개발자들
• 지금 막 직장을 구하러 다니는 초급 개발자들은 이 책의 독자 대상층에서 조금 벗어나 있다 → 만일, 알고리즘과 자료 구조에 약하다면
이 부분부터 확실하게 먼저 공부하고 오세요. 안 그러면 이 책을 이해하기가 힘들 겁니다.
• 3~5년 차 백엔드 부문의 경력 개발자들이 이직을 하는 과정에서 이 책이 도움이 될 가능성이 가장 높다
• 5~10년차 개발자들 중에서 클라우드나 규모 확장성이 필요한 스타트업으로 이직하는 경우라면 면접 뿐만 아니라 실제 적응을 위해 이
책에 나온 내용을 이미 숙지하고 있어야 한다.
• 주의 사항: 기존에 규모 확장성과 고가용성 시스템 설계를 해본 사람이라면 구체적인 설계 방법은 나오지 않으므로 이 책에서 새롭게
얻을 내용은 제한적이며 정리 목적으로 가볍게 읽는 선에서 그칠 것이다.
9. 대규모 시스템 설계 기초
결론
면접을 넘어서 대규모 시스템을 설계해야 한다면?
• 일단 이 책에서 소개하는 사례들은 규모 확장성과 가용성이 필요한 대표적인 사례이므로 충분히 연구할 필요가 있다
• 각 장의 가장 뒤에 나오는 참고문헌은 (제품 소개 페이지를 제외하고서는) 조금 번거롭더라도 거의 다 읽어볼 필요가 있다 → 이 책에서
다루는 내용은 그렇게 깊지 않으므로 어떻게든 추가적인 학습으로 보충하지 않으면 빈틈이 생길 것이다
• http://highscalability.com/와 같은 사이트에 소개된 구체적인 사례를 조금 더 자세히 파고들 필요가 있다
• 모든 것을 다 직접 구현하는 대신 대규모 시스템을 위한 각종 오픈소스를 직접 활용해서 경험을 쌓을 필요가 있다
• 퍼블릭 클라우드(AWS, Azure, GCP)에서 제공하는 각종 서비스 매뉴얼을 유심히 읽어보고 고가용성과 관련해 각종 백서도 읽어봐야
한다. 참고: https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/welcome.html
• 책을 보내주신 인사이트 출판사 담당자님께 감사 말씀 전합니다.
10. 발표자 소개
기술 배경
전문 검색 엔진, 임베디드 시스템(리눅스 커널 디바이스 드라이버), 빅데이터/인공지능 연구 개발,
고성능 고가용성 데이터베이스
주요활동
IT 전문서 번역 (클린 코드, 피플웨어, 해커: 광기의 랩소디, 게임 엔진 블랙 북 등)
개발강의 (삼성전자, SK C&C, 삼성SDC, 현대자동차 기술 세미나와 교육)
활동채널
블로그: https://jhrogue.blogspot.com
슬라이드 셰어: https://www.slideshare.net/jrogue/presentations
유튜브: https://www.youtube.com/c/박재호dev
문의 jrogue@gmail.com
박재호