본문 바로가기
개발/대규모 시스템 설계

3. 시스템 설계 interview

by Mingvel 2023. 2. 26.
  • 시스템 설계 interview는 두 명의 동료가 모호만 문제를 풀기 위해 협력해 그 해결책을 찾아가는 과정의 시뮬레이션이다
  • 나의 설계 기술을 시연하는 자리이고, 설계 과정에서 내린 결정들에 대한 방어 능력을 보이는 자리이며, 면접관의 피드백을 건설적으로 처리할 자질이 있음을 보이는 자리이다
  • 협력에 적합한 사람인지, 압박이 심한 상황에도 잘 해쳐나갈 수 있는 사람인지, 모호한 문제를 건설적으로 해결할 능력이 있는지 등을 살펴볼 수 있다
  • 부정적 신호를 주지 않도록 주의하자
    • 완곡함, 편협함, 오버 엔지니어링

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

  • 생각 없이 바로 답을 내놓지 말자
  • 요구사항을 완전히 이해하지 않고 답을 내놓는 것완벽한 부정적 신호이다
  • 올바른 질문을 하자
  • 적절한 가정을 하자
  • 시스템 구축에 필요한 정보를 모으자
  • 질문
    • 구체적으로 어떤 기능을 만들어야 할까
    • 제품 사용자 규모는 어떻게 되는가
    • 서비스의 규모는 얼마나 빠르게 성장할 것으로 예상되는가
    • 회사가 주로 사용하는 기술 스택이 무엇인가

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

  • 설계안에 대한 개략적인 설계안을 제시하라
  • 화이트보드나에 핵심 컴포넌트를 포함하는 다이어그램을 그려라
  • 최초 설계안이 시스템 규모에 관게 된 제약사항들을 만족하는지 개략적으로 계산해보라
    • 이런 개략적인 추정이 필요한 지 미리 물어보자
  • 2단계까지 마쳐야 할 것
    • 시스템 전반적으로 달성해야 할 목표기능 범위 확인
    • 전체 설계의 개략적 청사진 마련
    • 해당 청사진에 대한 의견 청취
    • 상세 설계에서 집중해야 할 영역 확인

3단계 - 상세 설계

  • 내가 선택한 컴포넌트의 세부사항깊이 있게 설멍하기를 원한다
  • 어떤 함수를 사용한다면 구체적으로 어떻게 설계한 것인지 구현에 대한 내용을 듣고 싶을 수 있다
  • 사소한 세부사항을 설명하느라 긍정적 신호 전달을 놓칠 수 있다
  • 규모 확장 가능한 시스템을 설계할 능력이 있다는 것을 입증하는데 신경써야한다

4단계 - 마무리

  • 설계 결과물에 관한 후속 질문 + 스스로 추가 논의를 진행하도록 할 수 있는 단계이다
  • 시스템 병목 구간 혹은 개선 가능한 지점을 찾으라는 주문이 오면, 반드시 찾아내라 (개선할 점은 언제나 있기 마련이다)
  • 내가 만든 설계를 다시 한번 요약해서 전달하자
  • 에러가 발생하면 어떤 에러가 발생할 지 예측해보는 것도 좋다
  • 모니터링, 로그, 시스템은 어떻게 배포할지에 대한 내용도 좋다
  • 미래에 닥칠 규모 확장에 대한 얘기도 좋다

해야할 것

  • 질문을 통해 확인하라
  • 스스로 내린 가정이 옳다고 진행하지 말자
  • 문제의 요구사항을 반드시 이해하자
  • 정답이나 최선의 설계는 없다는 것을 명심하자
    • 요구사항에 대한 구현은 각 회사가 처한 환경에 따라 다를 수 있다
  • 사고의 흐름을 드러내자
  • 소통하자
  • 여러 해법을 제시하자
  • 개략적 설계에 대한 동의를 얻으면, 가장 중요한 세부사항부터 설명하자
  • 면접관의 아이디어를 이끌어내자
  • 포기하지 말자

하지 말아야 할 것

  • 전형적인 면접 질문에 당연히 대비해야 한다
  • 요구사항이나 가정들이 분명하지 않은 상태에서 설계를 제시하지 말자
  • 처음부터 특정 컴포넌트에 대해 너무 깊이 설명하지 말자
  • 진행중에 막혔다면, 힌트를 청하기를 주저하지 말자
  • 소통을 주저하지 말자
  • 침묵속에 설계하지 말자
  • 설계안을 내놓는 순간 모든게 다 끝이라고 생각하지 말자.
  • 의견을 일찍, 그리고 자주 구하자

시간 배분

  • 전체 시간을 45분으로 가정한다
    • 1단계 - 문제 이해 및 설계 범위 확정 : 3 ~ 10 분
    • 2단계 - 개략적 설계안 제시 및 동의 구하기 : 10 ~ 15분
    • 3단계 - 상세 설계 : 10 ~ 25분
    • 4단계 - 마무리 : 3 ~ 5분
반응형

댓글