본문 바로가기

추천 검색어

실시간 인기 검색어

이벤트 소싱과 마이크로서비스 아키텍처

성공적인 이벤트 기반 시스템 구축하기
소프트웨어 아키텍처
손경덕 지음
에이콘출판

2024년 09월 30일 출간

국내도서 : 2024년 07월 30일 출간

(개의 리뷰)
( 0% 의 구매자)
eBook 상품 정보
파일 정보 pdf (10.12MB)
지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
교보eBook App 듣기(TTS) 불가능
TTS 란?
텍스트를 음성으로 읽어주는 기술입니다.
  • 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를​ 읽을 수 있습니다.
  • 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.

PDF 필기가능 (Android, iOS)
소득공제
소장

판매가 판매금지

이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.

카드&결제 혜택

  • 5만원 이상 구매 시 추가 2,000P
  • 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
  • 리뷰 작성 시, e교환권 추가 최대 200원

작품소개

이 상품이 속한 분야

이벤트 소싱을 이해하기 위해 도메인 주도 설계와 객체지향 설계 원칙(SOLID)을 연계해서 설명하는 책이다. 이어서 이벤트 소싱의 핵심인 도메인 이벤트, 재수화와 스냅샷, 프로젝션/CQRS 메커니즘이 동작하는 방식과 이벤트의 버전을 관리하는 방법을 배운다. 헥사고날 아키텍처와 함께 여러 서비스가 API와 이벤트로 협력하는 방식을 알아보고 이벤트 기반 마이크로서비스에서 사가(SAGA)와 보상 트랜잭션으로 데이터 일관성을 달성하는 방법을 이벤트 소싱을 적용했을 때와 그렇지 않은 경우를 배우고 사용자 인터페이스와 관계를 설명한다. 마지막으로 쿠버네티스 환경을 구축하고 서비스를 배포해본다.
1장. 도메인 주도 설계
1.1 도메인 로직 패턴
1.1.1 트랜잭션 스크립트 패턴
1.1.2 테이블 모듈 패턴
1.1.3 서비스 레이어 패턴
1.1.4 도메인 모델 패턴
1.2 헥사고날 아키텍처
1.3 도메인 주도 설계
1.3.1 유비쿼터스 언어
1.3.2 빌딩 블록
1.3.3 엔티티
1.3.4 값 객체
1.3.5 서비스
1.3.6 모듈
1.4 라이프사이클
1.4.1 애그리게이트
1.4.2 애그리게이트와 단위 테스트
1.4.3 애그리게이트 설계 규칙
1.4.4 팩토리
1.4.5 리포지토리
1.5 추상화된 핵심
1.6 요약


2장. 객체지향 설계 원칙
2.1 책임 주도 설계
2.2 단일 책임 원칙
2.3 개방/폐쇄 원칙
2.4 리스코프 치환 원칙
2.5 인터페이스 분리 원칙
2.6 의존성 역전 원칙
2.7 모듈
2.8 요약


3장. 이벤트 소싱 I
3.1 부서 이동
3.2 감사와 이력
3.2.1 단일 테이블과 시퀀스
3.2.2 상태 테이블과 이력 테이블 분리
3.2.3 변경 값
3.3 도메인 이벤트
3.4 이벤트 소싱
3.5 이벤트 소싱 구현
3.5.1 데이터 모델
3.5.2 애그리게이트와 이벤트 저장
3.5.3 커맨드와 이벤트
3.5.4 커맨드와 유효성 검사
3.5.5 재수화(이벤트 리플레이)
3.6 마이크로서비스 모듈
3.7 이벤트 소싱과 단위 테스트
3.8 요약


4장. 이벤트 소싱 II
4.1 도메인 객체 라이프사이클
4.1.1 애그리게이트 생성
4.1.2 애그리게이트 삭제
4.2 동시성과 이벤트 충돌
4.3 재수화 성능과 스냅샷
4.3.1 스냅샷 생성
4.3.2 재수화 제외 이벤트
4.4 스냅샷 생성 전략
4.4.1 주기적인 시간
4.4.2 매 N번째 이벤트
4.4.3 도메인 이벤트
4.5 이벤트 소싱과 상수
4.6 도메인 이벤트와 버전
4.6.1 업캐스팅
4.6.2 업캐스터
4.6.3 중간 이벤트
4.6.4 이벤트 마이그레이션
4.6.5 이벤트 버전과 스냅샷
4.7 마이크로서비스 모듈
4.8 다건 처리(반복문)와 성능
4.8.1 병렬 처리
4.8.2 캐싱
4.9 데이터 마이그레이션
4.10 백업과 아카이빙
4.11 이벤스 소싱과 추상화된 핵심
4.11.1 EventSourcedAggregate
4.11.2 Command
4.11.3 AggregateStore
4.12 요약


5장. 마이크로서비스 협업
5.1 인바운드 어댑터와 RESTful API
5.1.1 HTTP 메소드
5.1.2 애그리게이트와 URL
5.1.3 커맨드와 RESTful API
5.1.4 조회와 RESTful API
5.1.5 전역 예외 처리
5.1.6 마이크로서비스 모듈
5.2 아웃바운드 어댑터와 RESTful API
5.3 이벤트 브로커
5.3.1 도커와 카프카
5.4 아웃바운드 어댑터와 이벤트 발행
5.4.1 이벤트 발행
5.4.2 이벤트 브로커와 메시지
5.4.3 변환(2차) 메시지(커맨드/이벤트)
5.4.4 서비스 내부 이벤트와 외부 발행 이벤트
5.5 인바운드 어댑터와 이벤트 소비
5.6 이벤트 어댑터와 마이크로서비스 모듈
5.7 이벤트 어댑터와 추상화된 핵심
5.7.1 어노테이션
5.8 레거시 통합
5.8.1 피드
5.8.2 웹훅
5.8.3 그래프 큐엘
5.9 요약


6장. 결과적 일관성
6.1 기업 통합 패턴
6.1.1 라우팅 슬립 패턴
6.1.2 프로세스 매니저 패턴
6.2 분산 트랜잭션
6.3 사가
6.3.1 상관 관계 아이디
6.3.2 오케이스레이션
6.3.3 코레오그래피
6.3.4 타임아웃
6.3.5 의미적 잠금
6.4 계좌 이체
6.4.1 오케스트레이션
6.4.2 코레오그래피
6.5 이벤트 소싱과 결과적 일관성
6.5.1 이벤트 소싱과 사가
6.5.2 의미적 잠금
6.5.3 결과적 일관성
6.5.4 타임아웃
6.5.5 상관 관계 아이디와 추적성
6.6 사례 연구
6.6.1 카트와 관심 상품
6.6.2 주문과 재고
6.6.3 결제와 결제 실패
6.7 전통적인 이력관리와 결과적 일관성
6.8 도메인 이벤트와 라이브러리
6.9 일관성과 마이크로서비스 분리 및 통합
6.10 요약


7장. 명령과 조회 책임 분리(CQRS)
7.1 명령과 조회 책임 분리
7.2 구체화된 뷰와 이벤트 핸들러
7.2.1 상품 판매량 뷰
7.2.2 상담사 일일 총 통화시간 뷰
7.3 뷰 조회
7.4 CQRS와 RESTful API
7.5 뷰 복원
7.6 마이크로서비스 모듈
7.7 CQRS 활용 사례
7.7.1 선택적 동기화 - 코드
7.7.2 이벤트 통합 저장소 - 감사
7.7.3 값 누적 - 실시간 매출 현황
7.7.4 복잡한 계산 - 설계사 수수료
7.7.5 데이터 동기화 - 카트와 상품 판매가격 변경
7.8 이벤트 소싱과 뷰 일관성
7.9 요약


8장. 사용자 인터페이스
8.1 CRUD 사용자 인터페이스
8.2 태스크 기반 사용자 인터페이스
8.3 사용자 인터페이스와 커맨드
8.3.1 복합 커맨드
8.3.2 목록과 상세
8.4 페이지와 컴포넌트 구성
8.5 사용자 인터페이스와 비동기 서비스
8.5.1 화면 비활성화 후 새로고침
8.5.2 확인(완료) 화면
8.5.3 예상 결과 표시
8.5.4 이벤트와 푸시
8.5.5 타이머와 폴링
8.6 스벨트와 비트
8.6.1 스벨트 프로젝트 생성
8.6.2 서버 설정
8.6.3 svelte-navigator 의존성
8.7 계좌 이체와 계좌 페이지
8.8 비동기 구현
8.8.1 폴링과 setInterval 함수
8.8.2 푸시와 웹소켓
8.9 마이크로 프론트엔드
8.9.1 단일 페이지 애플리케이션과 컴포넌트
8.9.2 컴포넌트와 이벤트 프로그래밍
8.9.3 컴포넌트 vs. 웹 컴포넌트
8.9.4 Assets output 경로
8.10 마이크로서비스와 형상 관리
8.11 요약


9장. 클라우드 환경
9.1 도커
9.1.1 도커 테스크탑 다운로드 및 설치
9.1.2 도커 리소스 설정
9.1.3 Dockerfile
9.1.4 이미지 생성
9.1.5 도커 허브에 이미지 푸시
9.2 쿠버네티스
9.2.1 쿠버네티스 설치
9.3 쿠버네티스 구성 요소
9.3.1 네임스페이스
9.3.2 파드
9.3.3 컨피그맵
9.3.4 시크릿
9.3.5 서비스
9.3.6 엔드포인트
9.3.7 디플로이먼트와 레플리카셋
9.3.8 디플로이먼트와 시크릿
9.4 이스티오
9.4.1 이스티오 설치
9.4.2 네임스페이스 생성
9.4.3 사이드카 설정
9.4.4 게이트웨이
9.4.5 버추얼 서비스
9.5 프로메테우스와 그라파나
9.5.1 프로메테우스와 그라파나 설치
9.5.2 이스티오 게이트웨이
9.5.3 마이크로미터
9.6 키알리
9.6.1 키알리 설치
9.6.2 키알리와 서비스 의존성
9.7 요약

◈ 이 책에서 다루는 내용 ◈

◆ 도메인 주도 설계의 빌딩 블록과 객체지향 설계 원칙(SOLID)을 사례로 설명
◆ 이벤트 소싱을 사용할 때 만나는 대표적인 문제와 해결 방법 소개
◆ 마이크로서비스 아키텍처에서 서비스간 RESTful API와 이벤트를 사용한 협력 설명
◆ 결과적 일관성을 구현하는 상세한 방법과 이벤트 소싱
◆ 결과적 일관성의 비동기 프로세스와 사용자 인터페이스 구현 방법 설명
◆ 명령과 조회 책임 분리(CQRS)에 대한 다양한 사례 연구 소개
◆ 쿠버네티스/이스티오를 활용한 서비스 배포와 모니터링


◈ 이 책의 대상 독자 ◈

◆ 도메인 주도 설계나 객체지향 설계 원칙을 처음 접하는 개발자
◆ 이벤트 소싱을 체계적으로 학습하고 실무에 적용하고 싶은 개발자
◆ 결과적 일관성을 구현하는 구체적인 방법을 알고 싶은 개발자
◆ 마이크로서비스 아키텍처에서 주요 주제에 대해 정리하고 싶은 개발자


◈ 이 책의 구성 ◈

이 책은 총 9장으로 구성돼 있습니다. 도메인 주도 설계, 객체지향 설계 원칙에서 시작해 이벤트 소싱, CQRS와 함께 마이크로서비스 간 협력 방법 그리고 보상 트랜잭션(Compensating Transaction) 또는 사가SAGA로 알려진 결과적 일관성을 다룹니다. 후반부에는 마이크로서비스 아키텍처에서 사용자 인터페이스와 관련된 이슈와 배포 및 운영을 위한 도커(Docker)와 쿠버네티스(Kubernetes)처럼 클라우드 환경에서 많이 사용하는 기술을 다룹니다.
‘1장, 도메인 주도 설계'에서는 도메인 주도 설계의 기본 요소인 엔티티, 값 객체, 애그리게이트, 서비스, 리포지토리, 팩토리를 소개합니다. 특히 마이크로서비스 아키텍처는 도메인 주도 설계에서 말하는 애그리게이트와 잘 어울리는 접근법입니다. 이 여섯 개 구성 요소를 정확하게 이해하는 것만으로도 단일 마이크로서비스의 내부 아키텍처를 설계할 수 있습니다.
‘2장, 객체지향 설계 원칙’에서는 1장에서 설명한 도메인 주도 설계의 빌딩 블록과 함께 객체지향 설계 원칙인 SOLID를 살펴봅니다. SOLID는 오래된 원칙이지만 여전히 중요하며 효과가 있습니다.
‘3장, 이벤트 소싱 I’에서는 그렉 영이 공개한 『CQRS Documents』에서 제시한 아이디어를 기반으로 이벤트 소싱 메커니즘에 대해 설명하고 구현합니다. 이 메커니즘은 이어지는 장에서 설명하는 이벤트 소싱의 주요 특징과 이슈를 해결하기 위해 지속적으로 개선합니다.
‘4장, 이벤트 소싱 II’에서는 이벤트 소싱을 적용했을 때 발생할 수 있는 대표적인 문제를 살펴봅니다. 긴 라이프사이클을 가지는 애그리게이트는 많은 이벤트가 발생합니다. 이벤트들을 리플레이할 때 사용 가능한 메모리의 한계와 성능 저하를 방지하는 방법을 알아봅니다. 또한 시스템을 유지보수할 때 요구사항을 수용하면서 이벤트의 변화(버전 변화)를 처리하는 방법도 소개합니다. 애그리게이트는 독립적인 존재이지만 같은 애그리게이트가 동시에 다른 명령을 처리하면서 같은 속성을 변경할 때 부수적으로 발생할 수 있는 문제와 해결 방법을 알아봅니다.
‘5장, 마이크로서비스 협업’에서는 헥사고날 아키텍처(Hexagonal Architecture)에서 서비스 간 협력 방법인 인바운드와 아웃바운드 어댑터를 설명하고 대표적인 구현 기술인 RESTful API와 이벤트를 살펴봅니다. 인바운드 어댑터는 외부의 요청을 받아 비즈니스 로직을 처리하고 아웃바운드 어댑터는 비즈니스 로직 수행 전반에 걸쳐 다른 서비스와의 협력에 사용합니다.
‘6장, 결과적 일관성 마이크로서비스 아키텍처’에서 논란의 중심이 되는 결과적 일관성(분산 트랜잭션, 보상 트랜잭션, 사가)과 이를 해결하는 원리를 설명합니다. 에릭 에반스(Eric Evans)가 도메인 주도 설계에서 소개한 계좌 이체를 사가로 구현해 봅니다.
‘7장, 명령과 조회 책임 분리(CQRS)’에서는 3장과 4장에서 설명한 이벤트 리플레이의 단점을 보완하기 위해 조회 전용 데이터를 미리 생성하는 CQRS를 다루고 대표적인 활용 사례를 소개합니다. CQRS는 트랜잭션 요구사항에 따라 마이크로서비스 간뿐만 아니라 단일 마이크로서비스에도 적용할 수 있습니다.
‘8장, 사용자 인터페이스’에서는 마이크로서비스 아키텍처에서 백엔드 분리만큼 프론트엔드의 분리도 중요합니다. 이 장에서는 백엔드처럼 사용자 인터페이스를 분리하는 마이크로 프론트엔드와 마이크로서비스의 독립성을 높이기 위한 배포 방법을 소개합니다. 프론트엔드가 백엔드로 요청 후 응답을 받았지만 비즈니스 트랜잭션은 아직 진행 중일 수 있습니다. 이는 백엔드 간 결과적 일관성을 달성하기 위해 이벤트를 활용하고 비동기로 동작하기 때문입니다. 결국 프론트엔드 요청과 응답간 단절이 발생하는데 이를 해결하는 대표적인 패턴들을 설명하고 스벨트로 구현해 봅니다.
‘9장, 클라우드 환경’에서는 클라우드 운영에 필요한 주요 기술을 설명하고 앞서 개발한 서비스를 배포해 봅니다.
독립적인 마이크로서비스를 운영하면서 블루-그린/카나리 배포를 지원하는 최적의 오픈소스 솔루션인 도커와 쿠버네티스의 기본 구성 요소를 소개합니다. 마이크로서비스 개발 시 클라우드 관련 기술 요소를 코드베이스와 분리해 비즈니스에 더욱 집중할 수 있게 하는 서비스 메시인 이스티오 및 배포한 애플리케이션의 매트릭을 모니터링해 시계열 데이터로 수집하는 프로메테우스(Prometheus), 프로메테우스로 수집한 매트릭을 시각화하는 그라파나(Grafana), 키알리(Kiali)를 설치하고 설정해 봅니다.

작가정보

저자(글) 손경덕

웹 스크래핑 기반 서비스 회사에서 개발자로 시작한 후 보험 관련 SI 회사를 거쳐 현재는 넥스트리에서 근무하고 있습니다. 2018년 아키텍처 컨설팅을 시작으로 모든 시스템을 마이크로서비스 아키텍처로 구축하면서 다양한 상황에서 해결책을 찾고 있습니다. 최근에는 멀티-테넌트 아키텍처에서 역할 및 권한 관리와 마이크로 프론트엔드의 효율적인 구현/배포 방법을 고민하고 있습니다.

이 상품의 총서

Klover리뷰 (0)

Klover리뷰 안내
Klover(Kyobo-lover)는 교보를 애용해 주시는 고객님들이 남겨주신 평점과 감상을 바탕으로, 다양한 정보를 전달하는 교보문고의 리뷰 서비스입니다.
1. 리워드 안내
구매 후 90일 이내에 평점 작성 시 e교환권 100원을 적립해 드립니다.
  • - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다. (5,000원 이상 상품으로 변경 예정, 2024년 9월 30일부터 적용)
  • - 리워드는 한 상품에 최초 1회만 제공됩니다.
  • - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
2. 운영 원칙 안내
Klover리뷰를 통한 리뷰를 작성해 주셔서 감사합니다. 자유로운 의사 표현의 공간인 만큼 타인에 대한 배려를 부탁합니다. 일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
  • 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
  • 도서와 무관한 내용의 리뷰
  • 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
  • 의성어나 의태어 등 내용의 의미가 없는 리뷰

구매 후 리뷰 작성 시, e교환권 100원 적립

문장수집

문장수집 안내
문장수집은 고객님들이 직접 선정한 책의 좋은 문장을 보여 주는 교보문고의 새로운 서비스 입니다. 교보eBook 앱에서 도서 열람 후 문장 하이라이트 하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다. 마음을 두드린 문장들을 기록하고 좋은 글귀들은 ‘좋아요’ 하여 모아보세요. 도서 문장과 무관한 내용 등록 시 별도 통보없이 삭제될 수 있습니다.
리워드 안내
  • 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
  • e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다. (5,000원 이상 eBook으로 변경 예정, 2024년 9월 30일부터 적용)
  • 리워드는 한 상품에 최초 1회만 제공됩니다.
  • sam 이용권 구매 상품 / 선물받은 eBook / 오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.

구매 후 문장수집 작성 시, e교환권 100원 적립

    교보eBook 첫 방문을 환영 합니다!

    신규가입 혜택 지급이 완료 되었습니다.

    바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
    지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!

    교보e캐시 1,000원
    TOP
    신간 알림 안내
    이벤트 소싱과 마이크로서비스 아키텍처 웹툰 신간 알림이 신청되었습니다.
    신간 알림 안내
    이벤트 소싱과 마이크로서비스 아키텍처 웹툰 신간 알림이 취소되었습니다.
    리뷰작성
    • 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
    • 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
    • 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
    감성 태그

    가장 와 닿는 하나의 키워드를 선택해주세요.

    사진 첨부(선택) 0 / 5

    총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.

    신고/차단

    신고 사유를 선택해주세요.
    신고 내용은 이용약관 및 정책에 의해 처리됩니다.

    허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
    있으니 유의하시어 신중하게 신고해주세요.


    이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.

    문장수집 작성

    구매 후 90일 이내 작성 시, e교환권 100원 적립

    eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.

    P.
    이벤트 소싱과 마이크로서비스 아키텍처
    성공적인 이벤트 기반 시스템 구축하기
    저자 모두보기
    저자(글)
    낭독자 모두보기
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 프리미엄 이용권입니다.
    선물하실 sam이용권을 선택하세요.
    결제완료
    e캐시 원 결제 계속 하시겠습니까?
    교보 e캐시 간편 결제
    sam 열람권 선물하기
    • 보유 권수 / 선물할 권수
      0권 / 1
    • 받는사람 이름
      받는사람 휴대전화
    • 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
    • 열람권은 1인당 1권씩 선물 가능합니다.
    • 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
    • 선물한 열람권의 등록유효기간은 14일 입니다.
      (상대방이 기한내에 등록하지 않을 경우 소멸됩니다.)
    • 무제한 이용권일 경우 열람권 선물이 불가합니다.
    이 상품의 총서 전체보기
    네이버 책을 통해서 교보eBook 첫 구매 시
    교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 네이버 책을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)
    구글바이액션을 통해서 교보eBook
    첫 구매 시 교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 구글바이액션을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)