728x90
시스템 설계 면접에서 "널리 알려진 제품 X를 설계해 보라"는 문제가 나온다.
이는 수천 명의 엔지니어들이 참여하여 개발한 제품을 한 시간 안에 설계할 수 없다.
즉, 정말로 설계하라는 것이 아니라 모호한 문제를 풀기 위해 협력하여 해결책을 찾아내는 과정에 대한 시뮬레이션이다.
설계 기술을 시연하는 자리이고, 설계 과정에서 내린 결정들에 대한 방어 능력을 보이는 자리이다.
효과적 면접을 위한 4단계 접근법
1단계 문제 이해 및 설계 범위 확정
답부터 들이밀지 말고, 깊이 생각하며 질문하여 요구사항과 가정들을 분명히 해라.
면접관이 질문을 던지면 질문에 대한 답을 바로 내놓거나, 아니면 스스로 어떤 가정도록 주문할 것이다.
요구사항을 정확히 이해하는데 필요한 질문을 아래와 같이 하자.
- 구체적으로 어떤 기능을 만들어야 하나?
- 제품 사용자 수는 얼마나 되나?
- 회사 규모는 얼마나 커지는가?
- 회사가 주로 사용하는 기술 스택이 무엇인가? 기존 서비스로는 어떤 것들이 있나?
2단계 개략적인 설계안 및 동의 구하기
개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이다.
- 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
- 클라이언트, API, 웹 서버, 데이터 저장소, 캐시, CDN, 메세지 큐 같은 것들
- 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해라.
3단계 상세 설계
여기서 부터는 컴포넌트 사이의 우선순위를 정하는 것이다.
선임급 개발자 면접이라면, 시스템의 성능 특성에 대한 질문을 던질 것이고, 그 경우 질문 내용은 시스템의 병목 구간이나 자원 요구량 추정치에 초점이 맞춰져있다.
대부분의 면접관은 특정 시스템 컴포넌트들의 세부사항을 깊이 있게 설명하는 것을 원한다.
4단계 마무리
- 개선할 점은 언제나 있기 마련이다. 설계가 완벽하다거나 개선할 부분이 없다는 답은 하지 않도록 하자.
- 오류가 발생하면 무슨 일이 생기는지 따져보면 흥미롭다.
- 시간이 남았다면, 다루지 못했던 세부적 개선사항들을 제안할 수 있다.
- 이하 생략
해야할 것
- 문제의 요구사항을 이해해라
- 정답이나 최선의 답안 같은 것은 없다.
- 가능하다면 여러 해법을 함께 제시해라
- 이하 생략
시간 배분
1단계 - 문제 이해 및 설계 범위 확정: 3분에서 10분
2단계 - 개략적 설계안 제시 및 동의 구하기: 10분에서 15분
3단계 - 상세 설계: 10분에서 25분
4단계 - 마무리: 3분에서 5분
'읽은 책 > [책] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1권' 카테고리의 다른 글
5장. 안정 해시 설계 (0) | 2024.07.09 |
---|---|
4장. 처리율 제한 장치의 설계 (0) | 2024.07.08 |
2장. 개략적인 규모 측정 (0) | 2024.07.07 |
1장. 사용자 수에 따른 규모 확장성 - 2편 (0) | 2024.07.07 |
1장. 사용자 수에 따른 규모 확장성 - 1편 (0) | 2024.07.03 |