Skip to content

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

Notifications You must be signed in to change notification settings

kangbada0728/study-system-design-interview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6