지난 몇십 년 간 소프트웨어 시스템의 사용자 수와 데이터 양은 꾸준히 증가했습니다. 그리고 이렇게 시스템이 커지면서 발생하는 문제들을 해결하기 위해 수많은 기술이 생겨났죠. 사용자 부하를 여러 서버에 분산시켜 주는 로드 밸런서(Load Balancer), 데이터에 빠르게 접근할 수 있도록 자주 사용되는 데이터를 임시로 저장하는 캐시(Cache), 이미지가 빠르게 로딩될 수 있도록 사용자 근처의 서버에 저장하는 콘텐츠 전송 네트워크(CDN) 등 다양한 기술이 있습니다. 시스템 설계 면접에서는 이런 기술을 잘 활용해서 신뢰성, 확장성, 유지보수성이 높은 시스템을 설계해야 합니다.
시스템 설계 면접을 준비할 때는 아래 2단계를 따라 공부하시는 것을 추천드립니다.
1. 시스템 설계 기본 다지기 - 시중에 어떤 기술들이 있고, 각 기술을 어떨 때 사용하는지.
2. 케이스 스터디를 통해 실제 사용 사례 분석해 보기 - 실제 회사에서 어떤 문제를 해결하기 위해 어떤 기술을 사용했는지.
📚 시스템 설계 공부를 위한 추천 자료
도서
- 데이터 중심 애플리케이션 설계 (원제: Designing Data-Intensive Applications): https://search.shopping.naver.com/book/catalog/32466573690
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (원제: System Design Interview: An Insider's Guide): https://search.shopping.naver.com/book/catalog/32485737619
온라인 자료 (영문)
- Grokking the System Design Interview: https://designgurus.org/course/grokking-the-system-design-interview
- Deep Dive into System Design Interview: https://www.educative.io/path/deep-dive-into-system-design-interview
- The System Design Primer: https://github.com/donnemartin/system-design-primer
케이스 스터디 (영문)
- InfoQ (개발 컨퍼런스 QCon 발표 영상 및 기타 자료 모음): https://www.infoq.com/architecture/presentations
- 이외에도 유튜브나 각 컨퍼런스 사이트에 공유된 영상 및 슬라이드
💡 시스템 설계 면접을 위한 6가지 팁
1. 설계를 시작하기 전에 충분한 질문을 통해 요구사항을 정확히 이해하세요.
2. 설계 범위를 넓고 얕게 잡을지, 또는 어느 특정 영역에 집중해서 볼지 면접관과 상의하세요.
3. 대략적인 설계안을 제시한 뒤, 상세한 설계로 들어가는 흐름이 좋습니다.
4. 본인이 자신 있는 부분에 좀 더 집중해서 설명하셔도 됩니다.
5. 가능하다면 두 개 이상의 설계안을 제시하고, 각 설계안의 장단점을 비교해 보세요.
6. 동료와 함께 설계한다고 생각하고 끊임없이 소통하면서 진행하세요.
사실 시스템 설계 실력은 단기간의 준비로 확 끌어올리긴 어렵습니다. 꾸준한 공부와 실제 업무에서의 경험이 합쳐져서 조금씩 노하우가 쌓이게 되죠. 하지만 제대로 시스템 설계 지식을 쌓아 놓으면 면접 상황 외에 평소 업무에서도 많은 도움이 되니, 포기하지 말고 꾸준히 공부하시길 바랍니다!
📔 함께 읽어보면 좋은 글
- 소프트웨어 시스템 설계 시 고려할 세 가지: https://careerly.co.kr/comments/67065
위 내용은 저의 브런치 글 <시스템 설계 면접 준비 방법>의 일부를 정리한 내용입니다.