효과적 면접을 위한 4단계 접근법
1단계 - 문제 이해 및 설계 범위 확정
- 시스템 설계 시 질문하여 요구사항과 가정들을 분명히 하자.
- 엔지니어가 가져야 할 가장 중요한 기술 중 하나는 올바른 질문을 하는 것.
- 만약 시스템 설계를 한다면 어떤 질문들을 만들어야 할까?
예제
뉴스 피드 시스템 설계하라는 요구를 받았다고 한다면 다음 질문을 해볼 수 있을것이다.
- 모바일 앱과 웹 앱 가운데 어느 쪽 지원
-> 둘 다 지원
- 가장 중요한 기능은 무엇인가요?
-> post, 친구들과 피드 기능을 볼 수 있어야 한다.
- 정렬 기준
-> 시간 역순으로 정렬
- 최대 몇명의 사용자
-> 5000명
- 트래픽의 규모는?
-> dau 천만명
- 포스트에서 지원하는 파일 양식은 무엇인가요?
-> 이미지나 비디오 같은 미디어 파일 포스트
2단계 - 개략적인 설계안 제시 및 동의 구하기
- 설계안에 대해 최초 청사진을 제시하고 의견을 구한다.
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그린다.
- 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는 지를 개략적으로 개선
예제
뉴스 피드 시스템을 설계하라
- 피드 발행
-> 사용자가 포스트를 올리면 관련된 데이터가 캐시/데이터베이스에 기록되고 해당 사용자의 친구 피드에 뜬다.
- 피드 생성
-> 어떤 사용자의 뉴스 피드는 해당 사용자 친구들의 포스트를 시간 역순으로 정렬해서 만든다.
3단계 상세 설계
- 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
- 전체 설계의 개략적 청사진 마련
- 해당 청사진에 대한 면접관 의견 듣기
- 상세 설계에서 집중해야 할 영역 확인
예제
4단계 마무리
- 시스템의 병목구간, 개선 가능한 지점을 찾아내라 주문할 수 있다.
- 오류가 발생하면 무슨 일이 생기는지 (서버 오류, 네트워크 장애 등) 따져보는것이 좋을거 같다.
- 운영 이슈 관리 - 메트릭은 어떻게 수집하고 모니터링은 어떻게 할건지
하지 말아야할것
- 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 마라.
- 소통을 주저하지 말자. 침묵 속에 설계를 진행하지 마라.
시간 배분
- 1단계 - 문제 이해 및 설계 범위 확정 (3m - 10m)
- 2단계 - 개략적 설계안 제시 및 동의구하기 (10m - 15m)
- 3단계 - 상세 설계 (10m - 25m)
- 4단계 - 마무리 (3m - 5m)