가상 면접 사례로 배우는 대규모 시스테 설계 기초 #2,3(개략적인 규모 추정, 시스템 설계 면접 공략법)
계략적인 규모 추정
- 효과적인 규모 추정을 위해서는 아래와 같은 기본 수치들을 잘 이해하고 있어야 한다.
- 데이터 볼륨이 2의 제곱수로는 어떻게 표현되는지 (예 kb는 2의 10제곱)
- 응답지연 값 (예 디스크 탐색은 10ms)
- 가용성 관련 수치
- 시스템이 오랜 시간동안 지속적으로 중단 없이 운영될 수 있는 능력
- 99% - 100%사이의 값
- 팁
- 올바른 절차를 밟느냐가 중요하다 왜냐하면 문제 해결 능력이 중요하기 때문이다.
- 복잡한 수치는 근사치 활용
- 가정들은 적어 두어라
- 단위를 붙이라
- 자주 출제되는 규모 추정 문제 (QPS, Peak QPS, 저장소 요규량, 캐시 요구량, 서버 수 등)은 미리 연습 하도록 하자
- 질문
시스템 설계 면접 공략법
효과적인 면접을 위한 4단계 접근법
1. 문제 이해 및 설계 범위 확정
- 깊이 생각하고 질문하여 요구사항과 가정들을 분명이하라.
- 요구사항을 정확히 이해는데 필요한 질문들은 아래와 같다.
- 구체적인 기능은?, 제품의 사용자 수는? 규모는 얼마나 빠르게 커질거라 예상? 주요 기술 스택?, 설계를 단순화하기 위해 활용할 수 있는 기존 서비스는?
2. 개략적인 설계안 제시 및 동의 구하기
- 면접관과 협력하며 진행하면 좋다.
- 설계안의 대한 최초 청사진을 제시하고 긔견을 구하라.
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
- 최초 설계안이 시스템 규모에 관련된 제약사항들을 만족하는지 개략적으로 계산해 보라.
- api엔드 포인트나 데이터베이스 스키마도 보여야 하는가에 대한 질문은 규모에 따라 다르고 면접관에게 의견을 물어보자
3. 상세 설계
- 면접관과 함께 설계 대상 컴포넌트 사이의 우선순위를 정하는것
- 단축 url 생성기였으면 해시 함수 설계에 대해 구체적으로 듣고 싶어할것
- 채팅 시스템 이였으면 어떻게 지연시간을 줄이고 온/오프 상태를 표시할 것인지 듣고 싶어할것
- 불필요한 세부사항에 시간을 쓰지말고 시스템 설계 능력이 있다는 것을 입증하는데 도움이 되는 긍정적 신호를 전달하는데 집중하자.
4. 마무리
- 면접관이 개선 가능한 지점을 찾아내라 주문할 수 있다. 여기에서 비판적인 사고 능력을 보이며 부족한 부분을 답하도록 하자.
- 설계를 다시 요약하는것 도 나쁘지 않다.
- 오류가 발생하면 무슨 일이 생기는지 (서버 오류, 네크워크 장애등)를 따져보는것도 좋다.
- 운영 이슈도 논의해도 좋다. (매트릭 수집 방법, 로그, 배포, 모니터링)
- 미래에 닥칠 규모 확장에는 어떻게 대처할 것 인가도 좋다.
- 필요하지만 다루지 못했던 세부적 개선사항들을 제안 할 수 있다.
해야할 것
- 질문을 통해 가정을 확인하라 절대 스스로 내린 가정을 믿고 진행하지 말라
- 요구사항을 이해하라
- 정답은 없다. 스타츠업과 중견기업을 위한 설계안은 같을리 없다.
- 면접관이 사고 흐름을 이해할 수 있도록 소통하라
- 가능하면 여러 해법을 제시하라
- 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 셰부사항을 설명하라. 그리고 가장 중요한 컴포넌트부터 진행하라
- 면접관의 아이디어를 끌어내라
- 포기하자 말라
하지 말아야 할 것
- 전형적인 면접 문제에는 대비하지 않은 상태에서 면접장에 가지 말라
- 요구사항이나 가정을 분명이 하지 않은 상태에서 설계를 진행하지 말라
- 처음부터 세부사항을 너무 깊이 설명하지 말라. 개략적인 설계 -> 세부사항 으로 진행해라
- 진행중 막혔다면, 힌트를 구하라
- 침묵속에 설계하지 말라. 무조건 소통하라
- 면접관이 끝났다고 말하기 전까지 끊났다고 생각하지 말라
- 의견을 일찍 자주 구해라