가상 면접 사례로 배우는 대규모 시스템 설계 기초 (알렉스 쉬 저)를 읽고 정리합니다.
💡 만약에 내가 구글 면접을 가. 근데 시스템 설계 면접을 볼거래.
내가…. 구글 시스템 설계를?....
👉 정답 기대하는게 아님!
1️⃣ 팁
💡 시스템 설계는 정해진 정답이 없는 질문이다.
- 보려는 것
- 설계 기술 시연
- 설계 과정에서 내린 결정에 대한 방어 능력 → 왜 그렇게 설계했는지에 대한 질문을 받아 칠 수 있는지?
- 면접관의 피드백을 건설적으로 처리할 자질 → 피드백을 받아 내 설계에 반영할 수 있는지?
- 보려는 이유
- 협력에 적합한 사람인지?
- 압박이 심한 상황에서 잘 판단 내릴 수 있는지?
- 모호한 문제를 건설적으로 해결할 수 있는지?
- 좋은 질문을 할 수 있는지?
- 완고하지 않고, 편협하지 않고…
2️⃣ 효과적 면접을 위한 4단계 접근법
💡 시스템 설계 면접의 공통 분모
1. 문제 이해 및 설계 범위 확정 :: 모호함 없애기
- 빠른 답변 필요 X
- 요구사항과 가정을 분명히 하기 위해 신중하게 생각하자
올바른 질문, 적절한 가정, 시스템 구축에 필요한 정보
를 모으는게 중요. 답변에 시간 좀 들어도 된다
- 이런 질문을 해보자
- 구체적으로 어떤 기능들이 필요? 가장 중요한 기능은?
- 제품 사용자 수는?
- 회사 규모의 확대 속도와 기대 수명은?
- 회사 사용 기술 스택은? 설계 단순화를 위한 기존 서비스는?
2. 개략적인 설계안 제시 및 동의 구하기 :: 면접관과 협력하기
- 이런걸 해보자
- 설계 최초 청사진 제시 후 의견 구하기
- 핵심 컴포넌트를 포함하는 다이어그램 그리기
- 클라, API, 웹 서버, DB, 캐시, CDN, 메세지 큐 등…
- 최초 설계안이 시스템 규모 제약을 만족하는지 계산해보기
- 시스템 구체적 사용 사례 확인하기
- 질문에 따라 API 엔드포인트, DB 스키마도 고려
- 전체 시스템이 아닌 백엔드 시스템을 설계하라는 질문이면 필요할 것!
3. 상세 설계 :: 설계 컴포넌트 우선순위 정하기
- 면접관이 강조한 설계 영역
- 보통 시니어라면?
- 시스템 성능 특성 → 병목 구간, 자원 요구량 추정치
- 컴포넌트 세부사항에 초점 맞췄을 것
- 시간 관리하기
- 사소한건 버리고, 면접관이 관심 있어하는 요소에 집중하자
4. 마무리 :: 설계에 대한 후속 질문 및 추가 논의
- 시스템 개선 방법에 대한 질문
- 비판적 사고 → 일단 그 자리에서 내가 완벽퍼펙트어메이징한 설계를 하진 않았을 것ㅋㅋ 뭘 놓쳤을까 한번 찾아보자
- 설계 요악
- 오류 발생했을 때 어떤 일이 생기는지?
- 운영 이슈 (메트릭 수집, 모니터링, 로그, 배포…)
- 규모 확장
- 등등