-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
85 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
# 3장 시스템 설계 면접 공략법 | ||
|
||
시스템 설계 면접은 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션이다. | ||
|
||
시스템 설계 면접에서는 다음 항목들을 평가한다. | ||
|
||
1. 설계 능력의 기술적 측면 | ||
2. 지원자가 협력에 적합한 사람인가 | ||
3. 압박이 심한 상황도 잘 헤쳐 나갈 자질이 있는가 | ||
4. 모호한 문제를 건설적으로 해결할 능력이 있는가 | ||
5. 좋은 질문을 던질 능력이 있는가 | ||
|
||
설계의 순수성에 집착한 나머지 타협적 결정을 도외시하고 과도한 엔지니어링을 하지 않도록 주의해야한다.(비용이 올라감) | ||
|
||
## 1️⃣효과적 면접을 위한 4단계 접근법 | ||
|
||
### 1단계 : 문제 이해 및 설계 범위 확정 | ||
|
||
> 요구사항을 이해하고 모호함을 없애는 게 가장 중요 | ||
- 깊이 생각하고 질문해 요구사항과 가정들을 분명히 해야 한다. | ||
- **_올바른 질문을 하고, 적절한 가정을 하며, 시스템 구축에 필요한 정보들을 모아야 한다._** | ||
- 해야할 질문들 | ||
- 구체적으로 어떤 기능들을 만들어야 하나 | ||
- 제품 사용자 수 | ||
- 회사의 규모는 얼마나 빨리 커질 것인지 | ||
- 회사가 사용하는 기술 스택 | ||
- 설계를 단순화하기 위해 활용할 수 있는 기존 서비스 | ||
|
||
### 2단계 : 개략적인 설계안 제시 및 동의 구하기 | ||
|
||
> 개략적인 설계안을 제시하고 면접관의 동의를 얻어야 함 | ||
- 설계안에 대한 최초 청사진을 제시하고 의견을 구해라. | ||
- 핵심 컴포넌트를 포함하는 다이어그램을 그려라.(클라이언트, API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등) | ||
- 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지 개략적으로 계산해보기 | ||
|
||
### 3단계 : 상세 설계 | ||
|
||
> 설계 대상 컴포넌트 사이의 우선순위를 정해야 한다. | ||
만약, 문제가 단축 URL 생성기라면 해시 함수의 설계를 구체적으로 설명해야 하고, 채팅 시스템에 관련된 것이라면 어떻게 하면 지연시간을 줄이고 사용자의 온/오프라인 상태를 표시할 것인지 말해야 한다. | ||
|
||
또, 시간 관리에도 유의해야 한다. 불필요한 세부사항에 시간을 쓰면 안 된다. | ||
|
||
### 4단계 : 마무리 | ||
|
||
> 면접관은 설계 결과물에 대한 후속 질문들을 할 수도 있고, 스스로 추가 논의를 진행하도록 할 수도 있다. | ||
- 개선점은 항상 있기 마련이므로 개선할 점이 없다는 말은 하지 말자. | ||
- 만든 설계를 다시 한 번 요약하는 것도 좋다. (면접관 기억 환기) | ||
- 오류가 발생하면 무슨 일이 생기는지(서버 오류, 네트워크 장애 등) 따져보면 좋다. | ||
- 운영 이슈를 말하는 것도 좋다. (메트릭은 어떻게 수집하고 모니터링할 것인지, 로그 , 배포에 관한 내용) | ||
- 미래에 닥칠 규모 확장 요구에 어떻게 대처할 것인지 | ||
- 시간이 남았으면, 필요하지만 다루지 못 했던 세부적 개선사항들을 제안할 수도 있다. | ||
|
||
## 2️⃣해야 할 것과 하지 말아야 할 것 | ||
|
||
### 🙆해야 할 것 | ||
|
||
- 질문을 통해 확인해라. | ||
- 문제의 요구사항을 이해해라. | ||
- 요구사항을 정확하게 이해했는지 다시 확인해라. | ||
- 면접관이 여러분의 사고 흐름을 이해할 수 있도록 해라. | ||
- 가능하다면 여러 해법을 함께 제시해라. | ||
- 개략적 설계에 면접관이 동의하면, 가장 중요한 컴포넌트부터 세부사항을 설명해라. | ||
- 면접관의 아이디어를 이끌어 내라. | ||
- 포기하지 마라. 😇 | ||
|
||
### 🙅하지 말아야 할 것 | ||
|
||
- 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접을 보지 마라. -요구사항이나 가정들을 분명히 하고 대답해라. | ||
- 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말고 개략적 설계가 끝난 후에 해라. | ||
- 힌트를 청하기를 주저하지 마라. | ||
- 소통을 주저하지 마라. | ||
- 면접관이 끝났다고 하기 전까지 다 끝난 게 아니다. 의견을 일찍, 자주 구해라. | ||
|
||
## 3️⃣시간 배분 | ||
|
||
총 45분이 주어진다고 가정했을 때 다음과 같이 배분해라. | ||
|
||
- 1단계 - 문제 이해 및 설계 범위 확정 : 3분~10분 | ||
- 2단계 - 개략적 설계안 제시 및 동의 구하기 : 10분~15분 | ||
- 3단계 - 상세설계 : 10분~25분 | ||
- 4단계 - 마무리 : 3분 ~ 5분 |