Skip to content

Commit

Permalink
Create: [2주차] 3장 cowboysj
Browse files Browse the repository at this point in the history
  • Loading branch information
cowboysj committed May 23, 2024
1 parent 6f5b7da commit 04cd3cf
Showing 1 changed file with 85 additions and 0 deletions.
85 changes: 85 additions & 0 deletions chap03/[chap03]김수진.md
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분

0 comments on commit 04cd3cf

Please sign in to comment.