개발공부/원티드 챌린지 정리

7월 백엔드 챌린지 1. 기술 면접에서 시스템 설계 문제가 가지는 의미

wannaDevelopIt 2023. 7. 31. 19:57
728x90

1. 시스템 설계 문제란?

1) 무엇을 원하는가?

- 기술 면접에서 구직자에게 주어진 문제를 어떻게 해결할 것인지 문제 해결 능력을 파악하기 위해 출제한다

- 정답은 없고 설계 기술을 면접관들에게 보여주면 된다

- 협력할 수 있는 지, 압박을 잘 견뎌낼 수 있는 지를 판단하기 위해

2) 피해야 하는 점 : 비용을 고려하지 않은 오버 엔지니어링

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

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

- 바로 답만 얘기하지 말자

- 깊이 생각하고 질문해 요구사항과 가정을 분명히 하기

올바른 질문하기, 적절한 가정하기, 시스템 구축에 필요한 정보 모으기

ex) 뉴스피드 시스템 설계

- 가장 중요한 기능이 무엇인가?

- 정렬 상태는 어떻게 되어야 하는가?

- 최대 사용자? 친구 상태?

- 트래픽 규모?

- 피드에 이미지 또는 영상의 유무?

 

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

- 1차 설계를 제안하고, 면접관의 동의 구하기

- 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는 지 판단하기

- 시스템의 구체적 사용사례 살펴보기 : 엣지 케이스 발견에 도움이 된다

 

3) 상세 설계

- 대부분의 면접관은 특정 시스템 컴포넌트의 세부사항을 깊이 있게 설명하는 모습을 원한다

ex) 단축 URL 생성기 설계 : 해시 함수 설계를 어떻게 했는지?

ex) 채팅 시스템 : 어떻게 지연 시간을 줄였는지? 사용자의 온/오프라인 상태를 어떻게 확인하는지?

 

4) 마무리

- 시스템에서 개선할 점 찾기, 스스로의 시스템을 비판적 사고로 바라보기

- 설계를 다시 한번 요약

- 오류가 발생하면 어떻게 될 지 생각해보기

- 규모 확장 요구에 대응할 방법 생각하기

 

해야할 것

- 질문을 통해 확인하기

- 문제 요구사항 최대한 이해하기

- 면접관과의 소통, 소통을 통해 좋은 아이디어 도출하기

- 의견을 일찍, 자주 구하기

 

하지 말아야 할것

- 기본 면접 질문도 준비하지 않는 것

- 요구사항/ 가정이 분명하지 않은 상태에서 설계하기

- 아무 말도 하지 않고 설계만 하기 -> 적극적으로 힌트를 얻어낼 것

 

 

참고할 서적 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 데이터 중심 애플리케이션 설계, 마이크로서비스 패턴

 

단어정리

- 가용성 : 모든 노드가 모든 요청에 대해 정상 응답을 한다

- 일관성 : 모든 노드가 동일한 데이터를 가지고 있을 것

- 부분 결함

728x90