"널리 알려진 제품 X를 설계해보라" 는 식으로 어떠한 시스템의 설계 기술을 시연하고 설계 과정에서 내린 결정들에 대한 방어 능력을 보이며 면접관의 피드백을 건설적인 방식으로 처리할 자질이 있음을 보이는 자리이다.
설계의 순수성에 집착하여 타협적 결정을 도외시하는 over-engineering을 조심하라.
효과적 면접을 위한 4단계 접근법
1단계 문제 이해 및 설계 범위 확정
- 시스템 설계 면접시에 바로 답을 내지 말라.
- 올바른 질문, 적절한 가정을 통해 시스템 구축에 필요한 정보를 모으라
- 즉 면접관의 요구사항을 정확히 이해하는데 필요한 질문을 하라.
- 구체적으로 어떤 기능을 만들어야 하나.
- 제품 사용자 수는 얼마나 되나?
- 회사의 규모는 얼마나 빨리 커지리라 예상하는가?
- 회사가 주로 사용하는 기술 스택은 무엇인가?
2단계 개략적인 설계안 제시 및 동의 구하기
- 설계안에 대한 최초 청사진을 제시하고 의견을 구하라.
- 면접관을 마치 팀원인 것 처럼 대하라.
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
- 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등등
- 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해 보라.
- 개략적 추정이 필요한지 면접관에게 미리 물어보기
3단계 상세 설계
이 단계로 왔다면 아래 목표 달성한 상태
- 시스템에서 전반적으로 달성해야할 목표와 기능 범위 확인
- 전체 설계의 개략적 청사진 마련
- 해당 청사진에 대한 면접관의 의견 청취
- 상세 설계에 집중해야 할 영역들 확인
설계 대상 컴포넌트 사이의 우선순위를 정해 특정 시스템 컴포넌트들의 세부사항을 깊이 있게 설명하라
- 단축 URL 생성기(URL shortener)설계 -> 해시 함수의 설계의 구체적 설명
- 채팅 시스템 -> 지연시간(latency)을 줄이고 사용자의 온/오프라인 상태 표시 여부 설명
4단계 마무리
설계 결과물에 관련한 후속 질문 또는 추가 논의를 하는 단계
다음 몇 가지 지침을 활용하자.
- 완벽한 설계는 없으니 개선 사항에 대해 질문한다면 자신의 설계를 비판적으로 살펴보자.
- 자신의 설계 요약하기
- 오류(서버 오류, 네트워크 장애 등) 상황에 어떤일이 생기는지 생각하기
- 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지 생각하기
정리
해야할 것
- 질문을 통해 확인하라. 스스로 내린 가정이 옳다 믿고 진행하지 말라.
- 문제의 요구사항을 이해하라.
- 정답이나 최선의 답안 같은 것은 없다는 점을 명심하라.
- 면접관이 여러분의 사고 흐름을 이해할 수 있도록 하라.
- 가능하다면 여러 해법을 함께 제시하라.
- 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 세부사항을 설명하기 시작하라. 가장 중요한 컴포넌트 부터 진행하라.
- 면접관의 아이디어를 이끌어 내라.
- 포기하지 말라.
하지 말아야 할 것
- 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 말라.
- 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라.
- 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라.
- 진행 중에 막혔다면 힌트를 청하기를 주저하지 말라.
- 소통을 주저하지 말라.
- 설계안을 내놓는 순간 면접이 끝난다고 생각하지 말라. 의견을 일찍, 그리고 자주 구하라.
시간 배분
- 1단계 - 문제 이해 및 설계 범위 확정 : 3분 ~ 10분
- 2단계 - 개략적 설계안 제시 및 동의 구하기 : 10분에서 15분
- 3단계 - 상세 설계 : 10분에서 25분
- 4단계 - 마무리 : 3분에서 5분
뉴스 피드 시스템 설계 예시 이미지
'기술 서적 정리 요약 > 가상면접 사례로 배우는 대규모 시스템 설계 기초]' 카테고리의 다른 글
5장 안정 해시 설계 (0) | 2023.05.01 |
---|---|
4장 처리율 제한 장치의 설계 (0) | 2023.04.27 |
2장 개략적인 규모 측정 (0) | 2023.04.17 |
1장. 사용자 수에 따른 규모 확장성 (0) | 2023.04.11 |
[가상면접 사례로 배우는 대규모 시스템 설계 기초] 목차 및 후기 (0) | 2023.03.06 |