티스토리 뷰
- 시스템 설계 면접
- 기술적 측면 이상으로 지원자가 협렵에 적합한 사람인지, 압박이 심한 상황도 잘 헤쳐나가는지, 좋은 질문을 던질 능력이 있는지
- 부정적인 것
- 설계의 순수성에 집착한 나머지 타협적 결정을 도외시하고 오버 엔지니어링을 하는 엔지니어링들이 협업에도 많다.
- 오버 엔지니어링의 결과로 시스템 전반의 비용이 올라간다. 상당수 회사들은 값비싼 대가를 치르고 있다.
효과적 면접을 위한 4단계 접근법
1단계: 문제 이해 및 설계 범위 확정
- 바로 답부터 들이밀지 말자. 속도를 늦추자. 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하자.
- 가장 중요한 기술 중 하나는 올바른 질문을 하는 것. 적절한 가정을 하는 것. 그리고 시스템 구축에 필요한 정보를 모으는 것.
- 이 단계에서는 요구사항을 이해하고 모호함을 없애는 게 이 단계에서 가장 중요하다.
Ex) 뉴스피드 시스템 설계
- 질문
- 웹, 앱 중 어느 쪽을 지원해야 하는가?
- 가장 중요한 기능이 무엇인가?
- 뉴스피드의 정렬상태는 어떻게 되야하는가?
- 최대 사용자? 친구상태?
- 트래픽 규모?
- 피드에 이미지 또는 영상의 유무?
2단계: 개략적인 설계안 제시 및 동의 구하기
- 개략적인 설계안을 제시하고, 면접관의 동의를 얻는 것
- 최초 설계안을 제시/의견 -> 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지 개략적으로 계산해보자.
- (사견) 개략적인 설계안을 생각 할 때, 큰 구조를 작게 나눠 중요한 기능 단위로 구조를 나눠보는 것도 좋을 것 같다.
- Ex) 뉴스 피드 시스템의 경우, 중요한 2가지 기능(피드발행, 피드생성)으로 나눠 설계해볼 수 있다.
3단계: 상세 설계
- 대부분의 경우, 면접관은 여러분의 특정 시스템 컴포넌트들의 세부사항을 깊이 있게 설명하는 것을 보길 원한다.
- Ex)
- 단축 URL 생성기 설계 -> 해시 함수 설계를 어떻게 하였는가?
- 채팅 시스템 -> 어떻게 지연시간을 줄였는가? 사용자의 온/오프라인 상태를 어떻게 확인하는가?
4단계: 마무리
- 시스템에 개선할 점은 언제나 있기 마련이다. 면접관이 개선 가능한 점을 찾아내라 주문한다면, 자신의 설계를 비판적 사고로 바라보자.
- 만든 설계를 한번 다시 요약해주자.
- 오류(ex. 서버오류/네트워크 장애 등)가 발생하면 무슨 일이 생기는지 생각해보자.
- 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지 생각해보자.
하지 말아야 하는 것
- 전형적인 면접 문제들에도 대비하지 않고 면접장에 가지말자.
- 요구사항/가정이 분명하지 않은 상태에서 설계를 하지말자.
- 특정 컴포넌트의 세부사항을 너무 깊게 설명하지 말자. 그 설명에 빠져 핵심적인 설명을 못하는 경우가 존재.
- 힌트를 청하길 주저하지 말자. 면접관과 소통해나가며 풀어나가자. 침묵 속 설계를 진행하지 말자.
- 의견을 일찍, 그리고 자주 구하자. 면접이 끝나기 전까지.
320x100
반응형
'Book' 카테고리의 다른 글
[실용주의 프로그래머] Topic 1 ~ 5 (1) | 2022.03.29 |
---|---|
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 10장 - 알림 시스템 설계 (0) | 2022.03.16 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 7장 - 분산 시스템을 위한 유일 ID 생성기 설계 (2) | 2022.02.18 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 4장 - 처리율 제한 장치의 설계 (0) | 2022.02.01 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1장 - 사용자 규모에 따른 확장성 (0) | 2022.01.19 |
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- HTTP
- k8s
- c++
- python
- 쿠버네티스
- 하루
- java
- 클린 아키텍처
- Spring
- Istio
- gradle
- 백준
- 일상
- MySQL
- 로그
- jasync
- tag
- 알고리즘
- Kubernetes
- OpenTelemetry
- Algorithm
- Intellij
- Clean Architecture
- container
- docker
- Log
- 비동기
- WebFlux
- boj
- Spring boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함