“널리 알려진 유튜브 시스템을 설계해 보세요.”

원서 표지

시스템 설계 면접에서 이런 막연하고 광범위한 질문을 받으면 눈앞이 캄캄해질 수 있습니다. 수백 명, 심하면 수천 명의 엔지니어가 참여하여 개발한 제품을 어떻게 면접 시간 안에 설계할까요?

잠시 면접관의 입장이 되어 질문의 의도를 생각해 봅시다. 정말로 짧은 시간 안에 대규모 시스템 설계를 기대하지는 않을 것입니다. 아마도 올바른 질문을 하고 적절한 가정을 하는 것, 그리고 시스템 구축에 필요한 정보를 모아 면접관과 협력하여 해결책을 찾을 수 있는 자질이 있는지 확인하려는 질문이겠죠. 지원자가 실제로 현업에서 동료와 모호한 문제를 풀기 위해 협력하여 해결책을 찾아내는 과정을 미리 엿보려는 것입니다.


예를 들어, 유튜브 시스템을 설계하라는 요구를 받았을 때 아래와 같이 적절한 질문을 통해 설계 범위를 좁히고 면접 시간 내에 가능한 설계안을 제시할 수 있습니다.

지원자: 어떤 기능이 가장 중요한가요?
면접관: 비디오를 올리는 기능과 시청하는 기능입니다.
지원자: 어떤 클라이언트를 지원해야 하나요?
면접관: 모바일 앱, 웹 브라우저, 그리고 스마트 TV입니다.
지원자: 일간 능동 사용자 수는 몇 명입니까?
면접관: 5백만입니다.
지원자: 아마존이나 구글, 마이크로소프트가 제공하는 클라우드 서비스를 활용해도 될까요?
면접관: 좋은 질문입니다. 모든 걸 바닥부터 쌓아 올리는 것은 대부분 회사에게는 비현실적인 일이죠. 활용할 수 있다면 하는 것이 바람직할 것입니다.

어디서부터 어떻게 시작해야 할까?

시스템이 아무리 복잡해도 단순하게 설계하기 시작해서 살을 붙여나가면 어렵지 않습니다. 유튜브 시스템은 개략적으로 다음의 세 개 컴포넌트로 구성됩니다.

그 후, 필요한 컴포넌트들(로드밸런서, 메타데이터 데이터베이스 등)을 단계별로 확장하는 방식으로 설계합니다. 아래는 유튜브 시스템 중에서 비디오 업로드 절차에 대한 개략적인 설계안입니다.

여기까지 큰 그림을 완성했다면 이제 살을 붙여 설계안을 상세하게 만들어야 합니다. 이 책에서는 비디오를 어떻게 분할하고 트렌스코딩할지, 자원 관리나 오류 처리는 어떻게 할지에 대해 차근차근 설계합니다. 각 시스템의 어떤 부분에 대한 설계를 발전시키고 최적화해야 할지 함께 생각하다 보면, 복잡한 시스템도 어렵지 않을 것입니다.

이 책에서는 이처럼 단계별로 확장에 필요한 부분 설계(처리율 제한 장치, 안정 해시 등)를 3장부터 9장에 걸쳐 익힌 후에, 10장부터 15장까지 실제 시스템(채팅 시스템, 유튜브 등) 설계 면접 문제와 상세한 답안을 참고하며 연습할 수 있습니다. 마지막으로 여러 회사에서 실제로 사용되는 시스템이 어떻게 설계되었는지 참고할 수 있는 사이트와 대형 IT업체별 엔지니어링 블로그를 16장에서 소개합니다.

여러 가지 실세계 사례로 면접관과 가상으로 대화를 주고받으며 이미지 트레이닝하다 보면 복잡한 시스템 설계에 대해 논리적으로 토론할 준비가 될 것입니다. 이 책을 읽은 후에 더 많은 실세계 시스템의 구조를 익혀서 스스로 좋은 시스템을 설계할 수 있기를 바랍니다.

이 책에 담긴 효과적 면접을 위한 4단계 접근법

1단계: 질문을 통해 문제 이해 및 설계 범위 확정
2단계: 시스템 동작 원리에 대한 개략적 설계안 제시 및 동의 구하기
3단계: 개략적 설계안에 살을 붙이는 상세 설계
4단계: 면접관과 논의하며 마무리

목차

1장 사용자 수에 따른 규모 확장성
2장 개략적인 규모 추정
3장 시스템 설계 면접 공략법
4장 처리율 제한 장치의 설계
5장 안정 해시 설계
6장 키-값 저장소 설계
7장 분산 시스템을 위한 유일 ID 생성기 설계
8장 URL 단축기 설계
9장 웹 크롤러 설계
10장 알림 시스템 설계
11장 뉴스 피드 시스템 설계
12장 채팅 시스템 설계
13장 검색어 자동완성 시스템
14장 유튜브 설계
15장 구글 드라이브 설계
16장 배움은 계속된다

《가상 면접 사례로 배우는 대규모 시스템 설계 기초》는 다음 서점에서 구입하실 수 있습니다.

교보문고 | YES24 | 알라딘 | 인터파크

《가상 면접 사례로 배우는 대규모 시스템 설계 기초》 정오표