////
Search

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

생성일
2024/07/06 07:10
태그
Interview

1. 개요

설계의 순수성에 집착한 나머지 타협적 결정을 도외시하고 과도한 엔지니어링을 하고 마는 엔지니어들이 현업에도 많다.
과도한 엔지니어링의 결과로 시스템 전반의 비용이 올라간다는 사실을 알아채지 못하는 일이 많은데, 그 결과 상당수 회사들은 값 비싼 대가를 치르고 있다.
이번 장에서는 시스템 설계 면접에 관한 유용한 팁들을 살펴보고 시스템 설계 문제를 공략하는 효과적 접근법을 배울것이다.

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

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

시스템 설계 면접을 볼 때는 생각없이 바로 답을 내서는 좋은 점수를 받기 어렵다.
요구사항을 완전히 이해하지 않고 답을 내놓는 행위는 아주 엄청난 부정적 신호다.
!!면접은 정답이 없다!!
답부터 들이밀지 말고 속도를 늦춰 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하라.
정말정말 중요한 단계기 때문에 몇 번을 강조해도 모자람이 없다.
우리가 가져야할 태도는 올바르게 질문하고, 적절한 가정을 하여 시스템 구축에 필요한 정보를 모으는 것이다.
그렇다면 어떤 질문을 해야할까?
구체적으로 어떤 기능들을 만들어야 하나?
제품 사용자 수는 얼마나 되나?
회사의 규모는 얼마나 빨리 커지라 예상하나
회사가 주로 사용하는 기술 스택은 무엇인가?
설계 단순화를 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?

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

이번 단계에서 초점을 맞추어야 할 것은 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이다.
설계안에 대한 최초 청사진을 제시하고 의견을 구하라.
면접관이 팀원인 것처럼 대화하자
화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라
클라이언트, API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등등
이 최소 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해 보라
계산 과정은 소리내어 설명하며, 개략적 측정이 필요한지는 면접관에게 물어보도록하자
가능하다면 시스템의 구체적 사용 사례도 살펴보자
개략적 설계안을 잡아가는데 도움이 될 것이다.
에지 케이스 발견에도 도움을 준다.

2.3. 3단계 - 상세 설계

이제 해야할 일은 설계 대상 컴포넌트 사이의 우선순위를 정하는 것 이다.
면접관에 따라 맞춰야하는 초점이 다를 수 있다.
면접 시에는 시간관리에도 특별히 주의를 기울여야 한다.
사소한 세부사항을 설명하느라 정작 여러분의 능력을 보일 기회를 놓쳐버릴 수 있다.
불필요한 세부사항에 시간을 쓰지말라

2.4. 4단계 - 마무리

이 단계에서 면접관은 설계 결과물에 관련된 몇 가지 후속 질문을 던질 수도 있고 스스로 추가 논의를 진행하도록 할 수도 있다.
면접관이 시스템 병목구간, 혹은 좀 더 개선 가능한 지점을 찾아내라 주문할 수 있다.
이런 질문은 면접자의 비판적 사고 능력을 보이고, 마지막으로 좋은 인상을 남길 기회다.
만든 설계를 다시 요약해주는 것도 도움이 될 수 있다.
여러 해결책을 제시한 경우에는 특히 중요하다.
오류가 발생하면 무슨 일이 생기는지 따져보면 흥미로울 것이다.
운영 이슈도 논의할 가치가 충분하다
미래에 닥칠 규모 확장 요구에 어떻게 대응할 것인지도 흥미로운 주제다.
시간이 남는다면 다루지 못했던 세부적 개선 사항도 제안할 수 있다.

2.4.1. 해야 할 것

질문을 통해서 확인하라.
문제의 요구사항을 이해하라
정답이나 최선의 답안 같은 것은 없다는 점을 명심하자
면접관이 우리의 사고 흐름을 이해할 수 있도록 하라
가능하다면 여러 해법을 함께 제시하라

2.4.2. 하지 말아야 할 것

전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 말라
요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라
처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라
개략적 설계를 마친 후 세부사항을 해야한다.
진행 중 막힌다면 힌트 청하기를 주저하지 말라
소통을 주저하며 침묵 속에 설계를 진행하지 말라
면접관이 끝났다고 말하기 전까지 끝난것이 아니다. 의견을 자주 일찍 구하자

2.5. 시간 배분

1단계 - 문제 이해 및 설계 범위 확정 = 3분에서 10분
2단계 - 개략적 설계안 제시 및 동의 구하기 = 10분에서 15분
3단계 - 상세 설계 = 10분에서 25분
4단계 - 마무리 = 3분에서 5분