시스템 설계 면접은 자세한 설계를 요하지는 않는다.
시스템 설계 면접은 다음과 같은 점을 보기 위함이다.
- 기술적 설계 능력
- 문제 이해 능력
- 협력/소통 능력
- 압박 상황 대처 능력
- 질문 능력
- 의심하고 반문하는 능력
1단계 : 문제를 이해하라
올바른 질문을 하고, 올바른 가정을 하고 시스템 구축에 필요한 정보를 모으는 능력이 필요하다.
요구사항을 이해하는데 다음과 같은 질문을 던져야 한다.
- 구체적으로 어떤 기능을 만들어야 하나?
- 사용자 수는 어떻게 되는가?
- 회사 예측 성장률 : 3, 6, 12 개월 뒤 규모
- 회사의 기술 스택
- 설계를 단순화 하기 위해 활용할 수 있는 기존 서비스는 무엇이 있나?
- 웹/앱 어떤 서비스로 제공하는가?
- 기능별 조건을 물어보기 (게시물 정렬 순서)
요구사항을 이해하고 모호함을 없애는게 가장 중요하다.
2단계 : 개략적인 설계 제시 및 동의 구하기
개략적인 설계안을 제시하고 면접관의 동의를 얻어야 한다.
- 최초 설계 청사진을 제공하고 의견을 구해야 한다.
- 면접관을 팀원이라 생각하고 대해야 한다.
- 핵심 컴포넌트를 포함하는 다이어그램을 그린다.
- 클라이언트(웹/앱), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등등
- 최초 설계안이 시스템 규모에 관계된 제약사항을 만족하는지 개략적으로 계산한다.
- 소리내서 계산 과정을 읊을 것.
- 계산 전에 개략적인 계산이 필요한지 물을 것.
- 상황에 따라 API, ERD 설계가 필요할 수 있다.

3단계 : 상세 설계
상세설계에서 어떤 컴포넌트에 집중해야 하는지 파악해야 함
설계 대상 컴포넌트 사이의 우선순위
시스템 성능 특성에 대한 질문에는?
- 시스템의 병목 구간이나 자원 요구량 추정치에 초점을 맞출 필요가 있다.
단축 URL 생성기 설계 문제에는?
채팅 시스템에 대한 문제는?
- 어떻게 하면 지연시간을 줄이고 사용자의 온/오프라인 상태를 표시할 것인지에 집중해야 한다.
시간관리도 중요하다.
사소한 디테일 설명하는 데에 시간을 너무 많이 쓰면 안된다.
4단계 : 마무리
면접관이 설계에 대한 추가질문을 던질 수 있다.
스스로 개선할 부분을 찾아야 할 수 있다.
- 완벽한 설계는 없다.
- 겸손한 자세를 유지하라.
메트릭, 로그, 배포 등에 질문이 있을 수 있다.
- 어떻게 모니터링 할 것인지
- 어떻게 배포 할 것인지
scale out 에 대해서도 대비해야 한다.
- 100만 사용자에서 1000만 사용자로 늘어버린다면?
장애대응에도 대비해야 한다.
해야 할 것
-
전형적인 질문에 대한 답은 미리 준비할 것.
-
질문을 통해 확인할 것.
-
문제의 요구사항을 이해할 것.
-
요구사항이나 가정을 분명히 할 것
-
최선의 답은 없다는 것을 명심할 것
-
면접관과 소통할 것
-
가능하다면 여러 해법을 제공할 것
-
컴포넌트의 세부사항을 깊이 설명하지 말것.
-
하다가 막히면 힌트를 요구할 것.