시스템 설계 면접: 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션
효과적 면접을 위한 4단계 접근법
1단계 문제 이해 및 설계 범위 확정
- 답부터 찾으려고 하지 마라
- 깊이 생각하고 질문하여 요구사항과 가정들을 분명하게 하라
요구사항을 이해할 때 필요한 질문은 어떤 것일까?
- 구체적으로 어떤 기능들을 만들어야 하는가?
- 제품의 사용자 수는 얼마나 되는가?
- 회사의 규모는 얼마나 빨리 커질 것이라 예상하는가?
- 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기본 서비스로는 무엇이 있는가?
2단계 개략적인 설계안 제시 및 동의 구하기
- 설계안에 대한 최초 청사진을 제시하고 의견을 구하라
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라
- 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지 개략적으로 계산해 보라 / 계산 과정은 소리 내어 설명 하라 / 이런 개략적 추정이 필요한지 면접관에게 미리 물어보도록 하자
- 가능하다면 시스템의 구체적 사용 사례도 몇 가지 살펴보라 => API 엔드포인트나 데이터베이스 스키마 같은 경우엔 상황에 따라 다르다
3단계 상세 설계
만족된 목표
- 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
- 전체 설계의 개략적 청사진 마련
- 해당 청사진에 대한 면접관의 의견 청취
- 상세 설계에서 집중해야 할 영역들 확인
해야 할 일
- 설계 대상 컴포넌트 사이의 우선순위 정하기
- 대부분의 경우 특정 시스템 컴포넌트들의 세부사항을 깊이 있게 설명하는 것을 원함
4단계 마무리
- 면접관이 시스템 병목구간이나 개선 가능한 지점을 찾아내라고 함 => 비판적 사고 능력을 보이고 개선할 점을 최대한 설명해라
- 만든 설계를 다시 요약하고 해결책을 제시한 경우에는 더욱 중요하다
- 오류가 발생했을 때 무슨 일이 생기는지 따져 봐라
- 운영 이슈도 논의할 수 있다
- 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지
- 시간이 있다면 못 다룬 세부적 개선사항들을 제안할 수 있다
면접 때 해야 할 것
- 질문을 통한 확인
- 요구사항 이해
- 정답이나 최선의 답안은 없다
- 사고의 흐름을 이해할 수 있게 소통하라
- 가능하다면 여러 해법을 제시하라
- 개략적 설계에 면접관이 동의하면, 각 컴포넌트 세부사항을 설명하기 시장하라 => 가장 중요한 것부터
- 면접관의 아이디어를 이끌어 내라
- 포기하지 말자
면접 때 하지 말 것
- 면접 문제 대비하고 가라
- 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라
- 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라
- 진행 중 막히면 힌트 달라는 것을 주저하지 마라
- 소통을 주저하지 마라
- 설계안을 내놓는 순간 면접이 끝난다고 생각하지 말라
시간 배분
1단계 - 문제 이해 및 설계 범위 확정 (3분에서 10분)
2단계 - 개략전 설계안 제시 및 동의 구하기 (10분에서 15분)
3단계 - 상세 설계 (10분에서 25분)
4단계 - 마무리 (3분에서 5분)