개발 서적 완독하기/가상 면접 사례로 배우는 대규모 시스템 설계 기초

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 3장(시스템 설계 면접 공략법)

코드 살인마 2023. 11. 6. 21:59
728x90

효과적인 면접을 위한 4단계 접근법

책에서 제시하는 효과적인 면접을 위한 4단계 접근법이 있다.

 

해당 내용은 면접에도 유용하게 사용될 수 있지만,


문제 해결이나, 토론, 회의 등에도 유용하게 사용할 수 있는 방법론인 것 같다.

 

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

먼저 시스템을 구축 OR 어떤 질문에 대한 답을 하기 전에,
구체적인 요구사항을 질문하는 것이 좋다. 아래는 몇가지 예시이다.

  • 구체적으로 어떤 기능을 만들어야하는지?
  • 사용자 수는 얼마나 되는지
  • 회사 규모는? 기한은 언제까지인지?
  • 회사가 주로 사용하는 기술 스택은 무엇이고, 어떤 모듈들을 사용중에 있는지?

 

2단계 개략적인 설계안 제시 및 동의 구하기

해당 단계에서 초점을 맞추어야 할 것은 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이다.

  • 설계안에 대한 최초 청사진을 제시하고 의견을 구하고, 면접관을 팀원처럼 생각하고 대하라
  • 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라( ex) 클라이언트, API, 웹 서버, 데이터 저장소, 캐시 메시지큐 등등)
  • 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해본다.

 

예제

뉴스 피드 시스템(인스타그램같은)을 설계하라는 요구를 받았고, 개략적으로 피드 발행, 피드 생성으로 생각하여 설계안을 작성해보겠다.

  • 피드 발행 : 사용자가 포스트를 올리면 관련된 데이터가 캐시/데이터베이스에 기록되고, 해당 사용자의 친구 뉴스 피드에 뜨게 된다.
  • 피드 생성 : 어떤 사용자으 ㅣ뉴스 피드는 해당 사용자 친구들의 포스트를 시간 역순으로 정렬하여 만든다.

피드 발행
피드 생성

 

3단계 상세 설계

위 단계를 거치며, 아래와 같은 목표는 달성하였다.

  • 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
  • 전체 설계의 개략적 청사진 마련
  • 해당 청사진에 대한 면접관의 의견 청취
  • 상세 설계에서 집중해야 할 영역들 확인

이제 면접관과 해야 할일은 설계 대상 컴포넌트 사이의 우선순위를 정하는 것이다. 또한 실제 면접에서는 시간관리에 유의해야한다.


예를들어, 페이스북에서 뉴스피드의 순위를 매기는 데 사용되는 EdgeRank 알고리즘에 대해 시간을 소요하는 것은 바람직 하지 않다. 규모 확장 가능한 시스템을 설계할 능력을 보이는데 시간이 부족할 수 있다.

 

예제

뉴스 피드 시스템의 개략적인 설계를 마무리 하였고,깊이 탐구한다.

  • 피드 발행
  • 뉴스피드 가져오기

피드 발행

 

뉴스 피드 가져오기

 

4단계 마무리

이 단계에서는 면접관이 실제 결과물에 대해 후속 질문을 던질수도 있고, 스스로 추가 논의를 진행할 수도 있다. 이에 아래 지침을 활용해보자.

  • 면접관이 시스템 병목구간, 혹은 더 개선 가능한 지점에 대해 찾아내라 주문할 수 있다. 그렇기 때문에, 내가 설계한 부분에 대해 비판적인 시각으로 항상 바라보자.
  • 직접 만든 설계를 다시 한번 요약하자. 여러 해결책을 제시한 경우에는 요약하는 과정은 특히 중요하다.
  • 오류가 발생하면 어떤일이 생기는지, 배포, 협업 등에 대한 운영 관련 얘기도 좋다