가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고
가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 페이스북의 뉴스 피드나 메신저,유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까? IT 경력자라도 느닷없이 대규모 시스템을 설
product.kyobobook.co.kr
3장, 시스템 설계 면접 공략법
- 시스템 설계 면접은 당황스러울 때가 많다.
- “널리 알려진 제품 X를 설계해보라”는 식으로 막연한 문제가 나올 때도 있다.
- 이런 질문들은 모호하고, 범위도 지나치게 넓다. 그렇다면, 대체 시스템 설계 면접이 있는 이유는 무엇인가?
- 시스템 설계 면접은 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션이다. 이 문제에는 정해진 결말도 없고, 정답도 없다. 최종적으로 도출될 설계안은 여러분이 설계 과정에 들인 노력에 비하면 그다지 중요하지 않다.
- 이 면접은 여러분의 설계 기술을 시연하는 자리이고, 설계 과정에서 내린 결정들에 대한 방어 능력을 보이는 자리이며, 면접관의 피드백을 건설적인 방식으로 처리할 자질이 있음을 보이는 자리이다.
- 훌륭한 면접관은 부정적 신호도 놓치지 않는다. 설계의 순수성에 집착한 나머지 타협적 결정을 도외시하고 과도한 엔지니어링 (Over-Engineering)을 하고 마는 엔지니어들이 현업에도 많다. 그런엔지니어들은 과도한 엔지니어링의 결과로 시스템 전반의 비용이 올라간다는 사실을 알아채지 못하는 일이 많다.
- 문제 이해 및 설계 범위 확정
- 시스템 설계 면접을 볼 때 생각 없이 바로 답을 내서는 좋은 점수를 받기 어렵다.
- 요구 사항을 완전히 이해하지 않고 답을 내놓은 행위는 아주 엄청난 부정적 신호이다.
- 면접은 퀴즈 쇼가 아니며, 정답 따위는 없다는 걸 상기하자.
- 답부터 들이밀지 말고, 속도를 늦춰라. 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하라.
- 온전한 질문과 가정을 통해 시스템 구축에 필요한 정보를 모으는 ‘엔지니어적 사고’를 보여라.
- 아래와 같은 질문들을 생각해볼 수 있다.
- 구체적으로 어떤 기능들을 만들어야 하는가?
- 제품 사용자 수는 얼마나 되는가?
- 회사의 규모는 얼마나 빨리 커지리라 예상되는가?
- 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가?
- 회사가 주로 사용하는 기술 스택은 무엇인가?
- 설계를 단순화하기 위해 활용할 수 있는 기존 서비스는 어떤 것이 있는가?
- 해야할 것
- 질문을 통해 확인하라. 스스로 내린 가정이 옳다 믿고 진행하지 말라.
- 문제의 요구사항을 완벽히 이해하라.
- 정답이나 최선의 답안 같은 것은 없다는 점을 명심하라.
- 면접관이 여러분의 사고 흐름을 이해할 수 있도록 하라. 소통하라.
- 가능하다면 여러 해법을 함께 제시하라.
- 개략적 설계에 면접관이 동의하면 각 컴포넌트의 세부 사항을 설명하기 시작하라.
- 가장 중요한 컴포넌트부러 진행하라.
- 면접관의 아이디어를 이끌어 내라. 좋은 면접관은 여러분과 같은 팀원처럼 협력한다.
- 포기하지 말라.
- 하지 말아야 할 것
- 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 말라.
- 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라.
- 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라.
- 개략적 설계를 마친 뒤에 세부사항으로 나아가라.
- 진행 중에 막혔다면, 힌트를 청하기를 주저하지 말라.
- 다시 말하지만, 소통을 주저하지 말라. 침묵 속에 설계를 진행하지 말라.
- 설계안을 내놓는 순간 면접이 끝났다고 생각하지 말라. 면접관이 끝났다고 이야기 하기 전 까지는 끝난 것이 아니다. 의견을 일찍, 그리고 자주 구하라
- 시간 배분
- 문제 이해 및 설계 범위 확정 - 3분에서 10분
- 개략적 설계안 제시 및 동의 구하기 - 10분에서 15분
- 상세 설계 - 10분에서 25분
- 마무리 - 3분에서 5분
느낀 점
- 시스템 설계 면접은 혼자서 독단적으로 완벽한 결과물을 내는 것이 아니다.
- 결국 면접관도 나와 함께 일할 동료이자, 의견을 나눌 수 있는 한 명의 개발자이다.
- 주어진 문제를 독단적으로 확신에 차 해결하기보다는 면접관과 소통하며 가능한 많은 요구사항과 아키텍처의 신뢰도를 올릴 수 있는 힌트들을 얻어보자.
- 다시 말하지만 완벽한 아키텍처는 없다.
'개발 이야기 (Dev Story)' 카테고리의 다른 글
"가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 읽고 - 4장 (0) | 2024.05.11 |
---|---|
[아키텍처 패턴] 레이어 패턴 (Layered Pattern) (0) | 2024.05.10 |
"가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 읽고 - 1장 (0) | 2024.05.10 |
"그림으로 공부하는 마이크로서비스 구조" 을 읽고 (5장 - 끝) (2) | 2024.01.24 |
"그림으로 공부하는 마이크로서비스 구조" 을 읽고 (1장 - 4장) (0) | 2024.01.20 |