[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 3장 시스템 설계 면접 공략법

Hocaron·2022년 6월 10일
0
post-custom-banner

시스템 설계 면접이 있는 이유

모호한 문제를 훌기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션

이 면접을 통해 어떤 것을 보여줘야할까

  • 설계 능력의 기술적 측면
  • 협력에 적합한 사람
  • 압박이 심한 상황도 잘 헤쳐나가는 자질
  • 모호한 문제를 건설적으로 해결할 능력
  • 좋은 질문을 던질 능력

지양해야할 것

  • 설계의 순수성에 집착한 나머지 트레이드 오프를 도외시하고 오버 엔지니어링을 하는지
    • 오버 엔지니어링 시, 시스템 전반의 비용이 올라가기때문이다.
    • 혼자 뇌피셜로 만들지 말고, 면접관과의 커뮤니케이션을 통해 결론을 도출하자.
  • 완고함
  • 편협함

효과적 면접을 위한 4단계 접근법

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

첫번째도 요구사항 정의, 두번째도 요구사항 정의

깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하라

생각해볼 수 있는 질문들

  • 구체적으로 어떤 기능들을 만들어야 하나?
  • 제품 사용자 수는 얼마나 되나?
  • 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달 뒤의 규모 / 여섯 달 뒤의 규모 / 일년 뒤의 규모
  • 회사가 주로 사용하는 기술스택은 무엇인가?
  • 설계를 단순화하기 위해 활용할 수 있는 기존 서비스는 무엇이 있는가?

2단계 개략적인 설계안 및 동의 구하기

면접관과 협력하자

면접관에게 개략적인 설계안을 제시하고, 면접관의 동의를 구하자

  • 설계안에 대한 최초 청사진을 제시하고 의견을 구하라. 힘들겠지만, 마치 팀원처럼
  • 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라
    • 클라이언트(모바일/웹)
    • API(엔드포인트)
    • 웹 서버
    • 데이터 저장소(데이터베이스 스키마)
    • 캐시
    • CDN
    • 메세지 큐
  • 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지 개략적으로 계산해보라
  • 계산/요청 과정을 소리내어 설명하면 좋다
  • 면접관의 의견을 물어보자

3단계 상세 설계

지금까지 한 일

  • 전체 설계의 개략적 청사진 마련
  • 해당 청사진에 대한 면접관의 의견 청취
  • 상세 설계에서 집중해야 할 영역들 확인

이제 해야할 일

  • 설계 대상 컴포넌트 사이의 우선순위 정하기
  • 면접관이 집중하고 있는 영역을 보자
    ex. 단축 URL 생성기라면, 해시 함수의 설계를 구체적으로 설명해야한다.
    ex. 채팅 시스템라면, 레이턴시를 어떻게 줄이고, 사용자의 온/오프라인 상태를 표시할 것인가?
  • 불필요한 세부사항에 시간을 쓰지말고, 내가 입증해야하는 능력에 써야하는 시간에 쓰자.

4단계 마무리

  • 개선 가능한 지점을 찾자. 비판적으로 설계를 바라보자
  • 설계를 다시 한 번 요약해서, 나를 기억시키자
  • 오류가 발생하면 무슨 일이 생기는지 따져보자
  • 운영 이슈도 논의할 가치가 있다
    • 메트릭 수집
    • 모니터링
    • 로그
    • 시스템 배포 방법
    • 미래에 닥칠 규모 확장 요구에 대처 방법을 생각해보자
  • 시간이 남는다면, 필요하지만 다루지 못했던 세부적 개선사항들을 제안하자

정리

해야할 것

  • 질문을 통해 확인하자. 스스로 내린 가정이 옳다 믿고 진행하지 마라
  • 문제의 요구사항을 이해하라
  • 정답이나 최선의 답안 같은 것은 없다. 스타트업, 대기업의 설계는 당연히 다르다. 요구사항을 정확하게 이해했는지 확인하라
  • 나의 사고 흐름을 이해할 수 있도록 면접관과 소통하라
  • 가능하다면 여러 해법을 함께 제시하라
  • 개략적 설계에 면접관이 동의하면, 세부사항을 설명하기 시작하라. 가장 중요한 컴포넌트부터!
  • 면접관의 아이디어를 이끌어내라
  • 포기하지 말라

하지 말아야 할 것

  • 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 말라
  • 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 말라
  • 처음부터 세부사항까지 깊이 설명하지 말라. 개략적 설계부터!
  • 진행 중에 막혔다면 힌트 주기를 주저하지 말라
  • 소통을 주저하지 말라. 침묵 속에 설계를 진행하지 말라
  • 설계안을 내놓는 순가 면접이 끝난다고 생각하지 말라. 면접관이 끝났다고 말하기 전까지는 끝난 것이 아니다. 의견을 일찍, 그리고 자주 구하라

시간 배분

1단계 - 문제 이해 및 설계 범위 확정: 3분~10분
2단계 - 개략적 설계안 제시 및 동의 구하기: 10분~15분
3단계 - 상세 설계: 10분~25분
4단계 - 마무리: 3분~5분

profile
기록을 통한 성장을
post-custom-banner

0개의 댓글