로고jiohh blog

3장 - 시스템 설계 면접 공략법

목표

시스템 설계 면접은 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션이다. 정답이 정해져있는 것이 아니고 설계 기술을 시연하고, 여러 결정들의 방어 능력을 보이는 자리이며 면접관의 피드백을 건설적인 방식으로 처리할 자질이 있음을 보이는 자리이다.

설계 능력의 기술적 측면 평가만이 아닌 협력에 적합한 사람인지, 압박이 심한 상황도 잘 헤쳐 나갈 자질이 있는지, 모호한 문제를 건설적으로 해결할 능력이 있는지를 살펴 볼 수있는 시스템 설계 면접에 대해 효과적인 접근법을 알아보자.

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

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

시스템 설계 면접을 볼 때는 생각 없이 바로 답을 내서는 좋은 점수를 받기 어렵다.
요구사항을 완전히 이해하지 않고 답을 내놓는 행위는 아주 엄청난 부정적 신호다.

가장 중요한 기술은 올바른 질문을 하는 것, 적절한 가정을 하는 것, 그리고 시스템 구축에 필요한 정보를 모으는 것이다.

  • 구체적으로 어떤 기능들을 만들어야 하나?
  • 제품 사용자 수는 얼마나 되나?
  • 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가?
  • 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?

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

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

개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이 중요하다, 이때 면접관과 협력하며 진행하면 좋다.

  • 설계안에 대해 최초 청사진을 제시하고 의견을 구하라
    면접관을 마치 팀원 인 것처럼 대하라.
  • 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
    클라이언트, API, 서버, 데이터 저장소 같은 것들이 포함될 수 있을 것이다.
  • 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지 개략적으로 계산해 보라.

3단계 상세 설계

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

3단계 까지는 위의 목표들은 달성한 상태여야한다. 앞으로 해야할일은 아래와 같다.

  • 설계 대상 컴포넌트 사이의 우선순위를 정하는 것
  • 면접관이 집중 했으면 하는 영역을 알려주기도함
  • 시스템 성능 특성에 대한 질문을 던질 수도 있음(시스템의 병목 구간, 자원 요구량 추정치 등)
  • 대부분의 경우 면접관은 여러분이 특정 시스템 컴포넌트들의 세부사항을 깊이 있게 설명하는 것을 보길 원한다.

ex) 채팅 시스템
어떻게하면 지연시간을 줄이고 사용자의 온/오프라인 상태를 표시할 것인지?

시간 관리에도 주의를 해야한다. 사소한 세부사항을 설명하느라 능력을 보일 기회를 놓필 수 있다.

4단계 마무리

마지막 단계에서 후속 질문 또는 스스로 추가 논의를 하도록 할 수 있음
마무리 단계에서 아래의 지침을 활용 할 수 있다.

  • 좀더 개선 가능한 지점을 찾아내라 주문할 경우
    ➡️ 완벽하거나 개선 부분 없다는 답 X
    비판적 사고 능력을 보이고 좋은 인상을 남길 기회
  • 설계를 한번 다시 요약(여러 해결책을 제시한 경우 중요)
    ➡️ 면접관의 기억을 환기시키는 효과
  • 오류가 발생하면 무슨 일이 생기는지 따져보기(서버 오류, 네트워크 장애등)
  • 운영 이슈도 논의할 가치가 충분하다.(메트릭 수집 및 모니터링, 로그, 어떻게 배포?)
  • 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지?
  • 필요하지만 다루지 못했던 세부적 개선사항들을 제안

해야할 것

  • 질문을 통해 확인하라.
  • 문제의 요구사항을 이해하라
  • 정답이나 최선의 답안 같은 것은 없다는 점을 명심하라.
  • 면접관이 여러분의 사고 흐름을 이해할 수 있도록 하라.
  • 가능하다면 여러 해법을 함께 제시하라.
  • 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 세부사항을 설명하기 시작하라. 가장 주요한 컴포넌트부터 진행하라
  • 면접관의 아이디어를 이끌어 내라.
  • 포기하지 말라.

하지 말아야 할 것

  • 전형적인 면접 준비들에도 대비하지 않은 상태에서 면접장에 가지말라
  • 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라
  • 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라
  • 진행 중에 막혔다면, 힌트를 청하기를 주저하지 말라 + 소통을 주저하지 말라
  • 설계안을 내놓는 순간 면접이 끝난다고 생각하지말라

시간 배분

45분 시간이 주어졌을떄 다음과 같이 배분하는 것이 좋다.

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