실세계의 수 천 명의 엔지니어가 만들어낸 그런 복잡한 시스템을 설계하라는 면접은 없다
그럼 왜 시스템 설계 면접이 있을까?
- 문제를 풀기 위해 협락하여 그 해결책을 찾아내는 과정을 시뮬레이션하기 위함.
- 설계 과정에서 내린 결정에 대한 방어 능력, 피드백을 건설적으로 처리할 수 있음을 보인다.
- 면접자는 지원자가 협력에 적합한지, 압박이 심해도 잘 헤쳐 나갈 수 있는지, over-engineering을 하지는 않는지 확인한다.
1단계 문제 이해 및 설계 범위 확정
- 깊이 생각하고 요구사항과 가정을 분명히 하자.
- 중요한건 올바른 질문하기, 적절한 가정하기, 시스템 구축에 필요한 정보 수집
- 구체적으로 어떤 기능을 만들까?
- 사용자 수는 얼마나 될까?
- 회사의 규모는 얼마나 빨리 커질까? (n달 뒤)미래의 규모는?
- 회사의 주 기술 스택은?
2단계 개략적인 설계안 제시 및 동의 구하기
면접관을 팀원인 것 처럼 대하자.
- 설계안에 대한 청사진을 제시하고 의견을 구한다.
- 핵심 컴포넌트를 포함하는 다이어그램을 그린다.
- 해당 설계가 시스템 규모와 관련된 제약사항들을 만족하는지 소리를 내어 확인해본다.
- 여유가 된다면 구체적인 사용 사례도 생각해본다.
3단계 상세 설계
- 전체 설계 청사진 준비
- 컴포넌트 사이의 우선순위 정하기
4단계 마무리
해야할 것
- 질문을 통해 확인
- 문제 요구사항 이해 // 정답이나 최선의 답은 없으니 요구사항을 정확하게 이해했는지 확인
- 여러 해법 제시
- 중요한 컴포넌트 부터 세부사항 설명
- 면접관의 아이디어 이끌어내기
- 포기하지 않기
하지 말아야 할 것
- 전형적인 면접 문제들에 대비하지 않고서 면접장에 가지 말기
- 요구사항, 가정이 분명하지도 않은데 설계 제시하지 않기
- 처음부터 컴포넌트에 대해 너무 깊이 설명X
- 막히는 부분에서 힌트요청을 주저하지 않기
- 소통 주저하지 않기. 침묵X
- 의견을 일찍, 자주 구하기
1단계 - 문제 이해 및 설계 범위 확정 310분
2단계 - 개략적인 설계안 제시 및 동의 구하기 1015분
3단계 - 상세설계 1025분
4단계 - 마무리 35분