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

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

  • 시스템 설계 시 질문하여 요구사항과 가정들을 분명히 하자.
  • 엔지니어가 가져야 할 가장 중요한 기술 중 하나는 올바른 질문을 하는 것.
  • 만약 시스템 설계를 한다면 어떤 질문들을 만들어야 할까?

예제

뉴스 피드 시스템 설계하라는 요구를 받았다고 한다면 다음 질문을 해볼 수 있을것이다.

  • 모바일 앱과 웹 앱 가운데 어느 쪽 지원
    -> 둘 다 지원
  • 가장 중요한 기능은 무엇인가요?
    -> post, 친구들과 피드 기능을 볼 수 있어야 한다. 
  • 정렬 기준
    -> 시간 역순으로 정렬
  • 최대 몇명의 사용자
    -> 5000명
  • 트래픽의 규모는?
    -> dau 천만명
  • 포스트에서 지원하는 파일 양식은 무엇인가요?
    -> 이미지나 비디오 같은 미디어 파일 포스트

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

  • 설계안에 대해 최초 청사진을 제시하고 의견을 구한다. 
  • 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그린다. 
  • 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는 지를 개략적으로 개선

예제

뉴스 피드 시스템을 설계하라

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

3단계 상세 설계

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

예제

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

 

4단계 마무리

  • 시스템의 병목구간, 개선 가능한 지점을 찾아내라 주문할 수 있다. 
  • 오류가 발생하면 무슨 일이 생기는지 (서버 오류, 네트워크 장애 등) 따져보는것이 좋을거 같다. 
  • 운영 이슈 관리 - 메트릭은 어떻게 수집하고 모니터링은 어떻게 할건지

하지 말아야할것

  • 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 마라. 
  • 소통을 주저하지 말자. 침묵 속에 설계를 진행하지 마라. 

시간 배분 

  • 1단계 - 문제 이해 및 설계 범위 확정 (3m - 10m)
  • 2단계 - 개략적 설계안 제시 및 동의구하기 (10m - 15m)
  • 3단계 - 상세 설계 (10m - 25m)
  • 4단계 - 마무리 (3m - 5m)