3. 시스템 설계 접근법

💬 시스템 설계 4단계 접근법

1️⃣ 문제 이해 및 설계 범위 확정

  • 요구사항과 가정에 모호함을 없애고 분명히 해야 기반이 흔들리지 않는다.

  • 요구사항 이해에 필요한 질문들을 충분히 거쳐야 한다.

    • 구체적으로 어떤 기능들을 만들어야 하는지?

    • 제품 사용자 수, 일간 능동 사용자(Daily Active User)는 얼마나 되는지?

    • 회사의 규모는 얼마나 빨리 커지고 그 규모는 어떨것인지 예상하는지?

    • 회사가 주로 사용하는 기술 스택은 무엇인지?

    • 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는지?

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

  • 설계안의 청사진을 제시하고, 주위에 의견을 구한다.

  • 핵심 컴포넌트를 포함하는 다이어그램을 작성한다.

  • 시스템 규모에 관계된 제약 사항 만족하는지 개략적으로 계산한다.

  • 시스템의 구체적 사용 사례를 파악하여 설계안을 구체화하고 엣지 케이스를 고려한다.

  • 설계해야 하는 시스템의 규모에 따라 얼마나 세세하게 집중해서 설계해야 하는지가 달라진다. 설계해야 할 시스템이 소규모라면 API 엔드포인트나 데이터베이스 스키마를 함께 제시해야 한다.

3️⃣ 상세 설계

  • 시스템에서 전반적으로 달성해야 할 목표와 기능 범위를 확인한다.

  • 시스템 병목 구간, 자원 요구량 추정치, 시스템 성능에 대해서도 고민해보아야 한다.

  • 전체 설계에 대한 draft 마련

  • 해당 draft에 대한 면접관의 의견 청취

  • 상세 설계에서 집중해야 할 영역(우선 순위)들 확인

  • 불필요한 세부 사항에 시간쓰는 것보다는 전체 시스템에 초점을 맞출 것

4️⃣ 마무리

  • 만들어낸 설계 요약하기

  • 시스템 병목 구간, 시스템 성능에 대해 더 개선시킬 부분이 있는 지 확인하기

  • 특정 부분에서 오류 발생 시 어떤 영향을 미치는지 확인하기

  • 운영 관점에서 메트릭 수집, 모니터링, 로깅, 배포 등에 대해 고려하기

  • 미래의 규모 확장 요구에 어떻게 대처할지 고민하기

💬 면접 시 시간 분배

  • 1단계 : 3~10분

  • 2단계 : 10~15분

  • 3단계 : 10~25분

  • 4단계 : 3~5분

Last updated