시스템 설계 면접 공략법

코딩하는스님·2022년 1월 1일
0
  • 시스템 설계 면접은 당혹스러울 때가 많다.

  • 널리 알려진 xxx 제품을 설계해보라. 라는 면접은 모호하고 범위도 너무 넓다.

  • 시스템 설계 면접은 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아가는 과정에 대한 시뮬레이션이다.

  • 설계의 순수성purity에 집착한 나머지 타협적 결정tradeoff을 도외시하고 과도한 엔지니어링over-engineering을 하는 경우가 많다.

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

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

  • 생각 없이 바로 답을 내서는 좋은 점수를 받기 어렵다.
    • 요구사항을 완전히 이해하지 않고 답을 내놓는 행위는 아주 부정적인 신호다.
    • 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 해야한다.
    • 요구사항을 정확히 이해하는 데 필요한 질문을 하자.
      • 구체적으로 어떤 기능들을 만들어야 하나?
        • 모바일/웹앱
          • 주요 기능
      • 제품 사용자 수는 얼마나 되나?
        • DAU는?
      • 회사의 규모의 성장 속도는? 특정 기간 동안 얼마나 클 것인가?
      • 주요 기술 스택은 무엇인가?

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

  • 설계안에 대한 최초 청사진을 제시하고 의견을 구하라.
  • 핵심 컴포넌트 다이어그램을 그려라.
  • 최초 설계안이 규모에 관계된 제약사항을 만족하는지를 개략적으로 계산해보라. 추정이 필요한지는 미리 확인한다.

3단계 상세 설계

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

4단계 마무리

  • 면접관이 좀 더 개선 가능한 지점을 찾아내라는 주문을 했을때는, 본인의 설계를 비판적으로 점검해보아라.
  • 설계를 다시 한번 요약해주는 것도 도움이 된다.
  • 오류가 발생했을 때, 어떤 상황이 발생할지 따져본다.
  • 운영 이슈를 점검해본다. 메트릭 수집 / 모니터링 / 로그 / 배포
  • 규모 확장 요구에 대한 대처 방안
  • 시간이 남는다면 미처 하지 못한 새부 개선사항들을 제안한다.

TODO

  • 질문을 통해 확인하라. 스스로의 가정을 옳다 생각하고 진행하지 마라.
  • 문제의 요구사항을 이해하라.
  • 정답이나 최선의 답은 없다. 요구사항을 정확히 이해하고 요구사항을 만족시켜라.
  • 면접관이 사고 흐름을 이해하도록 노력하고 소통하라.
  • 여러 해법을 제시하라.
  • 전체적 설계의 동의를 받으면 그때, 세부 컴포넌트 설명으로 넘어가라.
  • 면접관의 의견을 이끌어 내라.

NOT TODO

  • 전형적인 면접 질문에 대한 준비도 없이 가지마라.
  • 요구사항을 명확히 하지 않고 설계를 제시하지 마라.
  • 컴포넌트의 세부사항을 처음부터 설명하지 마라.
  • 막히는 부분이 있다면 힌트 요청을 주저하지 마라.
  • 소통을 주저하지 마라.
  • 설계안을 내놓았다고 안심하지 말고 의견을 구하라.

시간배분

  1. 문제 이해 및 설계 범위 확정 : 3~10분
  2. 개략적 설계안 제시 및 동의 구하기 : 10~15분
  3. 상세 설계 : 10~25분
  4. 마무리 : 3~5분

출처

알렉스 쉬, 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 인사이트, 2021, 39p-50p

profile
👨🏻‍💻👨🏽‍🦲

0개의 댓글