# 시스템 설계 면접 공략법

### 면접관들의 관점

- 면접관의 피드백을 건설적인 방식으로 처리할 수 있는가

- 협력에 적합하고, 압박을 잘 헤쳐 나갈 수 있는가

- 모호한 문제를 건설적으로 해결할 수 있는가

- **설계의 순수성에 집착한 나머지 tradeoff를 도외시하지는 않는가**

## 4단계 접근법

### 1. 문제 이해 및 설계 범위 확정

- 천천히 요구사항과 가정들을 깊이 생각하고 질문하라

- 올바른 질문을 하는 것, 적절한 가정을 하는 것, 그리고 정보를 모으는 것이 가장 중요하다.

    - 구체적인 기능?

    - 제품 사용자 수

    - 서비스의 성장 속도

    - 기술 스택 …

### 2. 개략적인 설계안 제시 및 동의 구하기

- 최초 설계안을 제시하고 면접관들과 대화하면서 의견을 구하라

- 핵심 컴포넌트를 포함하는 다이어그램을 그려라

- 최초 설계안이 제약사항들을 만족하는지 계산하라. 계산은 소리내서

- 구체적인 사용 예시도 살펴보자

- 설계하는 시스템의 규모에 따라 지나치게 세부적인 내용은 하지 말자

### 3. 상세 설계

- 설계 대상 컴포넌트 사이의 우선순위를 정하자

- 사소한 세부사항을 설명하다 시간을 낭비하지 말자

- 면접관이 요구하는 깊이만큼 설명하자

### 4. 마무리

- 모든 설계에는 개선점이 있다. 개선할 점을 보이자

- 설계를 요약하자

- 오류가 발생하면 어떻게 되는지 따져보자

- 메트릭/로그 수집, 모니터링 등 운영 이슈도 논의해보자

- 미래에 닥칠 확장 요구를 어떻게 대처할 것인지 이야기하자

## 해야할 것 vs 하지 말아야 할 것

### 해야할 것

- 문제의 요구사항을 이해하고 질문을 통해 확인하라

- 정답은 없고 기업의 규모나 상황에 따라 설계가 달라진다

- 가능하면 여러 해법을 제시하고, 면접관과 소통하면서 설명하라

- 면접관의 아이디어를 끌어내라

- 포기하지 말라

### 하지 말아야 할 것

- 전형적인 문제는 대비하자

- 요구사항이나 가정을 분명히 하자

- 처음부터 특정 컴포넌트의 세부사항을 깊이 설명하지 말자

- 막혔다면 힌트를 청하자. 끊임없이 소통하라

## 시간 배분

시스템 설계는 보통 광범위한 영역을 다루기 때문에 45분이나 한 시간 정도로는 부족할 수도 있따.

1. 문제 이해 및 설계 범위 확정 - 3~10분

2. 개략적인 설계안 제시 및 동의 구하기 - 10~15분

3. 상세 설계 - 10~25분

4. 마무리 - 3~5분

For the site tree, see the [root Markdown](https://slashpage.com/kaonmir.md).
