가상 면접 사례로 배우는 대규모 시스템 설계 기초 3장 - 시스템 설계 면접 공략법
가상 면접 사례로 배우는 대규모 시스템 설계 기초 책 정리 글입니다.
개요
시스템 설계 면접은 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 해결책을 찾아가는 과정이다. 때문에 정답도 없고 결과도 없다. 설계과정에서 내린 결정에 대해 방어하는 능력을 보는 과정이고, 면접관의 피드백을 건설적인 방향으로 처리할 자질이 있음을 보는 면접이다.
시스템 설계 면접은 지원자의 설계 능력의 기술적 측면을 평가하는 자리이면서 더 나아가 협력에 적합한 사람인지, 압박이 심한 상황에서도 잘 대처해나가는지, 모호한 문제도 잘 해결해나갈 수 있는지 등을 보는 자리다.
✏️ 4단계 접근 방법
1단계: 문제 이해 및 설계 범위 확정
퀴즈쇼처럼 답을 빨리 할 필요가 없다. 속도를 늦추고 깊이 생각하고 질문하여 요구사항과 가정을 분명히 해야한다. 올바른 질문을 하고, 면접관이 대답을 해주면 적어두는 편이 좋다. 나중에 쓰이기 때문이다.
예를 들어, 다음과 같은 질문들을 할 수 있다.
- 어떤 기능을 만들어야하는가?
- 제품 사용자 수는 얼마나 되는가?
- 회사의 규모가 얼마나 빨리 성장할 것 같은가? 3개월 뒤, 6개월 뒤 규모가 얼마가 되리라 생각해야하는가?
- 회사가 주로 사용하는 기술 스택은 무엇인가?
2단계: 개략적인 설계안 제시 및 동의 구하기
개략적인 설계안을 제시하고 면접관의 동의를 얻어야 한다.
- 설계안의 최초 구성도를 제시하고 의견을 구하라. 팀원인 것처럼 대하라. 훌륭한 면접관들은 지원자와 대화하고 설계하는걸 즐긴다.
- 화이트보드나 종이에 핵심 컴포넌트를 그려라. CDN, 클라이언트, 웹 서버, 데이터베이스 서버, 캐시 등이 포함될 수 있다.
- 이 설계안이 제약사항을 만족하는지 개략적으로 계산하자. 그 과정은 소리내어 설명하고 계산이 필요한지도 물어봐야한다.
예를들어 뉴스피드를 발행하고 생성해야하는 기능이 있다고 생각하자.
- 뉴스피드 발행: 사용자가 포스트를 올리면 관련된 데이터가 캐시/데이터베이스에 기록되고 친구의 뉴스피드에 뜨게 된다.
- 피드 생성: 어떤 사용자의 뉴스 피드는 해당 사용자의 친구들의 포스트를 시간 역순으로 정렬하여 만든다.
3단계: 상세 설계
설계 대상 컴포넌트 사이의 우선순위를 정하여 상세설명을 해야한다.
책에서도 강조하는 내용이 똑같은 면접이라는건 있을 수 없으며 주니어, 시니어에 따라 면접관이 캐치하려는 능력이 다를것이다.
만약 채팅시스템을 구현하는 문제였다면 어떻게하면 지연시간(latency)를 줄이고, 사용자의 온/오프라인을 표시할지에 대한 얘기를 할 것이다.
또한 URL단축생성기라고 하면 어떤 해시함수를 사용하였고, 그 해시함수를 왜 사용했는지에 대한 이야기를 할 것이다.
위의 예제를 상세적으로 설계하면 밑의 그림이 된다고 한다.
피드발행
- 인증여부에 따라 알림서비스를 하는 절차가 추가되었다.
- 포스팅 정보들은 포스팅 캐시와 데이터베이스에 저장한다.
- 피드를 발행하는 사용자의 친구들 목록 id를 받고 캐시에서 친구들 데이터를 조회후 메시지큐를 통해 피드 발행 전송 작업을 다른 서버에 비동기적으로 요청한다.
피드 생성
- 사용자의 요청이 로드밸런서를 거치고 웹서버에 도달한다.
- 뉴스피드 서비스에서 사용자의 뉴스피드를 저장한 캐시에서 포스팅 정보 키 값을 가져온다.
- 포스팅 정보 키 값을 가지고 캐시에서 조회하여 포스팅을 나타내는 정보들(예를들면 요약, 제목 등)을 가져온다.
- 마찬가지로 사용자 정보(사용자 이름, 프로필 url 등)을 가져온다.
- 사용자에게 해당 정보들을 보여준다.
책에는 상세 설명이 없습니다. 제가 임의로 해석해서 적어놓은 것이니 참고만 해주세요.
4단계: 마무리
후속 질문이 들어올 수도 있고, 스스로 추가 논의를 진행할 수도 있다.
- 면접관이 병목, 개선점을 더 찾아보라할 수 있다. 설계는 완벽할 수 없으니 없다고 하지 않는다.
- 설계를 요약해주는 것도 좋다. 환기시켜주는 효과가 있어서다.
- 오류가 발생하면 어떤 일이 생기는지도 이야기하면 좋다.
- 규모 확장에 대해서도 이야기하면 좋다. 현재 설계한 이용자의 10배 또는 100배 들어온다면?
🤔 정리
실제 면접에 들어가면 어떤 방식으로 진행을 유도할지에 대한 설명이 있는 챕터였다.
유튜브에도 이러한 단계로 면접 진행가이드를 나타냈다.
유튜브에도 System Design을 검색하면 트위터 설계, 넷플릭스 설계 등이 나오니까 참고해도 좋을것 같다.