책소개
데이터는 오늘날 시스템을 설계할 때 마주치는 많은 도전 과제 중에서도 가장 중심에 있다. 확장성, 일관성, 신뢰성, 효율성, 유지보수성과 같은 해결하기 어려운 문제를 파악해야 할 뿐 아니라 관계형 데이터베이스, NoSQL 데이터스토어, 스트림 처리자 또는 일괄 처리 처리자, 메시지 브로커 등을 포함한 도구의 다양성에 압도된다. 어떤 선택이 애플리케이션에 적합한가? 이 유행어들을 얼마나 이해하고 있는가?마틴 클레프만은 이 실용적이고 포괄적인 안내서에서 데이터를 처리하고 저장하는 다양한 기술의 장단점을 검토한다. 이 책은 여러분이 거대한 문제 공간 속을 항해하는 데 좋은 길잡이가 될 것이다. 소프트웨어는 계속 변하지만 근본 원리는 동일하다. 이 책에서 소프트웨어 엔지니어와 아키텍트는 실전에 이 개념을 어떻게 적용하는지, 그리고 현대 애플리케이션에서 어떻게 데이터를 최대한 활용하는지 배운다. 이 책에서 배우는 내용 기존에 사용하고 있는 시스템의 내부를 자세히 들여다보고 더 효율적으로 사용하고 운용하는 방법을 배운다. 정보에 입각한 의사결정이 가능하게끔 다양한 도구의 강점과 약점을 파악한다. 일관성, 확장성, 내결함성, 복잡성에 관한 트레이드오프를 배운다. 현대 데이터베이스의 기반이 되는 분산 시스템 연구를 이해한다. 주요 온라인 서비스의 배경을 파악하고 서비스 아키텍처를 배운다.
저자소개
마틴 클레프만은 영국 캠브리지 대학에서 분산 시스템을 연구하는 연구원이다. 마틴은 링크트인(LinkedIn)과 래포티브(Rapportive) 등의 인터넷 회사에서 대규모 데이터 인프라를 다루는 소프트웨어 엔지니어와 사업가로 일했다. 그 과정에서 많은 고생을 하며 몇 가지를 배웠고 사람들이 이 같은 실수를 반복하지 않기를 바라는 마음에 이 책을 썼다.
마틴은 정규 컨퍼런스 강연자이자 블로거, 오픈소스 공헌자로 활약 중이다. 그는 심오한 기술적 개념은 모든 사람들이 쉽게 접근 가능해야 하고 이해가 깊으면 깊을수록 더 좋은 소프트웨어를 개발하는 데 도움이 된다고 믿는다.
목차
[Part 1] 데이터 시스템의 기초 01장: 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션데이터 시스템에 대한 생각신뢰성___하드웨어 결함___소프트웨어 오류___인적 오류___신뢰성은 얼마나 중요할까? 확장성 ___부하 기술하기 ___성능 기술하기 ___부하 대응 접근 방식 유지보수성 ___운용성: 운영의 편리함 만들기 ___단순성: 복잡도 관리 ___발전성: 변화를 쉽게 만들기 정리 참고 문헌 02장: 데이터 모델과 질의 언어 관계형 모델과 문서 모델 ___NoSQL의 탄생 ___객체 관계형 불일치 ___다대일과 다대다 관계 ___문서 데이터베이스는 역사를 반복하고 있나? ___관계형 데이터베이스와 오늘날의 문서 데이터베이스 데이터를 위한 질의 언어 ___웹에서의 선언형 질의 ___맵리듀스 질의 그래프형 데이터 모델 ___속성 그래프 ___사이퍼 질의 언어 ___SQL의 그래프 질의 ___트리플 저장소와 스파클 ___초석: 데이터로그 정리 참고 문헌 03장: 저장소와 검색 데이터베이스를 강력하게 만드는 데이터 구조 ___해시 색인 ___SS테이블과 LSM 트리 ___B 트리 ___B 트리와 LSM 트리 비교 ___기타 색인 구조 트랜잭션 처리나 분석? ___데이터 웨어하우징 ___분석용 스키마: 별 모양 스키마와 눈꽃송이 모양 스키마 칼럼 지향 저장소 ___칼럼 압축 ___칼럼 저장소의 순서 정렬 ___칼럼 지향 저장소에 쓰기 ___집계: 데이터 큐브와 구체화 뷰 정리 참고 문헌 04장: 부호화와 발전 데이터 부호화 형식 ___언어별 형식 ___JSON과 XML, 이진 변형 ___스리프트와 프로토콜 버퍼 ___아브로 ___스키마의 장점 데이터플로 모드 ___데이터베이스를 통한 데이터플로 ___서비스를 통한 데이터플로: REST와 RPC ___메시지 전달 데이터플로 정리 참고 문헌 [Part 2] 분산 데이터고부하로 확장 ___비공유 아키텍처 ___복제 대 파티셔닝 참고 문헌 05장: 복제 리더와 팔로워 ___동기식 대 비동기식 복제 ___새로운 팔로워 설정 ___노드 중단 처리 ___복제 로그 구현 복제 지연 문제 ___자신이 쓴 내용 읽기 ___단조 읽기 ___일관된 순서로 읽기 ___복제 지연을 위한 해결책 다중 리더 복제 ___다중 리더 복제의 사용 사례 ___쓰기 충돌 다루기 ___다중 리더 복제 토폴로지 리더 없는 복제 ___노드가 다운됐을 때 데이터베이스에 쓰기 ___정족수 일관성의 한계 ___느슨한 정족수와 암시된 핸드오프 ___동시 쓰기 감지 정리 참고 문헌 06장: 파티셔닝 파티셔닝과 복제 키-값 데이터 파티셔닝 ___키 범위 기준 파티셔닝 ___키의 해시값 기준 파티셔닝 ___쏠린 작업부하와 핫스팟 완화 파티셔닝과 보조 색인 ___문서 기준 보조 색인 파티셔닝 ___용어 기준 보조 색인 파티셔닝 파티션 재균형화 ___재균형화 전략 ___운영: 자동 재균형화와 수동 재균형화 요청 라우팅 ___병렬 질의 실행 정리 참고 문헌 07장: 트랜잭션 애매모호한 트랜잭션의 개념 ___ACID의 의미 ___단일 객체 연산과 다중 객체 연산 완화된 격리 수준 ___커밋 후 읽기 ___스냅숏 격리와 반복 읽기 ___갱신 손실 방지 ___쓰기 스큐와 팬텀 직렬성 ___실제적인 직렬 실행 ___2단계 잠금(2PL) ___직렬성 스냅숏 격리(SSI) 정리 참고 문헌 08장: 분산 시스템의 골칫거리 결함과 부분 장애 ___클라우드 컴퓨팅과 슈퍼컴퓨팅 신뢰성 없는 네트워크 ___현실의 네트워크 결함 ___결함 감지 ___타임아웃과 기약 없는 지연 ___동기 네트워크 대 비동기 네트워크 신뢰성 없는 시계 ___단조 시계 대 일 기준 시계 ___시계 동기화와 정확도 ___동기화된 시계에 의존하기 ___프로세스 중단 지식, 진실, 그리고 거짓말 ___진실은 다수결로 결정된다 ___비잔틴 결함 ___시스템 모델과 현실 정리 참고 문헌 09장: 일관성과 합의 일관성 보장 선형성 ___시스템에 선형성을 부여하는 것은 무엇인가? ___선형성에 기대기 ___선형성 시스템 구현하기 ___선형성의 비용 순서화 보장 ___순서화와 인과성 ___일련번호 순서화 ___전체 순서 브로드캐스트 분산 트랜잭션과 합의 ___원자적 커밋과 2단계 커밋(2PC) ___현실의 분산 트랜잭션 ___내결함성을 지닌 합의 ___멤버십과 코디네이션 서비스 정리 참고 문헌 [Part 3] 파생 10장: 일괄 처리 유닉스 도구로 일괄 처리하기 ___단순 로그 분석 ___유닉스 철학 맵리듀스와 분산 파일 시스템 ___맵리듀스 작업 실행하기 ___리듀스 사이드 조인과 그룹화 ___맵 사이드 조인 ___일괄 처리 워크플로의 출력 ___하둡과 분산 데이터베이스의 비교 맵리듀스를 넘어 ___중간 상태 구체화 ___그래프와 반복 처리 ___고수준 API와 언어 정리 참고 문헌 11장: 스트림 처리 이벤트 스트림 전송 ___메시징 시스템 ___파티셔닝된 로그 데이터베이스와 스트림 ___시스템 동기화 유지하기 ___변경 데이터 캡처 ___이벤트 소싱 ___상태와 스트림과 불변성 스트림 처리 ___스트림 처리의 사용 ___시간에 관한 추론 ___스트림 조인 ___내결함성 정리 참고 문헌 12장: 데이터 시스템의 미래 데이터 통합 ___파생 데이터에 특화된 도구의 결합 ___일괄 처리와 스트림 처리 데이터베이스 언번들링 ___데이터 저장소 기술 구성하기 ___데이터플로 주변 애플리케이션 설계 ___파생 상태 관찰하기 정확성을 목표로 ___데이터베이스에 관한 종단 간 논증 ___제약 조건 강제하기 ___적시성과 무결성 ___믿어라. 하지만 확인하라. 옳은 일 하기 ___예측 분석 ___사생활과 추적 정리 참고 문헌 용어집