책소개
실시간 데이터 활용을 위한 새로운 시스템 아키텍처 가이드이벤트 기반 마이크로서비스 아키텍처를 소개하는 실무 개론서다. 구조, 통신, 통합, 배포 등 기본 개념을 그림과 함께 구체적으로 설명한다. 따라서 이벤트 기반 시스템 구축 방식을 마이크로서비스로 전환하고자 하는 입문 개발자도 쉽게 읽을 수 있다. 넷플릭스, 링크드인, 스포티파이, 우버 등 세계 IT 기업들이 도입한 실제 데이터 사용법과 서비스 접근법을 익혀보자.
저자소개
2020년부터 쇼피파이(Shopify) 데이터 플랫폼팀에 합류한 선임 엔지니어. 2020년 전에는 플립(Flipp)과 블랙베리(BlackBerry)에서 소프트웨어 개발자로 근무하며 이벤트 기반 시스템에 처음 눈을 뜨게 됐다. 데브옵스(카프카, 스파크, 메소스, 쿠버네티스, 솔라, 일래스틱서치, HBase, 주키퍼 클러스터, 프로그램식 구축/확장/모니터링) 분야의 전문가로서 기술 리더십(회사가 데이터 통신 레이어를 구축하고, 기존 시스템과 연계하고, 새로운 시스템을 개발하고, 제품을 전달하는 일에 집중하도록 지원), 소프트웨어 개발(빔, 스파크, 카프카 스트림즈 라이브러리를 이용하여 자바/스칼라 언어로 이벤트 기반 마이크로서비스 구축), 데이터 엔지니어링(사용자 기기에서 행동 기반 데이터를 수집하여 조직 내부에 공유) 분야에 많은 노하우를 갖고 있다.
목차
CHAPTER 1 왜 이벤트 기반 마이크로서비스인가?__1.1 이벤트 기반 마이크로서비스란?__1.2 도메인 주도 설계와 경계 콘텍스트__1.3 통신 구조__1.4 기존 컴퓨팅의 통신 구조__1.5 이벤트 기반 통신 구조__1.6 비동기식 이벤트 기반 마이크로서비스__1.7 동기식 마이크로서비스__1.8 마치며CHAPTER 2 이벤트 기반 마이크로서비스 기초__2.1 토폴로지 구성__2.2 이벤트 콘텐츠__2.3 이벤트 구조__2.4 엔티티 이벤트에서 상태를 구체화__2.5 이벤트 데이터 정의와 스키마__2.6 마이크로서비스 단일 작성자 원칙__2.7 마이크로서비스를 이벤트 브로커로 강화__2.8 이벤트 브로커 대 메시지 브로커__2.9 대규모 마이크로서비스 관리__2.10 마이크로서비스 세금 납부__2.11 마치며CHAPTER 3 통신 및 데이터 규약__3.1 이벤트 기반 데이터 규약__3.2 이벤트 포맷 선택__3.3 이벤트 설계__3.4 마치며CHAPTER 4 기존 시스템에 이벤트 기반 아키텍처 통합__4.1 데이터 해방이란?__4.2 데이터 해방 패턴__4.3 데이터 해방 프레임워크__4.4 쿼리로 데이터 해방__4.5 CDC 로그로 데이터 해방__4.6 아웃박스 테이블로 데이터 해방__4.7 데이터 정의 변경을 캡처 대상 데이터 세트로__4.8 이벤트 데이터를 데이터 저장소에 싱킹__4.9 싱킹과 소싱의 비즈니스 영향도__4.10 마치며CHAPTER 5 이벤트 기반 처리 기본__5.1 상태 비저장 토폴로지 구성__5.2 이벤트 스트림 리파티션__5.3 이벤트 스트림 코파티션__5.4 컨슈머 인스턴스에 파티션 할당__5.5 상태 비저장 처리 인스턴스 실패 복구__5.6 마치며CHAPTER 6 확정적 스트림 처리__6.1 이벤트 기반 워크플로의 확정성__6.2 타임스탬프__6.3 이벤트 스케줄링과 확정적 처리__6.4 워터마크__6.5 스트림 시간__6.6 비순차 이벤트와 지각 이벤트__6.7 지각 이벤트 처리__6.8 재처리 대 준실시간 처리__6.9 간헐적 실패와 지각 이벤트__6.10 프로듀서/이벤트 브로커 연결 문제__6.11 마치며(더 읽을거리)CHAPTER 7 상태 저장 스트리밍__7.1 상태 저장소, 이벤트 스트림에서 상태 구체화__7.2 체인지로그 이벤트 스트림에 상태 기록__7.3 내부 상태 저장소에 상태 구체화__7.4 외부 상태 저장소에 상태 구체화__7.5 재구성 대 상태 저장소 마이그레이션__7.6 트랜잭션과 실제로 한 번 처리__7.7 마치며CHAPTER 8 마이크로서비스 워크플로 구축__8.1 코레오그래피 패턴__8.2 오케스트레이션 패턴__8.3 분산 트랜잭션__8.4 보상 워크플로__8.5 마치며CHAPTER 9 FaaS 응용 마이크로서비스__9.1 함수 기반 솔루션을 마이크로서비스로 설계__9.2 FaaS 공급자 선택__9.3 함수를 마이크로서비스로 개발__9.4 콜드 스타트, 웜 스타트__9.5 트리거로 함수 시동__9.6 비즈니스 업무를 함수로 처리__9.7 상태 관리__9.8 함수에서 다른 함수 호출__9.9 종료 및 중단__9.10 함수 튜닝__9.11 FaaS 솔루션 확장__9.12 마치며CHAPTER 10 기본 프로듀서/컨슈머 마이크로서비스__10.1 BPC의 알맞은 용도는?__10.2 하이브리드 BPC 애플리케이션으로 외부 스트리밍을 처리__10.3 마치며CHAPTER 11 대용량 프레임워크 마이크로서비스__11.1 대용량 프레임워크의 간략한 역사__11.2 대용량 프레임워크의 내부 작동 원리__11.3 장점 및 제약__11.4 클러스터 구성 옵션과 실행 모드__11.5 애플리케이션 제출 모드__11.6 상태 처리와 체크포인트 활용__11.7 애플리케이션 확장과 이벤트 스트림 파티션 처리__11.8 실패 복구__11.9 멀티테넌시 이슈__11.10 언어 및 구문__11.11 프레임워크 선택__11.12 예제: 클릭 및 뷰의 세션 윈도잉__11.13 마치며CHAPTER 12 경량 프레임워크 마이크로서비스__12.1 장점 및 제약__12.2 경량 처리__12.3 상태 처리와 체인지로그 활용__12.4 애플리케이션 확장과 실패 복구__12.5 경량 프레임워크 선택__12.6 언어 및 구문__12.7 스트림-테이블-테이블 조인: 강화 패턴__12.8 마치며CHAPTER 13 이벤트 기반 마이크로서비스와 요청-응답 마이크로서비스의 통합__13.1 외부 이벤트 처리__13.2 자율적으로 생성된 분석 이벤트 처리__13.3 서드파티 요청-응답 API 연계__13.4 상태 저장 데이터 처리 및 서비스__13.5 이벤트 기반 워크플로 내에서 요청 처리__13.6 요청-응답 애플리케이션과 마이크로프런트엔드__13.7 마이크로프런트엔드의 장점__13.8 마이크로프런트엔드의 단점__13.9 마치며CHAPTER 14 지원 도구__14.1 마이크로서비스-팀 배정 시스템__14.2 이벤트 스트림 생성/변경__14.3 이벤트 스트림 메타데이터 태깅__14.4 쿼터__14.5 스키마 레지스트리__14.6 스키마 생성/변경 알림__14.7 오프셋 관리__14.8 이벤트 스트림 권한과 ACL__14.9 상태 관리와 애플리케이션 리셋__14.10 컨슈머 오프셋 랙 모니터링__14.11 마이크로서비스 생성 프로세스 간소화__14.12 컨테이너 관리 서비스__14.13 클러스터 생성과 관리__14.14 디펜던시 추적과 토폴로지 시각화__14.15 마치며CHAPTER 15 이벤트 기반 마이크로서비스 테스트__15.1 일반 테스트 원칙__15.2 단위 테스트 토폴로지 함수__15.3 토폴로지 테스트__15.4 스키마 진화와 호환성 테스트__15.5 이벤트 기반 마이크로서비스의 통합 테스트__15.6 로컬 통합 테스트__15.7 완전 원격 통합 테스트__15.8 완전 원격 통합 테스트 전략 선택__15.9 마치며CHAPTER 16 이벤트 기반 마이크로서비스 배포__16.1 마이크로서비스 배포 원칙__16.2 마이크로서비스 배포 아키텍처 컴포넌트__16.3 기본 풀-스톱 배포 패턴__16.4 롤링 업데이트 패턴__16.5 중대한 스키마 변경 패턴__16.6 블루-그린 배포 패턴__16.7 마치며CHAPTER 17 총정리__17.1 통신 레이어__17.2 비즈니스 도메인과 경계 콘텍스트__17.3 공용 도구와 인프라__17.4 스키마화 이벤트__17.5 데이터 해방, 단일 진실 공급원__17.6 마이크로서비스__17.7 마이크로서비스 구현 옵션__17.8 테스트__17.9 배포맺음말