개발 책 읽기 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1 #
3장. 시스템 설계 면접 공략법 #
시스템 설계 면접 #
두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션 정해진 결말도 없고, 정답도 없다. 최종적으로 도출된 설계안은 설계 과정에 비하면 그다지 중요하지 않다.
면접관의 일차적 목표 : 능력 평가 #
-
면접관이 시스템 설계 면접에서 찾고자 하는 것은?
- 시스템 설계 면접이 잘 진행되면, 지원자가 협력에 적합한 사람인지?
- 압박이 심한 상황에서도 잘 헤쳐나갈 자질이 있는지?
- 모호한 문제를 건설적으로 해결할 능력이 있는지?
- 좋은 질문을 던질 능력이 있는지?
-
부정적 신호
- 설계의 순수성에 집착한 나머지 타협적 결정을 도외시하고 과도한 엔지니어링을 하고 마는 엔지니어들이 현업에 많다.
- 과도한 엔지니어링의 결과로 시스템 전반의 비용이 올라간다.
- 그 결과로 상당수 회사들이 값비싼 대가를 치른다.
- 이러한 경향이 있다는 것을 보이고 싶지 않을 것
- 부정적 신호 : 완고함, 편협함
- 설계의 순수성에 집착한 나머지 타협적 결정을 도외시하고 과도한 엔지니어링을 하고 마는 엔지니어들이 현업에 많다.
효과적 면접을 위한 4단계 접근법 #
1단계. 문제 이해 및 설계 범위 확정 #
- 답을 알든 모르든 선생이 문제를 던지면 바로 덤벼들기 좋아하는 자세 <- 면접에서 아주 곤란하다.
- 시스템 설계 면접을 볼 때 생각 없이 바로 답을 내서는 안된다.
- 바로 답부터 들이지지 말라.
- 속도를 늦춰라.
- 깊이 생각하고 질문하여 오구사항과 가정들은 분명히 하라.
- 엔지니어가 가져야 할 가장 중요한 기술
- 올바른 질문을 하는 것
- 적절한 가정을 하는 것
- 시스템 구축에 필요한 정보를 모으는 것
- 요구 사항을 정확히 이해하는 데 필요한 질문
- 구체적으로 어떤 기능들을 만들어야 하나?
- 제품 사용자 수는 얼마나 되나?
- 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가?
- 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?
2단계. 개략적인 설계안 제시 및 동의 구하기 #
- 설계안에 대한 최초 청사진을 제시하고 의견을 구하라
- 면접관을 마치 팀원인 것처럼 대하라. 면접관들이 지원자들과의 대화와 설계 과정에 개입을 즐길 수 있다.
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라
- 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등이 포함될 수 있다.
- 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해보라
- 계산 과정을 소리 내어 설명하라
3단계. 상세 설계 #
- 해당 단계에서는 아래 목표를 달성한 상태다.
- 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
- 전체 설계의 개략적 청사진 마련
- 해당 청사진에 대한 면접관의 의견 청취
- 상세 설계에서 집중해야 할 영역들 확인
- 이제 해야할 일은 설계 대상 컴포넌트 사이의 우선순위를 정하는 것
- 집중했으면 하는 영역, 시스템의 성능 특성에 대한 질문(병목 구간, 자원 요구량 추정치에 초점)
4단계. 마무리 #
- 추가 논의 진행 시, 다음 몇 가지 지침을 활용하자
- 면접관이 시스템 병목구간, 혹은 좀 더 개선 가능한 지점을 찾아내라 주문할 수 있다.
- 만든 설계를 한번더 요약해주자.
- 오류가 발생하면 무슨 일이 생기는지(서버 오류, 네트워크 장애 등) 따져보자.
- 면접관이 우리의 사고 흐름을 이해할 수 있도록 하자.
- 여러 해법을 함께 제시하라
- 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 세부사항을 설명하기 시작하라. 가장 중요한 컴포넌트부터 진행하라.
- 면접관의 아이디어를 이끌어내라. 좋은 면접관은 여러분과 같은 팀원처럼 협력한다.
- 포기하지말라.
하지 말아야 할 것 #
- 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라.
- 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말라. 개략적 설계를 마친 뒤에 세부사항으로 넘어가라.
- 진행 중에 막혔다면, 힌트를 청하기를 주저하지 말라.
- 소통에 주저하지 말라. 침묵 속에 설계를 진행하지 말라.
- 설계안을 내놓는 순간 면접이 끝났다고 생각하지 말라.
- 도서 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1