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

3. 시스템 설계 면접 공략법

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

    1. 문제 이해 및 설계 범위 확정
      • 요구사항을 완전히 이해하지 않고 답을 내놓는 행위는 아주 엄청난 부정적 신호(Red Flag)
      • 바로 답부터 내지 말고 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 할 것
      • 엔지니어가 가져야 할 가장 중요한 기술 중 하나는 올바른 질문을 하는 것, 적절한 가정을 하는 것, 그리고 시스템 구축에 필요한 정보를 모으는 것
      • 요구사항을 정확히 이해하는데 필요한 질문 예시
        • 구체적으로 어떤 기능들을 만들어야 하는지
        • 제품 사용자 수는 얼마나 되는지
        • 회사의 규모는 얼마나 빨리 커지리라 예상하는지 → 3달, 6달, 1년 뒤의 회사 규모는 얼마나 될지
        • 회사가 주로 사용하는 기술 스택은 무엇인지 → 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는지
    2. 개략적인 설계안 제시 및 동의 구하기
      • 설계안에 대한 최초 청사진을 제시하고 의견을 구하라. 면접관을 마치 팀원인 것처럼 대하기
      • 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그리기 → 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 같은 것들이 포함될 수 있음
      • 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해보기 → 계산 과정은 소리 내어 설명 → 이런 개략적 추정이 필요한지는 면접관에게 미리 물어보도록 하기
      • 가능하다면 시스템의 구체적 사용 사례도 몇 가지 살펴보기
        • Edge Case를 발견하는데 도움이 될 것
    3. 상세 설계
      • 설계 대상 컴포넌트 사이의 우선순위를 정하기
    4. 마무리
      • 면접관은 설계 결과물에 후속 질문을 던질 수 있고, 스스로 추가 논의를 진행할 수 있음
  • 면접 세션에서 해야 할 것과 하지 말아야 할 것

    • 해야 할 것
      • 질문을 통해 확인하기 → 스스로 내린 가정이 옳다 믿고 진행하지 말기
      • 문제의 요구사항을 이해하기
      • 정답이나 최선의 답안 같은 것은 없다는 점을 명심하기
      • 면접관이 우리의 사고 흐름을 이해할 수 있도록 하기
      • 가능하다면 여러 해법을 함께 제시하기
      • 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 세부사항을 설명하기 → 가장 중요한 컴포넌트부터 진행
      • 면접관의 아이디어를 이끌어 내기
      • 포기하지 말기
    • 하지 말아야 할 것
      • 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 말기
      • 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말기
      • 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말기 → 개략적 설계를 마친 뒤 세부사항으로 가기
      • 진행 중에 막혔다면 힌트를 요청하기
      • 소통을 주저하지 말기
      • 설계안을 내놓는 순간 면접이 끝났다고 생각하지 말기