![[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 3장 시스템 설계 면접 공략법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FphZbC%2FbtsKKnWjK4M%2FtSZ8iYSpxggEBjrBy4kovK%2Fimg.png)
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 3장 시스템 설계 면접 공략법Study/대규모 시스템 설계 기초2024. 11. 14. 20:01
Table of Contents
3장. 시스템 설계 면접 공략법
시스템 설계 면접이란?
모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션
면접관이 시스템 설계 면접에서 찾고자 하는 것
- 지원자의 설계능력의 기술적 측면
- 협력에 적합한 사람
- 압박이 심한 상황도 잘 헤쳐나가는 자질
- 모호한 문제를 건설적으로 해결할 능력
- 좋은 질문을 던질 능력
지양해야 할 것
- 설계의 순수성에 집착한 나머지 타협적 결정(tradeoff)을 도외시하고 과도한 엔지니어링을 하는것
- 고도한 엔지니어링의 결과 → 시스템 전반의 비용 상승
- 완고함, 편협함
효과적 면접을 위한 4단계 접근법
1단계. 문제 이해 및 설계 범위 확정
요구사항을 완전히 이해하기
→ 올바른 질문을 하는 것, 적절한 가정을 하는 것, 시스템 구축에 필요한 정보를 모으는 것
요구사항을 정확히 이해하는데 필요한 질문들
- 구체적으로 어떤 기능들을 만들어야 하나?
- 제품 사용자는 수는 얼마나 되나?
- 회사의 규모는 얼마나 빨리 커지리라 예상하나? 3달, 6달, 1년 뒤의 규모는 얼마가 되리라 예상하는가?
- 회사가 주로 사용하는 기술 스택은 무엇인가?
- 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?
2단계. 계략적인 설계안 제시 및 동의 구하기
계략적인 설계안을 제시하고 면접관의 동의를 얻자. 이 과정은 면접관과 협력하며 진행하면 좋다.
- 설계안에 대한 최초 청사진을 제시하고 의견을 구하라. 면접관을 마치 팀원처럼 대하며, 좋은 면접관들은 지원자들과 대화하고 설계 과정에 개입하기를 즐긴다.
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
- 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 같은 것들이 포함된다.
- 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해보자.
- 개략적 추정이 필요한지 면접관에게 미리 물어보자.
시스템의 구체적 사용 사례로 살펴보는 것이 개략적 설계안을 잡아 나가는데 도움이 된다.
마치 고려하지 못한 에지 케이스(edge case)를 발견하는 데도 도움이 된다.
3단계. 상세 설계
지금까지 한 일
- 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
- 전체 설계의 개략적 청사진 마련
- 해당 청사진에 대한 면접관의 의견 청취
- 상세 설계에서 집중해야 할 영역들 확인
이제 해야할 일
- 설계 대상 컴포넌트 사이의 우선순위를 정하는 것
- 면접관이 집중하고 있는 영역을 파악하기
- ex) 선입금 개발자 면접 : 시스템의 성능 특성에 대한 질문 → 시스템의 병목구간 혹은 자원 요구량 추정치에 초점
- 대부분 특정 시스템 컴포넌트들의 세부사항을 깊이 있게 설명하는 것을 보길 원한다.
ex) 단축 URL 생성기 : 해시함수의 설계를 구체적으로 설명
ex) 채팅 시스템 : 어떻게 하면 지연시간(latency)을 줄이고 사용자의 온/오프라인 상태를 표시할 것인지
- 불필요한 세부사항에 시간을 쓰지말고, 나의 시스템 설계 능력을 입증하는데 시간을 쓰자.
4단계. 마무리
- 시스템 병목구간 혹은 좀 더 개선 가능한 지점을 찾아내라고 주문하는 경우
→ 개선 가능한 지점이나 비판적으로 설계를 바라보는 관점을 어필하면 좋은 인상을 남길 수 있다. - 설계를 마지막에 한번 다시 요약해주기
- 오류가 발생하면 무슨 일이 생기는지(서버 오류, 네트워크 장애 등) 따져보기
- 운영 이슈
→ 메트릭은 어떻게 수집하고 모니터링 할 것인지? 로그는? 시스템은 어떻게 배포(roll-out)할 것인지? - 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지? (사용자가 늘어나는 경우 어떻게 감당할지)
- 시간이 남는다면, 필요하지만 다루지 못했던 세부적 개선사항들을 제안하기
정리
해야할 것
- 질문을 통해 확인하기. 스스로 내린 가정이 옳다 믿고 진행하지 말기
- 문제의 요구사항을 이해하기
- 정답이나 최선의 답안 같은 것은 없다는 점을 명심하기
- 요구사항을 정확하게 이해했는지 다시 확인하기
- 면접관이 나의 사고 흐름을 이해할 수 있도록 소통하기
- 가능하다면 여러 해법을 함께 제시하기
- 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 세부사항을 설명하기 시작하기. 가장 중요한 컴포넌트부터 진행하기.
- 면접관의 아이디어를 이끌어 내기
- 포기하지 말기
하지 말아야 할 것
- 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 말기
- 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말기
- 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말기
- 개략적 설계를 마친 뒤에 세부사항으로 나아가기
- 진행 중에 막혔다면 힌트를 청하기를 주저하지 말기
- 소통을 주저하지 말기.
- 설계안을 내놓는 순간 면접이 끝난다고 생각하지 말기
'Study > 대규모 시스템 설계 기초' 카테고리의 다른 글
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 4장 개략적인 규모 측정 (1) | 2024.11.14 |
---|---|
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2장 개략적인 규모 측정 (0) | 2024.11.14 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1장 사용자 수에 따른 규모 확장성 (0) | 2024.11.14 |
대규모 시스템 설계 기초 스터디 (0) | 2024.11.14 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!