3장 시스템 설계 면접 공략법
효과적 면접을 위한 4단계 접근법
시스템 설계 면접은 정해진 결말도 없고 정답도 없지만 절차나 범위에는 공통적인 부분이 있다.
1단계 문제 이해 및 설계 범위 확정
- 시스템 설계 먼접에선 생각 없이 바로 답을 내서는 좋은 점수를 받기 어렵다.
- 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 해야 한다.
- 엔지니어가 가져야 할 주요한 기술
- 올바른 질문하기
- 적절한 가정하기
- 시스템 구축에 필요한 정보 모으기
- 면접관에게 요구사항을 이해하는 데 필요한 질문을 해야한다.
- 구체적으로 어떤 기능을 만들어야 하나?
- 제품 사용자 수는 얼마나 되나?
- 회사 규모는 얼마나 빨리 커지리라 예상하나?
- 회사가 주로 사용하는 기술 스택이 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?
2단계 개략적인 설계안 제시 및 동의 구하기
- 설계안에 대해 최초 청사진을 제시하고 의견을 구하라.
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라
- 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해 보라.
- 시스템의 구체적 사용 사례도 살펴보면 에지 케이스를 발견하는 데도 도움이 될 것이다.
3단계 상세 설계
- 이 단계로 왔다면 아래 목표는 달성한 상태일 것이다.
- 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
- 전체 설계의 개략적 청사진 마련
- 해당 청사진에 대한 면접관 의견 청취
- 상세 설계에서 집중해야 할 영역들 확인
- 이제 면접관과 해야할 일은 설계 대상 컴포넌트 사이의 우선순위를 정하는 것
- 대부분 면접관은 특정 시스템 컴포넌트들의 세부사항을 깊이 있게 설명하는 것을 보길 원한다.
- ex) 단축 URL 생성기(URL shortener) 설계에 관한 것이라면 해시 함수 설계를 듣고 싶어 할 것
- ex) 채팅 시스템 설계에 관한 것이라면 지연시간을 줄이는 것과 사용자의 온/오프라인 사애를 표시할 것인지를 듣고자할 것
- 면접 시에 시간 관리에도 주의를 기울여야 한다.
4단계 마무리
- 마지막 단계에서의 몇 가지 지침
- 더 개선 가능한 지점을 찾아내라는 질문에 개선할 부분이 없다는 답은 피하자. 완벽한 설계는 없다.
- 만든 설계를 다시 요약하는 것도 도움이 될 수 있다.
- 오류가 발생하면 무슨 일이 생기는지 따져보면 흥미로울 것이다.
- 운영 이슈도 논의할 가치가 있다. (매트릭, 로그, 배포 전략 등)
- 미래의 규모확장 요구에 어떻게 대처할 것인지도 흥미로운 주제
- 시간이 남았다면 다루지 못했던 세부 개선사항을 제안할 수 있다.
- 면접 세션에서 해야할 것
- 질문을 통해 확인
- 문제 요구사항을 이해
- 정답이 없다는 것을 명심해야 한다.
- 면접관이 지원자의 사고 흐름을 이해할 수 있도록 소통하라
- 가능하면 여러 해법을 제시하라
- 개략적 설계에 면접관이 동의하면 각 컴포넌트 세부사항을 설명하기 시작하라. (가장 중요한 것부터)
- 면접관의 아이디어를 이끌어 내라.
- 포기하지 마라.
- 하지 말아야 할 것
- 전형적인 면접 문제들에도 대비하지 않고 면접장에 가지 말라.
- 요구사항과 가정을 분명히 하지 않은 상태로 설계를 제시하지 말라.
- 처음부터 특정 컴포넌트의 세부사항을 깊이 설명하지 말라.
- 진행 중에 막혔다면, 힌트 청하기를 주저하지 말라.
- 침묵 속에 설계를 진행하지 말고 소통하라.
- 설계안을 내놓는 순간 면접이 끝난 것이 아니다. 면접관이 끝났다고 해야 끝난 것이다. 의견을 일찍, 자주 구하라.