7 min read

[System Design Interview] CH3. 시스템 설계 면접 공략법

가상면접 사례로 배우는 대규모 시스템 설계 기초

Author: qyinm
[System Design Interview] CH3. 시스템 설계 면접 공략법

우리는 과연 시스템 설계 면접 시 어떻게 해야할까. 코딩 테스트와 달리 시스템 설계는 정답이 없기에 현재 상황에 맞는 시스템 설계를 트레이드오프를 고려하면서 비판적으로 설계하는 것이 중요한 것 같다.
결국 면접관의 긍정 플래그(flag)를 확인하는 면접 방식이 필요해 보인다.

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

면접에 정답은 없으나 아래와 같은 흐름으로 흘러 간다고 책에서 설명하고 있다. (나는 아직 면접을 본적이 없으니 일단 믿어본다)

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

이 단계를 보면서 많은 생각이 들었다. 면접관은 이렇게 말한다.

면접관: ???님 이런 걸 만들려고 하는 데 어떻게 설계를 하는 것이 좋을까요? 여기서 바로 대답을 하는 것이 아니라 가정을 자세히 해야한다. 가상으로 내가 진짜 개발자가 되었다는 가정하에 기획서 없이 위와 같이 물어봤을 때 내가 무엇을 더 물어봐야 하는 지 문제 요구사항을 뾰족하게 만들어라.

보통의 경우 면접관과의 질문을 하며 요구사항에 대한 정확한 이해가 필요하다.

예시

  • 회사의 주 기술스택
  • 제품 사용자 수
  • 회사 규모의 성장률
  • 구체적으로 어떤 기능을 만들어야 하는가

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

개략적인 설계를 통해 면접관과의 동의를 구한다.

  • 간단하게 먼저 구성하고 질문을 하면서 실제 팀원처럼 질문하자
  • 화이트보드에 간단한 다이어그램을 그리자
  • 설계를 하면서 실제 요구사항을 만족하는 지 계산하면서 면접관과 소통하자

3단계: 상세 설계

이 단계에서 거의 면접관은 시스템 설계에 대한 이해를 끝냈다.

하지만 이제 각 설계 특성에 맞게 컴포넌트에 대한 자세한 설명이 필요하다. 가령 **‘단축 URL 생성기’**라면 해시 함수 설계에 대해 더 자세히 설명이 필요하다.

각 기능에 대한 컴포넌트의 우선순위를 생각하고 이에 대한 설명과 어필이 필요하다. 불필요한 것에 대한 설명으로 너무 많은 시간을 허비하지 않아야 한다.

4단계: 마무리

이제 면접관의 후속 질문에 대해 답변이 필요하다.

미리 우리가 준비가 필요하다

  • 만들어진 설계에 대한 병목
  • 어떻게 운영할건지? 메트릭, 모니터링, 로그 등등
  • 오류 발생 시 어떤 문제 발생하는 지?

면접 세션에서 해야 할 것 / 하지 말아야 할 것

해야할 것

  • 질문으로 확인하기
  • 문제 요구사항 이해
  • 정답과 최선의 답은 없다. 회사 규모나 여러 사항에 필요한 설계가 모두 다르다
  • 면접관에게 우리의 사고의 흐름을 보여라
  • 여러 해법을 제시하자
  • 개략적 설계 다음 각 컴포넌트에 대한 설명을 하자
  • 면접관의 아이디어를 끌어내자
  • 포기하지 말자(중꺾마)

하지 말아야 할 것

  • 전형적인 문제를 대비하지 않는 것
  • 요구사항과 가정을 분명히 하지 않은 채 설계 제시
  • 처음부터 컴포넌트에 대한 깊은 설명. 개략적 설명이 우선
  • 소통하지 않는 것
  • 진행 중 막히는데 힌트를 청하지 않는 것
  • 의견을 구하지 않는 것

시간 배분

45분-1시간 정도의 시간은 짧기에 시간 배분은 필수!

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

내 생각

비단 이는 소프트웨어 엔지니어 면접에서 모두 통하는 것과 같다. 실제 프로젝트를 진행해보면서 최고의 설계는 없다고 생각한다. 현재 팀의 상황에 맞는 설계를 하면서 어떤 트레이드오프가 발생하는 지 인지하는 것이 필요한 것 같다.

또한 시스템설계 면접은 단순히 똑똑함이 아니라 실제 개발 혹은 프로젝트를 진행하면 서 팀원과의 소통을 실제와 같이 시뮬레이션 하는 것 같다.