3장 시스템 설계 면접 공략

김수환·2024년 11월 11일
0

시스템 설계 면접은 자세한 설계를 요하지는 않는다.
시스템 설계 면접은 다음과 같은 점을 보기 위함이다.

  • 기술적 설계 능력
  • 문제 이해 능력
  • 협력/소통 능력
  • 압박 상황 대처 능력
  • 질문 능력
  • 의심하고 반문하는 능력

1단계 : 문제를 이해하라

올바른 질문을 하고, 올바른 가정을 하고 시스템 구축에 필요한 정보를 모으는 능력이 필요하다.

요구사항을 이해하는데 다음과 같은 질문을 던져야 한다.

  • 구체적으로 어떤 기능을 만들어야 하나?
  • 사용자 수는 어떻게 되는가?
  • 회사 예측 성장률 : 3, 6, 12 개월 뒤 규모
  • 회사의 기술 스택
  • 설계를 단순화 하기 위해 활용할 수 있는 기존 서비스는 무엇이 있나?
  • 웹/앱 어떤 서비스로 제공하는가?
  • 기능별 조건을 물어보기 (게시물 정렬 순서)

요구사항을 이해하고 모호함을 없애는게 가장 중요하다.

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

개략적인 설계안을 제시하고 면접관의 동의를 얻어야 한다.

  • 최초 설계 청사진을 제공하고 의견을 구해야 한다.
  • 면접관을 팀원이라 생각하고 대해야 한다.
  • 핵심 컴포넌트를 포함하는 다이어그램을 그린다.
    • 클라이언트(웹/앱), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등등
  • 최초 설계안이 시스템 규모에 관계된 제약사항을 만족하는지 개략적으로 계산한다.
    • 소리내서 계산 과정을 읊을 것.
    • 계산 전에 개략적인 계산이 필요한지 물을 것.
  • 상황에 따라 API, ERD 설계가 필요할 수 있다.

3단계 : 상세 설계

상세설계에서 어떤 컴포넌트에 집중해야 하는지 파악해야 함

설계 대상 컴포넌트 사이의 우선순위

시스템 성능 특성에 대한 질문에는?

  • 시스템의 병목 구간이나 자원 요구량 추정치에 초점을 맞출 필요가 있다.

단축 URL 생성기 설계 문제에는?

  • 해시 함수 설계를 구체적으로 설명해야 한다.

채팅 시스템에 대한 문제는?

  • 어떻게 하면 지연시간을 줄이고 사용자의 온/오프라인 상태를 표시할 것인지에 집중해야 한다.

시간관리도 중요하다.
사소한 디테일 설명하는 데에 시간을 너무 많이 쓰면 안된다.

4단계 : 마무리

면접관이 설계에 대한 추가질문을 던질 수 있다.

스스로 개선할 부분을 찾아야 할 수 있다.

  • 완벽한 설계는 없다.
  • 겸손한 자세를 유지하라.

메트릭, 로그, 배포 등에 질문이 있을 수 있다.

  • 어떻게 모니터링 할 것인지
  • 어떻게 배포 할 것인지

scale out 에 대해서도 대비해야 한다.

  • 100만 사용자에서 1000만 사용자로 늘어버린다면?

장애대응에도 대비해야 한다.

  • 네트워크 오류
  • 물리적 장애 등

해야 할 것

  • 전형적인 질문에 대한 답은 미리 준비할 것.

  • 질문을 통해 확인할 것.

  • 문제의 요구사항을 이해할 것.

  • 요구사항이나 가정을 분명히 할 것

  • 최선의 답은 없다는 것을 명심할 것

    • 다만, 본인의 답에 이유가 있어야 한다.
  • 면접관과 소통할 것

  • 가능하다면 여러 해법을 제공할 것

  • 컴포넌트의 세부사항을 깊이 설명하지 말것.

  • 하다가 막히면 힌트를 요구할 것.

profile
hello human

0개의 댓글