이벤트 기반 마이크로서비스 구축
실시간 데이터 활용을 위한 새로운 시스템 아키텍처 가이드
이벤트 기반 마이크로서비스 아키텍처를 소개하는 실무 개론서다. 구조, 통신, 통합, 배포 등 기본 개념을 그림과 함께 구체적으로 설명한다. 따라서 이벤트 기반 시스템 구축 방식을 마이크로서비스로 전환하고자 하는 입문 개발자도 쉽게 읽을 수 있다. 넷플릭스, 링크드인, 스포티파이, 우버 등 세계 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 배포
맺음말