////
Search
Duplicate
3️⃣

3장. 시스템 설계 면접 공략법

시스템 설계 면접은 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션이다.
이 문제는 정해진 결말도 없고 정답도 없다. 최종적으로 도출되는 설계안은 당신이 설계 과정에 들인 노력에 비해 중요하지 않다는 것이다.
이 면접은 설계 기술을 시연하는 자리며 이 과정에서 내린 결정들에 대해 방어 능력을 보이는 자리이자. 면접관의 피드백을 건설적인 방식으로 처리할 자질이 있음을 보이는 자리이다.
주의할 사항은 다음과 같다.
기술적 역량만을 보는 것이 아니다.
협업에 적합한지, 압박에도 잘 헤쳐 나갈 수 있는지, 모호한 문제를 요구사항 분석을 통해 해결할 능력이 있는지, 이 과정에서 내뱉는 질문들은 적절한지 등도 본다.
설계의 순수성의 가치에 집착한 나머지 상충관계를 고려하지 않고 오버 엔지니어링해버릴 수 있다.

효과적 면접을 위한 4단계 접근법

시스템 설계 면접의 공통적인 부분이다.

1단계 문제 이해 및 설계 범위 확정

이 단계에서의 초점은 문제를 이해하고 적절한 질문을 통해 분석하는 것이다.
면접은 퀴즈 쇼가 아니다. 답부터 들이밀지 말고 속도를 늦춰야 한다.
가장 먼저 해야하는 것은 내게 주어진 문제가 무엇인지 이해하고 분석하는 것부터다.
가정을 하고, 시스템 구축에 필요한 정보를 모으기 위해 질문하라.
구체적으로 어떤 기능들을 만들어야 하나?
제품 사용자 수는 얼마나 되나?
회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가?
회사가 사용중인 기술 스택은 무엇인가? 설계를 단순화하기 위해 사용할 수 있는 기존 서비스는 무엇이 있는가?

2단계 개략적인 설계안 제시 및 동의 구하기

이 단계에서의 초점은 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이다. 이 과정은 면접관과 협력하며 진행하면 좋다.
설계안의 최초 청사진을 제시하고 의견을 구하라.
화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해보라.
가능하다면 시스템의 구체적 사용 사례도 몇 가지 고민하자. 이 과정에서 엣지 케이스를 발견해낼 수도 있을 것이다.
어느 단계까지 설계해야하는 가에 대한 물음은 시스템의 규모에 따라 달라진다. 물어봐서 결정하거나 적절히 선택하자.

3단계 상세 설계

이 단계에서의 초점은 개략적인 설계안 별로 구체화를 시도하는 것이다.
이 단계까지 왔다면 다음의 사항들은 이미 달성한 상태라고 가정한다.
시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
전체 설계의 개략적 청사진 마련
해당 청사진에 대한 면접관의 의견 청취
상세 설계에서 집중해야 할 영역들 확인
너무 구체적인 사항에 매몰되지 않도록 한다. 시간이 너무 많이 들 뿐더러 우리는 설계해야할 것들이 너무나도 많다.

4단계 마무리

이 단계에서 우리는 방어 능력을 시험당한다.
면접관 별로 중요시 여기는 가치들에 대해 질문이 들어올 것이며 시스템 병목 구간, 좀 더 개선 가능한 지점들을 찾아내라 주문할 것이다.
우리가 만든 설계를 다시 한번 요약해주는 것도 도움이 될 수 있다. 여러 해결책을 제시한 경우에는 특히나 더 좋다.
오류가 발생하면 무슨 일이 생기는지, 어떻게 퍼져나가는 지를 따져보는 것도 흥미로울 것이다.
운영 이슈도 논의할 가치가 충분한다. 어떻게 로그를 발생시키고 수집하며, 모니터링할 것인가? 시스템은 어떻게 배포할 것인가?
미래에 닥쳐올 규모 확장에 대한 논의도 재밌을 것이다.
시간이 좀 남는다면 좀 더 세부적인 사항들을 개선시켜도 좋을 것이다.

시스템 면접 세션에서 해야할 것

질문을 통해 확인하라. 스스로 내린 가정이 옳다고 믿지 말라.
문제의 요구사항을 이해하라.
정답이나 최선의 답안 같은 것은 없다는 점을 명심하라. 상충 관계를 고려해서 결정하라.
면접관이 우리의 사고 흐름을 잘 이해할 수 있도록 하라. 즉, 소통하라.
가능하다면 여러 해법을 함께 제시하라.
개략적 설계에 면접관이 동의한다면 각 컴포넌트의 세부 사항을 설명하기 시작하라. 가장 중요한 컴포넌트부터

시스템 면접 세션에서 하지 말아야할 것

대비도 안 된 상태에서 임하지 말라.
요구사항이나 가정들을 충분히 숙지하지 않은 상태에서 설계를 제시하지 말라.
처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라. 개략적 설계를 마친 후 세부사항으로 나아가는 것이 순서다.
진행 중에 막혔다면 힌트를 청하기를 주저하지 말라.
다시 말하지만 소통을 많이 하자. 침묵 속에 설계를 이어나가지 말자.
설계안을 내놓는 순간 면접이 끝난 것이 아니다. 그제서야 시작되는 것이다.

시간 배분

보통 45분에서 1시간 정도를 면접에 소요하게 될 것이다. 따라서 시간 관리가 중요하다.
각 단계별 대략적 추정치다. 실제로 소모되는 시간은 면접관의 요구사항이나 문제의 범위에 따라 달라질 것이다.
1단계 - 3분에서 10분
2단계 - 10분에서 15분
3단계 - 10분에서 25분
4단계 - 3분에서 5분