Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

가상 면접 사례로 배우는 대규모 시스템 설계 기초 (System Design Interview) 책 스터디

책을 읽는 목적

만약 시스템 설계 문제가 면접에 나왔다면?

  • 정말 상용 서비스 수준의 아키텍처를 수립하고 나와야할까?

  • 하지만 이렇게 하려면 경험이 필요한데, 설계 문제를 가볍게 풀 정도의 경험이 있었으면 이미 그 회사에 취직해서 면접관 자리에 앉아있었을 것이다.

  • 그렇다면 시스템 설계를 위한 기초 지식, 문제 분석과 해결 능력, 의사 소통과 협업 역량을 어떻게 길러야 할까?

  • 또한 어떤 태도로 면접에 임해야 할까?

목차

대규모 시스템 설계를 위한 기초 지식

4장 부터 15장까지 이어질 내용들을 위한 기초지식이다.

  • 1장. 사용자 수에 따른 규모 확장성
  • 2장 개략적인 규모 추정
  • 3장 시스템 설계 면접 공략법

가상 면접 수행

단독 시스템

  • 4장. 처리율 제한 장치의 설계
  • 5장. 안정 해시 설계
  • 6장. 키-값 저장소 설계
  • 7장. 분산 시스템을 위한 유일 ID 생성기 설계
  • 8장. URL 단축기 설계
  • 9장. 웹 크롤러 설계
  • 10장. 알림 시스템 설계

더 큰 서비스 (앞의 단독 시스템들을 묶음) (경력 많은 사람이 대상)

  • 11장. 뉴스 피드 시스템 설계
  • 12장. 채팅 시스템 설계
  • 13장. 검색어 자동완성 시스템
  • 14장. 유튜브 설계
  • 15장 구글 드라이브 설계

추가 정보

  • 16장. 배움은 계속된다.

4장부터 15장까지의 세부 구조

실제 면접 과정에서 진행해야 하는 순서에 맞춰 단계 별로 설명이 나온다.

  1. 문제 이해 및 설계 범위 확정

    • 면접관과 주고 받아야 하는 질문이 무엇일까?
    • 출제자의 의도를 파악하기 위해 필요한 과정
  2. 개략적 설계안 제시 및 동의 구하기

    • 개략적인 설계안을 제시한 다음에 면접관의 의견을 구하는 방법
    • 내가 설계한 방향이 잘못되었을 때 이를 수정하기 위해 필요한 과정
    • 또한 면접관이 가장 관심있어하는 부분이 어디인지 빠르게 캐치하는 과정
  3. 상세 설계

    • 핵심 사안에 대한 드릴 다운과 탐구
  4. 마무리 (후속 질문, 추가 논의, 개선을 위한 내용)

    • 후속 질문에는 면접관이 함정을 파고 있는 경우가 많다.
      • 쉬워보이는 질문 하나 한 다음, 면접자가 대답하는 내용에 따라 난이도를 조젏한다.
      • 따라서 이런 후속 질문은 조심해서 다뤄야한다.
    • 추가 논의에서는 면접자가 일방적으로 대답하는 것이 아니라 면접관과 동료가 되어 함께 토론을 하는 방향으로 가는 것이 효과적이다.
      • 면접관이 생각하지 못했던 답변, 뻔하지만 아이디어가 돋보이는 답변들이 있으면 더욱 좋다.
  5. 참고문헌

    • 세부 사항이라는 함정에 걸리지 않기 위한 추가 학습 자료

이 책의 특징

일상에서 접할 수 있는 여러 서비스에 대한 설계 방법을 다루고 있다.

  • 예를 위한 예가 아니라, 실제 매일 접하는 서비스를 규모 확장성과 가용성이 높게 설계하기 위한 여러 가지 생각거리를 제시한다.

  • 그리고 앞에서 서령한 몇 가지 단독 시스템을 다시 서브 시스템으로 활용해 더 큰 서비스에 적용하는 방법도 소개한다.

  • 단독 시스템 : 4장 ~ 10장

  • 더 큰 서비스 : 11장 ~ 15장

  • 시스템과 서비스 각각에 대해 규모 확장성과 가용성 측면에서 어떤 설계 대안이 존재하며 언제 무엇을 선택할지를 몇 가지 가정에 입각해 제안한다.

  • 알고리즘을 고민해야 하는 경우와 시스템 아키텍처를 고민해야 하는 경우를 모두 소개하고 있으므로 상황에 맞춰 어떤 방법으로 접근할지 힌트를 제공한다.

  • 뭔가 선택할 때 어떤 이슈가 있는지 확인해서 이에 대해 합리적인 선택안을 도출하는 방안을 소개한다.

  • 풍부한 다이어그램과 시나리오를 제공한다.

책을 읽을 때 주의사항

이 책은 모법 답안지가 아니다. 이 책은 덤프가 아니다.

  • 이 책에 나오는 내용을 단순히 외워서 가면 분명히 역공에 걸린다. -> 책에서도 강조하지만 시스템 설계는 면접관과 상호 작용 과정에서 다양한 결론이 날 수 있는 개방형 질문이 대부분이므로 암기만으로는 안 된다.

  • 문제 이해 및 설계 범위 확정 단계의 요구 사항 절을 보면 도약이 일어나는 경우가 있기 때문에 풀려고 하는 문제의 도메인 지식도 확실해야 한다. -> 이 부분은 지원하는 회사의 시스템에 대해 상세한 지식으로 방어할 필요가 있다. 어짜피 현업에서 머리 아픈 문제를 낼 가능성이 높기 때문에...

  • 옥의 티 : 이 책의 용어 번역이 애매한 것이 있으며, 다이어그램 중에서 컴포넌트 구성과 데이터 흐름을 어중간하게 섞어쓴 부분이 존재하므로 주의 깊게 읽을 필요가 있다.

대상 독자

혹시라도 면접에서 시스템 설계 관련 질문이 나올까봐 두려운 개발자들

  • 지금 막 직장을 구하러 다니는 초급 개발자들은 이 책의 독자 대상층에서 조금 벗어나 있다. -> 알고리즘, 자료구조에 약하다면 이 책은 너무 이르다.

  • 3~5년 차 백엔드 부분의 경력 개발자들이 잊기을 하는 과정에서 이 책이 도움이 될 가능성이 가장 높다.

  • 5~10년차 개발자들 중에서 클라우드나 규모 확장성이 필요한 스타트업으로 이직하는 경우라면 면접 뿐만 아니라 실제 적응을 위해 이 책에 나온 내용을 이미 숙지하고 있어야 한다.

  • 주의사항 : 기존에 규모 확장성과 고가용성 시스템 설계를 해본 사람이라면 구체적인 설계 방법은 나오지 않으므로 이 책에서 새롭게 얻을 내용은 제한적이며 정리 목적으로 가볍게 읽는 선에서 그칠 것이다.

결론

면접을 넘어서 대규모 시스템을 설계해야 한다면?

  • 일단 이 책에서 소개하는 사례들은 규모 확장성과 가용성이 필요한 대표적인 사례이므로 충분히 연구할 필요가 있다.

  • 각 장의 가장 뒤에 나오는 참고문헌은 (제품 소개 페이지를 제외하고서는) 다 읽어봐야만 한다. -> 이 책에서 다루는 내용은 그렇게 깊지 않으므로 어떻게든 추가적인 학습으로 보충하지 않으면 빈틈이 생길 것이다. 그리고 이는 면접에서 어색한 답변으로 이어질 것이다.

  • http://highscalability.com 와 같은 사이트에 소개된 구체적인 사례를 조금 더 자세히 파고들 필요가 있다. (이 책보다 이 사이트가 더 깊은 내용을 담고 있다.)

  • 모든 것을 다 직접 구현하는 대신 대규모 시스템을 위한 각종 오픈소스를 직접 활용해서 경험을 쌓을 필요가 있다.

    • 경험에서 우러나오는 말을 하는 것이 매우 중요하다.
  • 퍼블릭 클라우드(AWS, Azure, GCP) 에서 제공하는 각종 서비스 메뉴얼을 유심히 읽어보고 고가용성과 관련해 각종 백서도 읽어봐야 한다.

    • 여기서 나오는 숫자들, SLA(서비스 수준 협약서)를 눈여겨보자. 이를 질문할 수도 있다.
    • 예를들어, AWS 에서 Deploy 를 만들려면 고가용성을 위해 어떻게 만들어야 하는가? 이는 실습을 통해 경험을 쌓아야만 대답할 수 있다.
    • 각종 Docs 도 읽어보자.

Reference

About

[학습][스터디] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 책을 함께 읽고 공부한 내용을 기록한다.

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors