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

 

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

  • 생각 없이 바로 답을 내놓지 않는다.
  • 요구사항을 정확히 이해하고, 생각하고 질문하여 답을 한다.
  • 필요 질문 예시 
    • 구체적으로 어느 기능을 만드는지?
    • 제품의 사용자 수는?
    • 회사의 규모는 얼마나 빨리 커질 것으로 예상하는지? x 년 이후의 규모는?
    • 회사의 기술 스택은 무엇인지?
  • 예제
    • 모바일 앱, 웹 앱 어느쪽 지원?
    • 가장 중요한 기능은?
    • 뉴스 피드는 시간 역순인지, 정렬기준이 있는지
    • 한 사용자가 최대 몇명의 사용자와 친구를 맺을 수 있는지?
    • 사이트로 오는 트래픽 규모는?
    • 피드에 이미지, 비디오도 가능한지? 아니면 그저 텍스트인지?

 

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

  • 핵심 컴포넌트를 포함하는 다이어그램을 그린다.
    • 클라이언트(모바일/웹), API, 웹, 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등등
  • 최초 설계안이 시스템 규모에 관계된 제약사항을 만족하는지 개략적으로 계산하기
  • 예제 - 뉴스 피드 시스템 설계
    • 피드 발행 : 사용자가 포스트를 올리면 관련된 데이터가 캐시/데이터베이스에 기록되고, 해당 사용자의 친구 뉴스피드에 뜬다.
    • 피드 생성 : 어떤 사용자의 뉴스 피드는 해당 사용자 친구들의 포스트를 시간 역순으로 정렬하여 만든다.
     

 

 

 

3단계 : 상세 설계

  • 설계 대상 컴포넌트 사이의 우선순위 정하기
  • 시스템 성능 특성에 대한 질문에는?
    • 시스템의 병목 구간이나 자원 요구량 추정치에 초점 맞추기
  • 단축 URL 생성기 설계 문제에는?
    • 해시 함수 설계를 구체적으로 설명하기
  • 채팅 시스템에 대한 문제는?
    • 어떻게 하면 지연시간(latency)를 줄이고 사용자의 온/오프라인 상태를 표시할 것인지
  • 예제 - 뉴스 피드 시스템
    • 피드 발행
    • 뉴스 피드 가져오기

 

4단계 : 마무리

  • 오류가 발생하면 무슨 일이 생기는지(서버 오류, 네트워크 장애 등)
  • 운영 이슈 논의 - 메트릭은 어떻게 수집하고 모니터링과 로그는 어떻게? 배포는 어떻게 할 것인지?
  • 규모 확장을 어떻게 해나갈 것인지? 

+ Recent posts