3. 시스템 설계 면접 공략법
- 시스템 설계 면접은 기술적 측면 이상의 평가 자리입니다.
#
효과적 면접을 위한 4단계 접근법#
1단계, 문제 이해 및 설계 범위 확정- 가장 중요한 기술 중 하나는 올바른 질문을 하는 것입니다.
- 적절한 가정을 하는 것, 그리고 시스템 구축에 필요한 정보를 모으는 것입니다.
- 다음과 같은 질문들을 생각해볼 수 있습니다.
- 구체적으로 어떤 기능들을 만들어야 하는가?
- 제품 사용자 수는 얼마나 되는가?
- 회사의 규모는 얼마나 빨리 커지리라 예상하나?
- 회사가 주요 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?
#
2단계, 개략적인 설계안 제시 및 동의 구하기- 초점을 맞출 것은 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것입니다.
- 설계안에 대한 최초 청사진을 제시하고 의견을 구하기, 면접관을 마치 팀원처럼 대하기
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그림
- 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN 등
- 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해야 합니다.
#
3단계, 상세 설계를- 이 단계에 왔다면 다음 목표를 달성한 상태입니다.
- 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
- 전체 설계의 개략적 청사진 마련
- 해당 청사진에 대한 면접관의 의견 청취
- 상세 설계에서 집중해야 할 영역들 확인
- 설계 대상 컴포넌트 사이의 우선순위를 정하는 것이 중요합니다.
- 면접 시에는 시간 관리에도 특별히 주의를 기울여야 합니다.
#
4단계, 마무리- 아래의 지침을 고려해봐야 합니다.
- 면접관이 시스템 병목구간, 혹은 좀 더 개선 가능한 지점을 찾아내라 주문할 수 잇습니다. (다만, 완벽하거나 개선할 부분이 없다고 말하는 것은 좋지 않습니다.)
- 만든 설계를 한번 다시 요약해주는 것도 도움이 될 수 있습니다.
- 오류가 발생하면 무슨 일이 생기는지 따져보면 흥미롭습니다.
- 운영 이슈도 논의할 가치가 충분합니다.
- 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지도 흥미로운 주제입니다.
- 시간이 좀 남았다면, 필요하지만 다루지 못했던 세부적 개선사항들을 제안할 수 있습니다.
#
해야할 것- 질문을 통해 확인하라. 스스로 내린 가정이 옳다 믿고 진행하지 말라
- 문제의 요구사항을 이해하라
- 정답이 최선의 답안 같은 것은 없다는 점을 명심하라.
- 면접관이 여러분의 사고 흐름을 이해할 수 있도록 합니다. 면접관가 소통합니다.
- 가능하다면 여러 해법을 함께 제사하라
- 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 세부사항을 설명하기 시작합니다.
- 면전관의 아이디어를 이끌어 내야 합니다.
- 포기하지 말기
#
하지말 것- 전형적인 면접 문제들은 준비하고 가라
- 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라
- 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라. 개략적 설계를 마친 뒤에 세부사항으로 나아가라.
- 진행 중에 막혔다면, 힌트를 요청하라.
- 소통을 주저하지 말기.
- 설계안을 내놓는 순간 면접이 끝난다고 생각하지 말기
#
시간 배분- 45분이 기준이라면.
- 1단계 - 문제 이해 및 설계 범위 확정 : 3분에서 10분
- 2단계 - 개략적 설계안 제시 및 동의 구하기 : 10분에서 15분
- 3단계 - 상세 설계 : 10분에서 25분
- 4단계 - 마무리 : 3분에서 5분