Seyun(Marco) 2024. 5. 5. 18:05
728x90
  • 시스템 설계 면접이란 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션이다. 이 문제에는 정해진 결말도 없고, 정답도 없다. 설계 기술을 시연하는 자리이고, 설계 과정에서 내린 결정들에 대한 방어 능력을 보이는 자리이며, 면접관의 피드백을 건설적인 방식으로 처리할 자질이 있음을 보이는 자리이다.
  • 많은 사람이 시스템 설계 면접은 지원자의 설계 능력의 기술적 측면을 평가하는 자리일 거라 생각한다. 사실은 그 이상이다. 지원자가 협력에 적합한 사람인지, 압박이 심한 상황을 헤쳐 나갈 자질이 있는지, 문제를 해결할 능력이 있는지 좋은 질문을 던질 능력이 있는지등을 살펴볼 수 있다.
  • 훌륭한 면접관은 부정적 신호도 놓치지 않는다. 설계의 순수성에 집착한 나머지 트레이드오프를 하고 마는 엔지니어들이 현업에도 많다. 그 결과로 값비싼 대가를 치르고 있다. 면접관에게 이런 같은 경향이 있다는 것을 보이고 싶지 않을 것이다. 이것 이외의 부정적 신호로는 완고함, 편협함 같은 것들도 있다.

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

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

  • 정답 따위는 없다는 걸 상기하자. 그러니 바로 답부터 들이밀지 말라. 속도를 늦춰라. 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하라.
  • 올바른 질문을 하는 것. 적절한 가정을 하는 것. 그리고 시스템 구축에 필요한 정보를 모으는 것이다.
  • 아래와 같은 질문들을 생각해봐라.
    • 구체적으로 어떤 기능들을 만들어야 하나?
    • 제품 사용자 수는 얼마나 되나?
    • 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가?
    • 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤것들이 있는가?

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

  • 설계안에 대한 최초 청사진을 제시하고 의견을 구하라. 면접관을 마치 팀원인 것처럼 대하라.
  • 다이어그램 또는 설계 그림을 그려라.
  • 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 계산해 보라. 계산 과정은 소리 내어 설명하라. 아울러, 이런 개략적 추정이 필요한지는 면접관에게 미리 물어보도록 하자.
  • 가능하다면 시스템의 구체적 사용 사례도 몇 가지 살펴보자.

3단계. 상세 설계

  • 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
  • 전체 설계의 개략적 청사진 마련하고 해당 청사진에 대한 면접관의 의견 청취
  • 상세 설계에서 집중해야 할 영역들 확인
  • 설계 대상 컴포넌트 사이의 우선순위를 정하는 것
  • 시간관리를 하는 것도 중요하다.
  • 긍정적 신호를 전달하는 데 집중해야 한다. 불필요한 세부사항에 시간을 쓰지 말라.

4단계. 마무리

  • 면접관이 시스템 병목구간 및 개선 가능한 지점을 찾아내라 주문할 수 있다. 개선할 점은 언제나 있게 마련이다. 이런 질문은 여러분의 비판적 사고 능력을 보이고, 마지막으로 좋은 인상을 남길 기회다.
  • 여러분이 만든 설계를 한번 다시 요약해주는 것도 도움이 될 수 있다.
  • 오류가 발생하면 무슨 일이 생기는지(서버 오류, 네트워크 장애 등) 따져보면 흥미로울 것이다.
  • 운영 이슈도 논의할 가치가 충분하다. 메트릭은 어떻게 수집하고 모니터링 할 것인가? 로그는? 시스템은 어떻게 배포해 나갈것인가?
  • 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지도 흥미로운 주제다. 예를 들어, 백만 사용자는 감당할 수 있다. 그러면 천만 사용자를 감당하려면 어떻게 해야 하는가?
  • 필요하지만 다루지 못했던 세부적 개선사항들을 제안할 수 있다.

면접에서 해야할것 및 하지 말아야 할것

해야 할 것

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

하지 말아야 할 것

  • 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 말라.
  • 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라.
  • 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라. 개략적 설계를 마친 뒤에 세부사항으로 나아가라.
  • 진행 중에 막혔다면, 힌트를 청하기를 주저하지 말라.
  • 다시 말하지만, 소통을 주저하지 말라. 침묵 속에 설계를 진행하지 말라.
  • 설계안을 내놓는 순간 면접이 끝난다고 생각하지 말라. 면접관이 끝났다고 말하기 전까지는 끝난 것이 아니다. 의견을 일찍, 그리고 자주 구하라.
728x90
728x90