이벤트 기반 마이크로서비스 구축

Book description

이벤트 기반 마이크로서비스 아키텍처를 소개하는 실무 개론서다. 구조, 통신, 통합, 배포 등 기본 개념을 그림과 함께 구체적으로 설명한다. 따라서 이벤트 기반 시스템 구축 방식을 마이크로서비스로 전환하고자 하는 입문 개발자도 쉽게 읽을 수 있다. 넷플릭스, 링크드인, 스포티파이, 우버 등 세계 IT 기업들이 도입한 실제 데이터 사용법과 서비스 접근법을 익혀보자.

Table of contents

  1. 추천사
  2. 지은이·옮긴이 소개
  3. 옮긴이의 말
  4. 서문
  5. 감사의 말 (1/4)
  6. 감사의 말 (2/4)
  7. 감사의 말 (3/4)
  8. 감사의 말 (4/4)
  9. CHAPTER 1 왜 이벤트 기반 마이크로서비스인가?
    1. 1.1 이벤트 기반 마이크로서비스란?
    2. 1.2 도메인 주도 설계와 경계 콘텍스트
      1. 1.2.1 도메인 모델과 경계 콘텍스트 활용
      2. 1.2.2 비즈니스 요건에 따라 경계 콘텍스트 조정
    3. 1.3 통신 구조
      1. 1.3.1 비즈니스 통신 구조
      2. 1.3.2 구현 통신 구조
      3. 1.3.3 데이터 통신 구조
      4. 1.3.4 콘웨이의 법칙과 통신 구조
    4. 1.4 기존 컴퓨팅의 통신 구조
      1. 1.4.1 옵션 1: 서비스를 새로 만듦
      2. 1.4.2 옵션 2: 기존 서비스에 추가
      3. 1.4.3 옵션별 장단점
      4. 1.4.4 팀 시나리오(계속)
      5. 1.4.5 상충되는 압력
    5. 1.5 이벤트 기반 통신 구조
      1. 1.5.1 이벤트는 통신의 근간이다
      2. 1.5.2 이벤트 스트림은 단일 진실 공급원이다
      3. 1.5.3 컨슈머가 스스로 모델링과 쿼리를 수행한다
      4. 1.5.4 조직 전반적으로 데이터 통신이 원활해진다
      5. 1.5.5 접근 가능한 데이터 덕분에 비즈니스 통신 변경이 가능하다
    6. 1.6 비동기식 이벤트 기반 마이크로서비스
      1. 1.6.1 이벤트 기반 마이크로서비스 예제
    7. 1.7 동기식 마이크로서비스
      1. 1.7.1 동기식 마이크로서비스의 단점
      2. 1.7.2 동기식 마이크로서비스의 장점
    8. 1.8 마치며
  10. CHAPTER 2 이벤트 기반 마이크로서비스 기초
    1. 2.1 토폴로지 구성
      1. 2.1.1 마이크로서비스 토폴로지
      2. 2.1.2 비즈니스 토폴로지
    2. 2.2 이벤트 콘텐츠
    3. 2.3 이벤트 구조
      1. 2.3.1 키 없는 이벤트
      2. 2.3.2 엔티티 이벤트
      3. 2.3.3 키 있는 이벤트
    4. 2.4 엔티티 이벤트에서 상태를 구체화
    5. 2.5 이벤트 데이터 정의와 스키마
    6. 2.6 마이크로서비스 단일 작성자 원칙
    7. 2.7 마이크로서비스를 이벤트 브로커로 강화
      1. 2.7.1 이벤트 보관 및 처리
      2. 2.7.2 추가 고려 사항
    8. 2.8 이벤트 브로커 대 메시지 브로커
      1. 2.8.1 불변 로그에서 소비
      2. 2.8.2 단일 진실 공급원 제공
    9. 2.9 대규모 마이크로서비스 관리
      1. 2.9.1 마이크로서비스를 컨테이너에 넣기
      2. 2.9.2 마이크로서비스를 가상 머신에 넣기
      3. 2.9.3 컨테이너와 가상 머신 관리
    10. 2.10 마이크로서비스 세금 납부
    11. 2.11 마치며
  11. CHAPTER 3 통신 및 데이터 규약
    1. 3.1 이벤트 기반 데이터 규약
      1. 3.1.1 명시적인 스키마를 규약으로 활용
      2. 3.1.2 스키마 정의 주석
      3. 3.1.3 완전한 스키마 진화
      4. 3.1.4 코드 생성기 지원
      5. 3.1.5 중대한 스키마 변경
    2. 3.2 이벤트 포맷 선택
    3. 3.3 이벤트 설계
      1. 3.3.1 오직 진실만을 말할지어다
      2. 3.3.2 스트림당 이벤트 정의는 하나만 사용
      3. 3.3.3 가장 좁은 범위의 데이터 타입 사용
      4. 3.3.4 이벤트는 하나의 목적만 갖도록
      5. 3.3.5 이벤트 크기 최소화
      6. 3.3.6 미래의 컨슈머도 이벤트 설계에 반영
      7. 3.3.7 이벤트를 세마포어나 시그널로 사용하지 않는다
    4. 3.4 마치며
  12. CHAPTER 4 기존 시스템에 이벤트 기반 아키텍처 통합
    1. 4.1 데이터 해방이란?
      1. 4.1.1 데이터 해방 시 고려 사항
      2. 4.1.2 해방된 데이터를 이벤트로 변환
    2. 4.2 데이터 해방 패턴
    3. 4.3 데이터 해방 프레임워크
    4. 4.4 쿼리로 데이터 해방
      1. 4.4.1 벌크 로딩
      2. 4.4.2 증분 타임스탬프 로딩
      3. 4.4.3 자동증가 ID 로딩
      4. 4.4.4 맞춤 쿼리
      5. 4.4.5 증분 업데이트
      6. 4.4.6 쿼리 기반 업데이트의 장점
      7. 4.4.7 쿼리 기반 업데이트의 단점
    5. 4.5 CDC 로그로 데이터 해방
      1. 4.5.1 데이터 저장소 로그의 장점
      2. 4.5.2 데이터 저장소 로그의 단점
    6. 4.6 아웃박스 테이블로 데이터 해방
      1. 4.6.1 성능 고려 사항
      2. 4.6.2 내부 데이터 모델 격리
      3. 4.6.3 스키마 호환성 보장
      4. 4.6.4 변경-데이터를 트리거로 캡처
    7. 4.7 데이터 정의 변경을 캡처 대상 데이터 세트로
      1. 4.7.1 쿼리 패턴, CDC 로그 패턴: 사후 데이터 정의 변경 처리
      2. 4.7.2 변경-데이터 테이블 캡처 패턴: 데이터 정의 변경 처리
    8. 4.8 이벤트 데이터를 데이터 저장소에 싱킹
    9. 4.9 싱킹과 소싱의 비즈니스 영향도
    10. 4.10 마치며
  13. CHAPTER 5 이벤트 기반 처리 기본
    1. 5.1 상태 비저장 토폴로지 구성
      1. 5.1.1 변환
      2. 5.1.2 스트림 분기 및 병합
    2. 5.2 이벤트 스트림 리파티션
      1. 5.2.1 예제: 이벤트 스트림 리파티션
    3. 5.3 이벤트 스트림 코파티션
      1. 5.3.1 예제: 이벤트 스트림 코파티션
    4. 5.4 컨슈머 인스턴스에 파티션 할당
      1. 5.4.1 파티션 어사이너로 파티션 배정
      2. 5.4.2 코파티션된 파티션 할당
      3. 5.4.3 파티션 할당 전략
    5. 5.5 상태 비저장 처리 인스턴스 실패 복구
    6. 5.6 마치며
  14. CHAPTER 6 확정적 스트림 처리
    1. 6.1 이벤트 기반 워크플로의 확정성
    2. 6.2 타임스탬프
      1. 6.2.1 분산 타임스탬프 동기화
      2. 6.2.2 타임스탬프 찍힌 이벤트 처리
    3. 6.3 이벤트 스케줄링과 확정적 처리
      1. 6.3.1 맞춤 이벤트 스케줄러
      2. 6.3.2 이벤트 시간, 처리 시간, 인입 시간에 따라 처리
      3. 6.3.3 컨슈머의 타임스탬프 추출
      4. 6.3.4 외부 시스템에 요청-응답 호출
    4. 6.4 워터마크
      1. 6.4.1 병렬 처리 시 워터마크
    5. 6.5 스트림 시간
      1. 6.5.1 병렬 처리 시 스트림 시간
    6. 6.6 비순차 이벤트와 지각 이벤트
      1. 6.6.1 워터마크와 스트림 시간이 늦은 이벤트
      2. 6.6.2 비순차 이벤트의 원인과 영향
      3. 6.6.3 시간에 민감한 함수와 윈도잉
    7. 6.7 지각 이벤트 처리
    8. 6.8 재처리 대 준실시간 처리
    9. 6.9 간헐적 실패와 지각 이벤트
    10. 6.10 프로듀서/이벤트 브로커 연결 문제
    11. 6.11 마치며
  15. CHAPTER 7 상태 저장 스트리밍
    1. 7.1 상태 저장소, 이벤트 스트림에서 상태 구체화
    2. 7.2 체인지로그 이벤트 스트림에 상태 기록
    3. 7.3 내부 상태 저장소에 상태 구체화
      1. 7.3.1 전역 상태 구체화
      2. 7.3.2 내부 상태 사용 시 장점
      3. 7.3.3 내부 상태의 단점
      4. 7.3.4 내부 상태의 확장 및 복구
    4. 7.4 외부 상태 저장소에 상태 구체화
      1. 7.4.1 외부 상태 저장소의 장점
      2. 7.4.2 외부 상태의 단점
      3. 7.4.3 외부 상태 저장소의 확장 및 복구
    5. 7.5 재구성 대 상태 저장소 마이그레이션
      1. 7.5.1 재구성
      2. 7.5.2 마이그레이션
    6. 7.6 트랜잭션과 실제로 한 번 처리
      1. 7.6.1 예제: 재고 회계 서비스
      2. 7.6.2 클라이언트-브로커 트랜잭션으로 실제로 한 번 처리
      3. 7.6.3 클라이언트-브로커 트랜잭션 없이 실제로 한 번 처리
    7. 7.7 마치며
  16. CHAPTER 8 마이크로서비스 워크플로 구축
    1. 8.1 코레오그래피 패턴
      1. 8.1.1 예제: 이벤트 기반 코레오그래피
      2. 8.1.2 코레오그래피 워크플로의 생성과 수정
      3. 8.1.3 코레오그래피 워크플로 모니터링
    2. 8.2 오케스트레이션 패턴
      1. 8.2.1 예제: 이벤트 기반 오케스트레이션
      2. 8.2.2 예제: 직접 호출 오케스트레이션
      3. 8.2.3 직접 호출 및 이벤트 기반 오케스트레이션 비교
      4. 8.2.4 오케스트레이션 워크플로의 생성과 수정
      5. 8.2.5 오케스트레이션 워크플로 모니터링
    3. 8.3 분산 트랜잭션
      1. 8.3.1 코레오그래피 트랜잭션: 사가 패턴
      2. 8.3.2 오케스트레이션 트랜잭션
    4. 8.4 보상 워크플로
    5. 8.5 마치며
  17. CHAPTER 9 FaaS 응용 마이크로서비스
    1. 9.1 함수 기반 솔루션을 마이크로서비스로 설계
      1. 9.1.1 엄격한 경계 컨텍스트의 멤버십 관리
      2. 9.1.2 처리 완료 이후에만 오프셋 커밋
      3. 9.1.3 적을수록 좋다
    2. 9.2 FaaS 공급자 선택
    3. 9.3 함수를 마이크로서비스로 개발
    4. 9.4 콜드 스타트, 웜 스타트
    5. 9.5 트리거로 함수 시동
      1. 9.5.1 새 이벤트에 반응해 트리거: 이벤트-스트림 리스너
      2. 9.5.2 컨슈머 그룹 랙에 반응해 트리거
      3. 9.5.3 스케줄에 따라 트리거
      4. 9.5.4 웹훅에 반응해 트리거
      5. 9.5.5 리소스 이벤트에 반응해 트리거
    6. 9.6 비즈니스 업무를 함수로 처리
    7. 9.7 상태 관리
    8. 9.8 함수에서 다른 함수 호출
      1. 9.8.1 이벤트 기반 통신 패턴
      2. 9.8.2 직접 호출 패턴
    9. 9.9 종료 및 중단
    10. 9.10 함수 튜닝
      1. 9.10.1 넉넉한 리소스 할당
      2. 9.10.2 배치 이벤트 처리 매개변수
    11. 9.11 FaaS 솔루션 확장
    12. 9.12 마치며
  18. CHAPTER 10 기본 프로듀서/컨슈머 마이크로서비스
    1. 10.1 BPC의 알맞은 용도는?
      1. 10.1.1 기존 레거시 시스템과 통합
      2. 10.1.2 이벤트 순서와 무관한 상태 저장 비즈니스 로직
      3. 10.1.3 데이터 레이어가 너무 많은 일을 하는 경우
      4. 10.1.4 독립적으로 처리 및 데이터 레이어 확장
    2. 10.2 하이브리드 BPC 애플리케이션으로 외부 스트리밍을 처리
      1. 10.2.1 예제: 외부 스트림 처리 프레임워크를 이용해 이벤트 스트림 조인
    3. 10.3 마치며
  19. CHAPTER 11 대용량 프레임워크 마이크로서비스
    1. 11.1 대용량 프레임워크의 간략한 역사
    2. 11.2 대용량 프레임워크의 내부 작동 원리
    3. 11.3 장점 및 제약
    4. 11.4 클러스터 구성 옵션과 실행 모드
      1. 11.4.1 호스티드 서비스 활용
      2. 11.4.2 나만의 클러스터 구축
      3. 11.4.3 CMS와 연계하여 클러스터 생성
    5. 11.5 애플리케이션 제출 모드
      1. 11.5.1 드라이버 모드
      2. 11.5.2 클러스터 모드
    6. 11.6 상태 처리와 체크포인트 활용
    7. 11.7 애플리케이션 확장과 이벤트 스트림 파티션 처리
      1. 11.7.1 애플리케이션 실행 중 확장
      2. 11.7.2 애플리케이션 재시동 후 확장
      3. 11.7.3 애플리케이션 자동확장
    8. 11.8 실패 복구
    9. 11.9 멀티테넌시 이슈
    10. 11.10 언어 및 구문
    11. 11.11 프레임워크 선택
    12. 11.12 예제: 클릭 및 뷰의 세션 윈도잉
    13. 11.13 마치며
  20. CHAPTER 12 경량 프레임워크 마이크로서비스
    1. 12.1 장점 및 제약
    2. 12.2 경량 처리
    3. 12.3 상태 처리와 체인지로그 활용
    4. 12.4 애플리케이션 확장과 실패 복구
      1. 12.4.1 이벤트 셔플링
      2. 12.4.2 상태 할당
      3. 12.4.3 상태 복제와 핫 레플리카
    5. 12.5 경량 프레임워크 선택
      1. 12.5.1 아파치 카프카 스트림즈
      2. 12.5.2 아파치 삼자: 임베디드 모드
    6. 12.6 언어 및 구문
    7. 12.7 스트림-테이블-테이블 조인: 강화 패턴
    8. 12.8 마치며
  21. CHAPTER 13 이벤트 기반 마이크로서비스와 요청- 응답 마이크로서비스의 통합
    1. 13.1 외부 이벤트 처리
      1. 13.1.1 자율적으로 생성된 이벤트
      2. 13.1.2 반응하여 생성된 이벤트
    2. 13.2 자율적으로 생성된 분석 이벤트 처리
    3. 13.3 서드파티 요청-응답 API 연계
    4. 13.4 상태 저장 데이터 처리 및 서비스
      1. 13.4.1 내부 상태 저장소를 이용해 실시간 요청 처리
      2. 13.4.2 외부 상태 저장소를 이용해 실시간 요청 처리
    5. 13.5 이벤트 기반 워크플로 내에서 요청 처리
      1. 13.5.1 UI 이벤트 처리 (1/2)
      2. 13.5.1 UI 이벤트 처리 (2/2)
    6. 13.6 요청-응답 애플리케이션과 마이크로프런트엔드
    7. 13.7 마이크로프런트엔드의 장점
      1. 13.7.1 조합형 마이크로서비스
      2. 13.7.2 비즈니스 요건에 맞추기 쉽다
    8. 13.8 마이크로프런트엔드의 단점
      1. 13.8.1 UI 엘리먼트와 스타일의 일관성이 어긋날 수 있다
      2. 13.8.2 들쑥날쑥한 마이크로프런트엔드 성능
      3. 13.8.3 예제: 경험 검색 및 리뷰 애플리케이션
    9. 13.9 마치며
  22. CHAPTER 14 지원 도구
    1. 14.1 마이크로서비스-팀 배정 시스템
    2. 14.2 이벤트 스트림 생성/변경
    3. 14.3 이벤트 스트림 메타데이터 태깅
    4. 14.4 쿼터
    5. 14.5 스키마 레지스트리
    6. 14.6 스키마 생성/변경 알림
    7. 14.7 오프셋 관리
    8. 14.8 이벤트 스트림 권한과 ACL
    9. 14.9 상태 관리와 애플리케이션 리셋
    10. 14.10 컨슈머 오프셋 랙 모니터링
    11. 14.11 마이크로서비스 생성 프로세스 간소화
    12. 14.12 컨테이너 관리 서비스
    13. 14.13 클러스터 생성과 관리
      1. 14.13.1 이벤트 브로커를 프로그래밍으로 가져오기
      2. 14.13.2 컴퓨팅 리소스를 프로그래밍으로 가져오기
      3. 14.13.3 클러스터 간 이벤트 데이터 복제
      4. 14.13.4 도구를 프로그래밍으로 가져오기
    14. 14.14 디펜던시 추적과 토폴로지 시각화
      1. 14.14.1 토폴로지 예제
    15. 14.15 마치며
  23. CHAPTER 15 이벤트 기반 마이크로서비스 테스트
    1. 15.1 일반 테스트 원칙
    2. 15.2 단위 테스트 토폴로지 함수
      1. 15.2.1 상태 비저장 함수
      2. 15.2.2 상태 저장 함수
    3. 15.3 토폴로지 테스트
    4. 15.4 스키마 진화와 호환성 테스트
    5. 15.5 이벤트 기반 마이크로서비스의 통합 테스트
    6. 15.6 로컬 통합 테스트
      1. 15.6.1 테스트 코드 런타임 내부에 임시 환경 만들기
      2. 15.6.2 테스트 코드 외부에 임시 환경 만들기
      3. 15.6.3 모킹 및 시뮬레이터를 이용해 호스티드 서비스 통합
      4. 15.6.4 로컬 옵션이 없는 원격 서비스 통합
    7. 15.7 완전 원격 통합 테스트
      1. 15.7.1 프로그래밍으로 임시 통합 테스트 환경 만들기
      2. 15.7.2 공유 환경에서 테스트
      3. 15.7.3 프로덕션 환경에서 테스트
    8. 15.8 완전 원격 통합 테스트 전략 선택
    9. 15.9 마치며
  24. CHAPTER 16 이벤트 기반 마이크로서비스 배포
    1. 16.1 마이크로서비스 배포 원칙
    2. 16.2 마이크로서비스 배포 아키텍처 컴포넌트
      1. 16.2.1 지속적 통합, 전달, 배포 시스템
      2. 16.2.2 컨테이너 관리 시스템과 상용 하드웨어
    3. 16.3 기본 풀-스톱 배포 패턴
    4. 16.4 롤링 업데이트 패턴
    5. 16.5 중대한 스키마 변경 패턴
      1. 16.5.1 이벤트 스트림 2개를 통해 최종 일관적으로 마이그레이션
      2. 16.5.2 새 이벤트 스트림으로 동기화하여 마이그레이션
    6. 16.6 블루-그린 배포 패턴
    7. 16.7 마치며
  25. CHAPTER 17 총정리
    1. 17.1 통신 레이어
    2. 17.2 비즈니스 도메인과 경계 컨텍스트
    3. 17.3 공용 도구와 인프라
    4. 17.4 스키마화 이벤트
    5. 17.5 데이터 해방, 단일 진실 공급원
    6. 17.6 마이크로서비스
    7. 17.7 마이크로서비스 구현 옵션
    8. 17.8 테스트
    9. 17.9 배포
  26. 맺음말
  27. 찾아보기 (1/4)
  28. 찾아보기 (2/4)
  29. 찾아보기 (3/4)
  30. 찾아보기 (4/4)

Product information

  • Title: 이벤트 기반 마이크로서비스 구축
  • Author(s): 이일웅, 애덤 벨메어
  • Release date: May 2021
  • Publisher(s): Hanbit Media, Inc.
  • ISBN: 9791162244173