책소개
시스템 설계 면접 인터뷰는 소프트웨어 엔지니어링 채용 과정에서 마주하게 될 가장 어려운 도전 중 하나이다. 『시스템 설계 면접 완벽 가이드』는 자신 있게 인터뷰를 성공적으로 이끌어 나가는 방법을 배울 수 있는 좋은 참고서이다. 쉽게 기억할 수 있는 인터뷰 기법들을 따라가며, 질문을 신속하게 평가하고 유리한 접근법을 파악한 후, 인터뷰어에게 명확하게 아이디어를 전달하는 방법을 배울 수 있다. 이 책을 통해 성공적인 인터뷰 스킬뿐 아니라, 뛰어난 시스템 디자인을 실제로 구현할 수 있는 능력도 함께 얻을 것이다. 아마존, 애플, 바이트댄스, 페이팔, 그리고 우버 등에서 개발자들이 취업 제안을 받을 수 있도록 도와준 실제적인 인터뷰 기법과 시스템 디자인에 대한 인터뷰 기술을 공개한다.
저자소개
페이팔의 매니저다. 이전에는 우버의 시니어 풀스택 엔지니어, 테라데이터의 소프트웨어 엔지니어, 여러 스타트업의 데이터 엔지니어로 일했다. 수년간 수많은 시스템 설계 면접에서 면접관과 지원자 양쪽 입장을 경험했다. 또한 아마존, 애플, 바이트댄스/틱톡 같은 유명 기업에서 귀중한 입사 제안을 받기도 했다.
목차
[1부] 01장: 시스템 설계 개념 둘러보기 __1.1 트레이드오프 논의 __1.2 이 책을 어떻게 읽어야 할까? __1.3 이 책의 개요 __1.4 시스템의 다양한 서비스 확장 방식 __요약 02장: 일반적인 시스템 설계 면접 흐름 __2.1 요구사항 명확화와 트레이드오프 논의 __2.2 API 명세 초안 작성 __2.3 사용자와 데이터 간의 연결과 처리 __2.4 데이터 모델 설계 __2.5 로깅, 모니터링, 경보 __2.6 검색창 __2.7 기타 논의 가능한 주제 __2.8 면접 후 회고와 평가 __2.9 회사 면접하기 __요약 03장: 비기능적 요구사항 __3.1 확장성 __3.2 가용성 __3.3 내결함성 __3.4 성능/지연 시간과 처리량 __3.5 일관성 __3.6 정확성 __3.7 복잡성과 유지보수성 __3.8 비용 __3.9 보안 __3.10 프라이버시 __3.11 클라우드 네이티브 __3.12 추가 자료 __요약 04장: 데이터베이스 확장 __4.1 저장 서비스의 이해 __4.2 데이터베이스 사용 결정 __4.3 복제 __4.4 샤딩된 데이터베이스로 저장 용량 확장하기 __4.5 이벤트 집계하기 __4.6 배치와 스트리밍 ETL __4.7 비정규화 __4.8 캐싱 __4.9 독립 서비스로서의 캐싱 __4.10 캐시할 수 있는 다양한 종류의 데이터와 캐싱 방법 예시 __4.11 캐시 무효화 __4.12 캐시 워밍 __4.13 추가 자료 __요약 05장: 분산 트랜잭션 __5.1 이벤트 기반 아키텍처(EDA) __5.2 이벤트 소싱 __5.3 변경 데이터 캡처 __5.4 이벤트 소싱과 CDC 비교 __5.5 트랜잭션 감독자 __5.6 사가 패턴 __5.7 다른 트랜잭션 유형 __5.8 추가 자료 __요약 06장: 기능적 분할을 위한 공통 서비스 __6.1 다양한 서비스의 공통 기능 __6.2 서비스 메시/사이드카 패턴 __6.3 메타데이터 서비스 __6.4 서비스 디스커버리 __6.5 기능적 분할과 다양한 프레임워크 __6.6 라이브러리와 서비스 __6.7 일반적인 API 패러다임 __요약 [2부] 07장: 크레이그리스트 설계 __7.1 사용자 스토리와 요구사항 __7.2 API __7.3 SQL 데이터베이스 스키마 __7.4 초기 고수준 아키텍처 __7.5 모놀리스 아키텍처 __7.6 SQL 데이터베이스와 객체 스토리지 사용 __7.7 마이그레이션은 번거롭다 __7.8 게시물 작성과 읽기 __7.9 기능적 분할 __7.10 캐싱 __7.11 CDN __7.12 SQL 클러스터로 읽기 확장 __7.13 쓰기 처리량 확장 __7.14 이메일 서비스 __7.15 검색 __7.16 오래된 게시물 제거 __7.17 모니터링과 알림 __7.18 아키텍처 논의 내용 요약 __7.19 기타 논의 가능한 주제 __요약 08장: 속도 제한 서비스 설계 __8.1 속도 제한 서비스의 대안과 그것이 실현 불가능한 이유 __8.2 속도 제한을 하지 말아야 할 때 __8.3 기능적 요구사항 __8.4 비기능적 요구사항 __8.5 사용자 스토리와 필요한 서비스 구성 요소 __8.6 고수준 아키텍처 __8.7 상태 저장 접근 방식/샤딩 __8.8 모든 호스트에 모든 카운트 저장 __8.9 속도 제한 알고리즘 __8.10 사이드카 패턴 적용 __8.11 로깅, 모니터링, 경보 __8.12 클라이언트 라이브러리로 기능 제공 __8.13 추가 읽을거리 __요약 09장: 알림/경보 서비스 설계 __9.1 기능 요구사항 __9.2 비기능적 요구사항 __9.3 초기 고수준 아키텍처 __9.4 객체 스토리지: 알림 구성과 전송 __9.5 알림 템플릿 __9.6 예약된 알림 __9.7 알림 수신자 그룹 __9.8 구독 취소 요청 __9.9 실패한 전달 처리 __9.10 중복 알림에 관한 클라이언트 사이드 고려사항 __9.11 우선순위 __9.12 검색 __9.13 모니터링과 경보 __9.14 알림/경보 서비스의 가용성 모니터링과 경보 __9.15 기타 논의 가능한 주제 __9.16 최종 참고사항 __요약 10장: 데이터베이스 배치 감사 서비스 설계 __10.1 감사는 왜 필요한가? __10.2 SQL 쿼리 결과에 대한 조건문으로 유효성 검사 정의 __10.3 간단한 SQL 배치 감사 서비스 __10.4 요구사항 __10.5 고수준 아키텍처 __10.6 데이터베이스 쿼리 제약 __10.7 과도한 동시 쿼리 방지 __10.8 데이터베이스 스키마 메타데이터의 사용자 __10.9 데이터 파이프라인 감사 __10.10 로깅, 모니터링, 경보 __10.11 기타 감사 가능 유형 __10.12 기타 논의 가능한 주제 __10.13 참고 문헌 __요약 11장: 자동 완성/타입어헤드 __11.1 자동 완성의 가능한 사용 사례 __11.2 검색 vs. 자동 완성 __11.3 기능 요구사항 __11.4 비기능적 요구사항 __11.5 상위 수준 아키텍처 계획 __11.6 가중치 트라이(Trie) 접근법과 초기 고수준 아키텍처 __11.7 상세 구현 __11.8 샘플링 접근 방식 __11.9 저장소 요구사항 처리하기 __11.10 단일 단어 대신 구문 처리하기 __11.11 로깅, 모니터링과 경보 __11.12 기타 논의 가능한 주제 __요약 12장: 플리커 설계 __12.1 사용자 스토리와 기능 요구사항 __12.2 비기능적 요구사항 __12.3 고수준 아키텍처 __12.4 SQL 스키마 __12.5 CDN에서 디렉터리와 파일 구성하기 __12.6 사진 업로드하기 __12.7 이미지와 데이터 다운로드하기 __12.8 모니터링과 경보 __12.9 기타 서비스 __12.10 기타 논의 가능한 주제 __요약 13장: 콘텐츠 배포 네트워크 설계하기 __13.1 CDN의 장단점 __13.2 요구사항 __13.3 CDN 인증과 권한 부여 __13.4 상위 수준 아키텍처 __13.5 저장소 서비스 __13.6 일반적인 작업 __13.7 캐시 무효화 __13.8 로깅, 모니터링, 경보 __13.9 미디어 파일 다운로드에 대한 기타 가능한 논의 __요약 14장: 문자 메시징 앱 설계 __14.1 요구사항 __14.2 초기 구상 __14.3 초기 고수준 설계 __14.4 연결 서비스 __14.5 발신자 서비스 __14.6 메시지 서비스 __14.7 메시지 전송 서비스 __14.8 검색 __14.9 로깅, 모니터링, 경보 __14.10 기타 논의 가능한 주제 __요약 15장: 에어비앤비 설계 __15.1 요구사항 __15.2 설계 결정 __15.3 고수준 아키텍처 __15.4 기능적 분할 __15.5 목록 생성 또는 업데이트 __15.6 승인 서비스 __15.7 예약 서비스 __15.8 가용성 서비스 __15.9 로깅, 모니터링, 경보 __15.10 기타 논의 가능한 주제 __요약 16장: 뉴스 피드 설계 __16.1 요구사항 __16.2 상위 수준 아키텍처 __16.3 사전에 피드 준비하기 __16.4 검증과 콘텐츠 조정 __16.5 로깅, 모니터링, 경보 __16.6 기타 논의 가능한 주제 __요약 17장: 판매량 기준 아마존 상위 10개 제품 대시보드 설계 __17.1 요구사항 __17.2 초기 구상 __17.3 초기 고수준 아키텍처 __17.4 집계 서비스 __17.5 배치 파이프라인 __17.6 스트리밍 파이프라인 __17.7 근사 __17.8 람다 아키텍처를 사용한 대시보드 __17.9 카파 아키텍처 접근 방식 __17.10 로깅, 모니터링, 경보 __17.11 기타 논의 가능한 주제 __17.12 참고 문헌 __요약 [부록] 부록A: 모놀리스 vs. 마이크로서비스 __A.1 모놀리스의 장점 __A.2 모놀리스의 단점 __A.3 서비스의 장점 __A.4 서비스의 단점 __A.5 참고 문헌 부록B: OAuth 2.0 인가와 OpenID Connect 인증 __B.1 인가 vs. 인증 __B.2 개요: 간단한 로그인, 쿠키 기반 인증 __B.3 단일 로그인 __B.4 단순 로그인의 단점 __B.5 OAuth 2.0 흐름 __B.6 다른 OAuth 2.0 흐름 __B.7 OpenID Connect 인증 부록C: C4 모델 부록D: 2단계 커밋(2PC)