시스템 설계 면접이 있는 이유
👉 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션
시스템 설계 면접의 평가 항목
- 설계 능력의 기술적 측면
- 협력에 적합한 사람인지
- 압박이 심한 상황도 잘 헤쳐나갈 자질이 있는지
- 모호한 문제를 건설적으로 해결할 능력이 있는지
- 좋은 질문을 던질 능력이 있는지
시스템 설계 면접에서의 부정적 신호
- 설계의 순수성에 집착한 나머지 트레이드 오프를 도외시하고 오버 엔지니어링을 하는지 👉 시스템 전반의 비용이 올라가게 됨
- 완고함
- 편협함
효과적 면접을 위한 4단계 접근법
1단계: 문제 이해 및 설계 범위 확정
요구 사항을 완전히 이해하고 적절한 가정을 하는 것이 중요하며, 그러기 위해서는 요구사항을 정확히 이해하는 데 필요한 질문을 해야 한다. 이를 통해 시스템 구축에 필요한 정보를 모은다.
질문거리로는 아래와 같다.
- 구체적으로 어떤 기능들을 만들어야 하나?
- 제품 사용자 수는 얼마나 되나?
- 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가?
- 회사가 주로 사용하는 기술 스택은 무엇인가?
- 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?
2단계: 개략적인 설계안 제시 및 동의 구하기
개략적인 설계안을 제시하고 면접관의 동의를 얻는다.
- 개략적인 설계안을 제시하고, 면접관을 마치 팀원인 것처럼 대하며 동의를 구한다.
- 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
- 클라이언트(모바일/웹), API(엔드포인트), 웹 서버, 데이터 저장소(데이터베이스 스키마), 캐시, CDN, 메세지 큐
- 설계안을 바탕으로 제약사항을 만족하는지 계산해 보라.
- 소리내어 설명하면 Good
![](https://velog.velcdn.com/images/funnysunny08/post/17657722-3d7a-47e5-9812-6848682165a8/image.png)
3단계: 상세 설계
설계 대상 컴포넌트 사이의 우선순위를 정하고, 우선순위가 높은 부분을 자세히 설명해라.
- 채팅 시스템 관한 문제
- ⇒ 어떻게 하면 지연시간을 줄이고 사용자의 온/오프랑니 상태를 표시할 것인지를 듣고자 할 것임
- 단축 URL 생성기
- ⇒ 해시 함수의 설계에 대해 구체적으로 듣고 싶어할 것
4단계: 마무리
- 개선점
- 개선한 점은 언제나 있다! ⇒ 당신의 비판적 사고 능력을 보여줘라
- 요약하기
- 오류가 발생하면 무슨 일이 생기는지
- 운영 이슈
- 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지
시간 배분
1단계 - 문제 이해 및 설계 범위 확정: 3분~10분
2단계 - 개략적 설계안 제시 및 동의 구하기: 10분~15분
3단계 - 상세 설계: 10분~25분
4단계 - 마무리: 3분~5분