목차
[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)