요즘 개발자를 위한 시스템 설계 수업 15,16장 - 면접 준비, 컨닝노트?
15장 - 시스템 설계 면접을 준비하는 팁
15.1. 시스팀 설계 면접을 준비하는 방법
- 이론적인 지식 바탕으로 실제 경험을 쌓기 + 전달을 정확히 할 수 있도록 커뮤니케이션 능력 키우기
1. 기본 개념 확실히 익히기
확장성 - 수직 확장성, 수평 확장성, 로드 밸런싱, 분산 시스템 개념에 대해 알아두기.
데이터베이스 - SQL, NoSQL 차이 파악, 인덱싱, 샤딩, 데이터베이스 레플리카에 대한 이해. 관계형 데이터베이스, 비관계형 데이터베이스를 언제 사용할지 구분
캐싱 - 캐싱 전략들, 캐시 삭제 정책(뭐더라?.. 빼낸다 그런 단어였는데)
일관성 가용성 : CAP 정리, PACELC 정리(CAP를 상황별로 조금 더 세부적으로 나눈 정리였음), 강한 일관성, 최종 일관성 개념 이해, CAP 에 상충되는 개념이 있어 CAP를 모두 동시에 적용할 수는 없다는 개념을 알면 좋음.
2. 자주 쓰는 시스템 설계 패턴 학습
msa(마이크로서비스 아키텍쳐) - RESTful gRPC 사용한 작은 서비스간의 통신 구현
이벤트 기반 아키텍쳐 - 메시지 큐, 이벤트 스트림 이용.
서비스 지향 아키텍쳐 - msa와 soa 의 차이를 알고 어떤떄 적합한지 파악
디자인 패턴 - 자주 쓰이는 디자인 패턴 익히기(CQRS, saga), 서킷 브레이커로 시스템 장애 발생시 안정적 처리
3. 시스템 설계 연습
- 직접 설계하면서 익히는게 좋음.
모의 면접 서비스 활용 - 프람프(Pramp), Interviewing, Exponent, 면접 스터디
설계 연습 - 릿코드, 해커스랭크, Grokking the System Design Interview 같은 자료 참고해서 설계 문제 도전
현재 런치되어 있는 여러 서비스들의 설계를 나름 대로 생각해보기?
4. 온라인 자료로 학습
도서 - <데이터 중심 어플리케이션 설계> 마틴 클레프만, <The Art of Scalavility(확장성 아키텍쳐 설계의 기술>
온라인 강의 - Courcera, Udemy, Educative( Grokking the System Design Interview 강의)
블로그 및 뉴스 기사
유튜브 채널 - Tushar Roy, Tech Dummies, Gaurav Sen
5. 커뮤니케이션 역량 늘리기
- 생각을 말로 풀어내는 연습 : 입으로 설명(동료와 함께 말로 풀어보기)
- 시각 자료 활용 : 아키텍쳐 다이어그램, 시퀀스 다이어그램 그리면서 설명해보기
6. 복기 및 피드백
실제 면접, 모의 면접 모두 반드시 복기하고 개선할 점을 찾아야한다. - 정반합 뭐시기..?
- 스스로 점검
- 피드백 받기
- 지속적 개선
15.2 시스템 설계 면접을 위한 팁
이번 내용은 x부터 넷플릭스 사례까지 이 책에서 대규모시스템을 어떤식으로 설계 했는지 쭉 봐왔다면 해당 내용을 그대로 조금 자세하게 풀어냈다는걸 알 수 있을 것이다. 따라서 순서만 기술하겠다.
문제 정의 제대로 하기 - 명확하지 않은 부분은 질문하고, 기능적, 비기능적 요구사항을 정의하고 파악한다.
문제를 쪼개서 접근 - 복잡한 문제일 수록 작고 다루기 쉬운 단위로 나누어서 해결하기(자료구조 알고리즘을 하는 이유이다.)
-기능적 요구사항 정의 - 핵심 기능부터 정리(면접관과 소통)
-비기능적 요구사항 정의 - 가용성 목표를 정확히 수치로 잡기 등
-api 목록 정리(사용자용 api, 시스템적 api 등)
-고수준 시스템 규모 산정(사용자수 정의, 필요한 메모리 용량 뭐시기 등등)
-상위수준의 블록 다이어그램 그리기 - 클라이언트, 로드밸런서, 어플리캐이션 서버, 데이터베이스 등 전체 흐름 그리기 - 병목지점, SPOF 등 쉽게 파악 가능
-초기버전 블록 다이어그램 보완 후 최종 아키텍쳐 다이어그램 만들기
-모든 기능, 비기능적 요구사항 만족하는지 점검 후 마무리
해결 방안 효과적으로 전달
- 체계적 설명 - 논리적인 흐름 따르기
- 핵심 결정 사항과 그 이유 설명
- 면접관의 힌트와 의도 파악하며 잘 듣기
- 피드백 듣고 설계 개선하기
- 말로만 하지 말고 글과 그림 활용
- 간결하게 요약
- 후속질문 대비
- 경험을 적극적으로 활용
16장 대규모 시스템 면접 커닝페이퍼
- 16장은 사용 사례별 어떤 데이터 구조를 선택해야하는지, 어떤 컴포넌트를 사용해야하는지, 프로토콜은 어떤걸 사용하는지 등을 테이블 정리하여로 보여준다.
다양한 상황에서 정답이라고 할 만한 것들을 적어 놓았으므로 16장은 책을 직접 보는 것을 추천한다.