이번 글에서는 기술 인터뷰 세션 중 하나인 System Design 인터뷰 준비과정과 인터뷰 경험을 공유하려고 합니다. System Design은 특정한 기능을 수행하는 어플리케이션을 만들기 위해서 어떻게 시스템을 설계할지를 물어보는 인터뷰로 Business Requirement, API design, DB Schema, high level architecture 등 다방면에 걸친 내용들을 다룹니다.
System Design Interview는 제가 이번 인터뷰를 준비하면서 가장 많은 것을 배운 인터뷰 세션이고 3+년간 풀스텍 개발자로 일하며 공부하고 개발했던 지점들을 연결해주었습니다. 다양한 어플리케이션을 만들기 위해서는 어떤 시스템이 필요한지 좀 더 깊이 공부하고 싶은 마음이 들었고 다른 분들께도 시스템 디자인 공부 자체가 큰 도움이 될 것이라고 생각합니다.
이번 글에서 소개하는 여러 자료들이 질 높은 설명을 해주고 있기에 Live Coding Exercises에 비해 구체적인 설명을 줄이고, 자료를 소개하고 자료를 어떻게 활용하면 좋을지 공유하는데 초점을 맞추도록 하겠습니다. 개념 공부에 썼던 좋은 자료들과 인터뷰 문제 풀이 시 사용한 Template 그리고 다양한 System Design 예시들이 모인 책들 모두 연차에 상관없이 많은 분들께 도움이 되지 않을까 싶습니다.
System Design은 특정한 기능을 수행하는 어플리케이션을 만들기 위해서 어떻게 시스템을 설계할지를 물어보는 인터뷰로 Business Requirement, API design, DB Schema, high level architecture 등 다방면에 걸친 내용들을 다룹니다.
System Design Interview가 어떻게 진행되고 어떤 내용들을 다루는지 궁금하신 분들은 유튜브 Exponent 채널에 6개의 좋은 예시들이 있기에 참고하시기 바랍니다. 이외에도 유튜브에 System Design Mock Interview로 검색하시면 더욱 더 많은 정보들을 접할 수 있습니다. 제가 인터뷰를 준비하며 많이 참고했던 두 웹사이트의 문제 예시들도 함께 공유드립니다.
Design Reddit: System Design Mock Interview
System Design Mock Interview - Youtube Exponent Channel
Designing a URL Shortening service like TinyURL - Grokking the System Design Interview
문제 예시 1 - TinyURL
https://www.educative.io/courses/grokking-the-system-design-interview/m2yDVZnQ8lG
문제 예시 2 - Instagram
문제 예시 3 - Youtube
문제 예시 4 - Chat System
System Design 문제들은 자료구조 & 알고리즘을 활용하는 Live Coding Exercises에 비해 면접관-후보자가 어떻게 대화를 풀어나가는지에 따라서 여러 다른 방향으로 인터뷰가 진행됩니다. 구조적인 답변을 하기 위한 Template도 존재하지만 아래 제시된 Template 그대로 따라가시는 것에 너무 힘을 쓰시지 않는게 좋습니다. 시스템을 디자인하기 위한 여러 개념들을 익히신 상태에서 Template 상에 토픽들을 하나씩 짚어나가되, 면접관이 관심 있어 하는 내용과 질문에서 많은 시간을 쏟으면 더 좋은 성과를 낼 수 있습니다.