System Design - (3) : 시스템 설계 면접 팁

­이승환·2022년 1월 24일
0

System Design

목록 보기
4/7

시스템 설계 면접을 진행하는 이유?


  1. 설계 능력의 기술적 측면 평가
  2. 협력에 적합한 사람인지 확인
  3. 압박이 심한 상황에서 대응
  4. 모호한 문제를 건설적으로 해결할 수 있는지
  5. 좋은 질문을 던질 능력이 있는지
  6. 상황에 맞지 않는 over-engineering 을 하는지
    (비용 / 보안 등 여러 측면에서 tradeoff 고려)

면접시 꼭 해야할 것

  • 질문을 통해 확인. 스스로 내린 가정이 옳다 믿고 진행 X
  • 문제의 요구사항을 정확하게 이해
  • 최선의 답안은 없음! 요구사항(시스템 규모, 비용, 보안 등)에 따라 달라질 수 있음
  • 면접관과 소통하면서 사고 흐름을 이해할 수 있게 하기
  • 가능하다면 여러 해법을 함께 제시
  • 개략적 설계에 면접관이 동의하면, 각 컴포넌트의 세부사항을 설명!
    ⇒ 가장 중요한 컴포넌트부터 진행
  • 면접관의 아이디어를 이끌어 내기
  • 포기하지 말기
    ⇒ 진행 중 막혔다면, 면접관에게 힌트 요청

면접 시에 주의해야 할 것은?

  • 전형적인 면접 문제들은 꼭 준비하자
  • 요구사항이나 가정들이 불명확하면, 설계를 제시하지 않는 편이 나음
  • 처음부터 특정 컴포넌트의 세부사항을 너무 깊게 설명하지 않기!
    ⇒ 개략적 설계를 마친 후에 세부사항으로 나아가야 함
  • 설계안을 내놓는 순간 면접이 끝났다 생각하지 않고, 계속 티키타카 진행해보기

4단계 접근법

  • 시간배분은 꼭 시작 전에 정하고 들어가자

1단계 : 3 ~ 10분
2단계 : 10 ~ 15분
3단계 : 10 ~ 25분
4단계 : 3 ~ 5분

1단계 : 문제 이해 및 설계 범위 확정

  • 시스템 설계 면접 시, 최종 설계를 바로 내놓으면 잘못된 설계를 할 가능성이 매우 높아짐!
  • 오랫동안 생각 + 올바른 질문 + 적절한 가정 → 시스템 구축에 필요한 정보를 모음!
  • 요구사항을 이해하는 데 필요한 질문 예
  • 구체적으로 어떤 기능들을 만들어야 하나?
  • 제품 사용자 수는 얼마나 되나?
  • 회사의 규모는 얼마나 빨리 커질거라 예상되나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마나 되리라 예상하는가?
  • 매년 몇 % 씩 규모가 커질커라 예상되나?
  • 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?

2단계 : 개략적인 설계안을 제시하고, 면접관의 동의를 구함

  • 설계안에 대한 최초 청사진을 제시 및 의견 구하기
  • 화이트보드(종이)에 핵심 컴포넌트를 포함하는 다이어그램 그리기
    ⇒ 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등 포함
  • 최초 설계안이 시스템 규모와 관련된 제약사항들을 만족하는지 계산 (검산 진행)
  • 계산 과정을 논리적으로 면접관에게 설명

💡 위 단계를 거치면서 얻을 수 있는 것들

  1. 시스템에서 전반적으로 달성해야 할 목표와 기능 범위 확인
  2. 해당 청사진에 대한 면접관의 의견
  3. 상세 설계에서 집중해야 할 영역들

3단계 : 상세한 설계를 진행

  • 설계 대상 컴포넌트 사이의 우선순위를 정해야 함
  • 시간 관리에도 주의!
    ⇒ 불필요한 설명은 최소화
  • 면접관 질문 예시

시스템의 성능 특성

  • 시스템의 병목 구간?
  • 자원 요구량 추정치?
    특정 시스템 컴포넌트들의 세부사항
  • 단축 URL 생성기 설계에서 해시 함수의 설계를 구체적으로 설명?
  • 채팅 시스템에서 지연시간(latency) 줄이고 사용자의 온/오프라인 상태를 표시할지?

4단계 : 마무리 진행

  • 만든 설계를 한번 다시 요약해주는 것도 좋음
  • 완벽한 설계는 없고, 개선할 점은 언제나 있음
  • 오류가 발생하면 무슨 일(ex. 서버 오류, 네트워크 장애 등)이 생기는지 확인
  • 운영 이슈 논의
    ⇒ 메트릭 수집 및 모니터링? 로그? 시스템 배포?
  • 규모 확장 요구에 대한 논의

    ex) 현재 설계로는 100만 사용자 가능, 1000만 사용자 감당하려면 어떻게?
    시간 남았으면, 다루지못했던 개선사항들 추가로 제안

profile
Mechanical & Computer Science

0개의 댓글