시스템 설계 면접을 볼 때는 생각 없이 바로 답을 내서는 좋은 점수를 받기 어려움
요구사항을 완전히 이해하지 않고 답을 내놓는 행위는 아주 엄청난 부정적 신호(red flag)
면접은 퀴즈 쇼가 아니며, 정답 따위는 없다는 걸 상기하기
속도를 늦추고, 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하라.
질문을 던지면 면접관은 여러분이 질문에 대한 답을 바로 내놓거나, 아니면 여러분 스스로 어떤 가정을 하기를 주문할 것
질문은 어떻게?: 요구사항을 정확히 이해하는 데 필요한 질문
예제: News feed(뉴스 피드) 시스템을 설계하라는 요구를 받았다면?
지원자 : 모바일 앱과 웹 앱 가운데 어느 쪽을 지원해야 하나요? 아니면 둘 다일까요?
면접관 : 둘 다 지원해야 합니다.
지원자 : 가장 중요한 기능은 무엇인가요?
면접관 : 새로운 포스트(post)를 올리고, 다른 친구의 뉴스 피드를 볼 수 있도록 하는 기능입니다.
지원자 : 이 뉴스 피드는 시간 역순으로 정렬되어야 하나요? 아니면 다른 특별한 정렬 기준이 있습니까?
제가 특별한 정렬 기준이 있느냐고 묻는 이유는, 피드에 올라갈 포스트마다 다른 가중치가 부여되어야 하는지 알고 싶어서 인데요.
가령 가까운 친구의 포스트가 사용자 그룹(user group)에 올라가는 포스트보다 더 중요하다거나.
면접관 : 문제를 단순하게 만들기 위해, 일단 시간 역순으로 정렬된다고 가정합시다.
지원자 : 한 사용자는 최대 몇 명의 사용자와 친구를 맺을 수 있나요?
면접관 : 5000명입니다.
지원자 : 사이트로 오는 트래픽 규모는 어느 정도입니까?
면접관 : 일간 능동 사용자(daliy active user, DAU)는 천만 명입니다.
지원자 : 피드에 이미지나 비디오도 올라올 수 있나요? 아니면 포스트는 그저 텍스트입니까?
면접관 : 이미지나 비디오 같은 미디어 파일도 포스트 할 수 있어야 합니다.
→ 요구 사항을 이해하고 모호함을 없애는 게 이 단계에서 가장 중요함!
이번 단계의 초점 → 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것
시스템의 구체적 사용 사례도 몇 가지 살펴보기
API 엔드포인트(endpoint)나 데이터베이스 스키마도 보여야 하는가?
예제: “뉴스 피드 시스템을 설계하라”를 이용해 개략적 설계는 어떻게 만들어 내는지 살펴보기
면접관과 다음과 같은 목표는 달성한 상태일 것
면접관과 해야 할 일
면접 시에는 시간 관리에도 특별히 주의를 기울여야 함
예제: 뉴스 피드 시스템의 개략적 설계를 마친 상황이라면? 그리고 면접관도 그 설계에 만족하고 있다면?
2가지 용례를 보다 깊이 탐구해야 함
- 피드 발행
- 뉴스 피드 가져오기(news feed retrieval)
마지막 단계에서 면접관은 설계 결과물에 관련된 몇 가지 후속 질문을 던질 수도 있고(follow-up questions)
스스로 추가 논의를 진행하도록 할 수도 있음
지침
면접 세션에서 해야 할 것과 하지 말아야 할 것들의 목록
해야 할 것
하지 말아야 할 것