[스프링 부트와 스프링 클라우드, 스프링 리액티브로 배우는]
스프링 5.0 마이크로서비스 2/e
- 원서명Spring 5.0 Microservices - Second Edition: Scalable systems with Reactive Streams and Spring Boot (ISBN 9781787127685)
- 지은이라제시 RV(Rajesh RV)
- 옮긴이오명운, 박소은, 허서윤, 이완근
- 감수자양수열
- ISBN : 9791161751108
- 35,000원
- 2018년 02월 09일 펴냄
- 페이퍼백 | 540쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 소프트웨어 아키텍처, 오픈소스 프로그래밍
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
마이크로서비스 아키텍처 개념을 먼저 알아보고 일반적인 스프링 부트 웹 애플리케이션을 스프링 클라우드, 스프링 리액티브 기술을 활용해서 마이크로서비스로 만들어가는 과정을 풍부한 예제와 실행 화면을 통해 구체적으로 보여준다. 마이크로서비스 적용 시 신경 써야 할 로깅과 모니터링도 빠짐없이 다루고 있고, 도커 컨테이너 기술을 활용해서 마이크로서비스와 데브옵스를 잘 조합하는 방법도 알아볼 수 있다. 이 책은 새롭게 마이크로서비스를 구축하거나 기존의 일체형 애플리케이션을 마이크로서비스로 전환할 때 훌륭한 지침서가 될 것이다.
한국어판 추천의 글
이 책을 읽어보면서 MSA를 적용하기 위해 J2EE의 구조적인 설계에서 어떻게 잘 분리할지 나 자신도 아직까지 확신을 갖지 못하고 고민하던 부분들이 정말 명쾌하게 정리돼 있어 놀랐다. 특히 4장에서 기존 레거시를 속된 말로 발라내는 과정은 정말 좋았다. MSA에 설익은 나와 같은 엔지니어들이 망치(MSA)만 들면 전부 못(마이크로서비스)으로 보인다고 뭐든지 마이크로서비스로 분리해내려는 시도를 하는데, 해야 할 부분만 마이크로서비스로 분리하라는 조언도 잊지 않고 해주고 있다.
4장을 읽을 때는 정말 이 책의 백미라고 생각하며 읽다가, 5장을 읽고는 다른 자바 개발자들에게 추천한다면 5장을 추천해야 하겠다는 생각이 많이 들었다. 유수의 스타트업 사례에서 화제가 됐던 스프링 클라우드(Spring Cloud)의 zuul이나 Eureka 등을 활용해서 MSA를 구현하는 정말 실질적인 이야기를 들어볼 수 있어서 정말 좋았던 챕터다.
요즘 MSA가 워낙 화두가 되고 모든 것을 MSA 스타일로 만들어야 한다고 하지만 정작 서비스를 분류하고 단위 서비스들을 묶어주려면 막막할 때가 많은데, 이 책은 사례를 들어 차근차근 풀어나가면서 등대 구실을 하는 좋은 책이라고 생각한다. 이 책을 읽기 좋게 번역해주신 역자들께 감사드린다.
/자바 챔피언 양수열
이 책에서 다루는 내용
■ 마이크로서비스 아키텍처와 장점
■ 마이크로서비스 개발 시 마주치는 공통적인 문제에 대한 해결 방법
■ 마이크로서비스를 개발하는 데 사용할 스프링 부트와 스프링 클라우드의 사용 방법
■ 마이크로서비스 로깅과 모니터링 방법
■ 스프링 5.0의 리액티브 프로그래밍을 활용한 현대적인 클라우드 네이티브 애플리케이션 개발 방법
■ 도커, 메소스, 마라톤으로 인터넷을 통해 들어오는 대규모의 다양한 요청을 처리하는 마이크로서비스 관리 방법
■ 스프링에 포함된 최신 리액티브 스트림에 대한 통찰과 애플리케이션의 회복성과 신축성을 높이는 방법
이 책의 대상 독자
이 책에는 스프링 프레임워크, 스프링 부트, 스프링 클라우드와 도커, 메소스, 마라톤을 사용해서 인터넷을 통해 들어오는 대규모의 다양한 요청을 처리할 수 있는 견고한 마이크로서비스를 설계하고자 하는 아키텍트의 흥미를 끌 수 있는 내용이 포함돼 있다. 마이크로서비스 역량 모델은 이 책에서 다룬 도구나 기술을 넘어서 아키텍트가 더 나은 솔루션을 고안해내는 데 도움을 줄 것이다.
이 책은 인터넷을 통해 들어오는 대규모의 다양한 요청을 처리할 수 있고, 현대적인 비즈니스 요구를 충족시켜줄 수 있는 클라우드 기반의 애플리케이션을 만들고자 하는 스프링 개발자를 주요 대상으로 한다. 이 책은 개발자들이 마이크로서비스가 정확히 무엇인지, 오늘날 왜 이렇게 화두가 됐는지를 실제 현장에서의 사례와 실습 가능한 코드 예제를 통해 알 수 있게 구성돼 있다. 개발자는 간단한 RESTful 서비스를 만들고, 이를 엔터프라이즈 수준의 마이크로서비스 생태계로 점차 확장시켜 나갈 수 있다.
이 책의 구성
1장. ‘쉽게 알아보는 마이크로서비스’에서는 마이크로서비스를 소개하고 탄생 배경, 기본 개념, 진화에 대해 알아본다.
2장. ‘마이크로서비스 관련 아키텍처 스타일 및 사례’에서는 마이크로서비스와 서비스 지향 아키텍처의 관계, 클라우드 네이티브(Cloud native)와 12 요소 애플리케이션의 개념을 알아보고, 각 기술의 보편적인 사례를 살펴본다.
3장. ‘스프링 부트로 만드는 마이크로서비스’에서는 스프링 프레임워크를 사용해서 REST 기반이자 메시지 기반의 마이크로서비스를 스프링 부트로 만드는 방법을 알아보고, 스프링 부트의 몇 가지 핵심 기능도 살펴본다.
4장. ‘마이크로서비스 개념 적용’에서는 엔터프라이즈 수준의 마이크로서비스를 만들 때 개발자가 직면하는 난관을 자세히 살펴보면서 마이크로서비스 구현의 실무적인 측면을 다뤄보고, 마이크로서비스 생태계를 성공적으로 관리하는 데 필요한 기능도 알아본다.
5장. ‘마이크로서비스 역량 모델’에서는 마이크로서비스 생태계를 성공적으로 관리하는 데 필요한 마이크로서비스 역량 모델을 알아본다. 또한 기업이 마이크로서비스 도입을 고려할 때 도움이 될 마이크로서비스 성숙도 평가 모델도 함께 다룬다.
6장. ‘마이크로서비스 진화: 사례 연구’에서는 브라운필드 항공사 애플리케이션을 진화시켜가는 실무 사례를 통해 앞에서 배운 마이크로서비스 개념을 어떻게 적용하는지 알아본다.
7장. ‘스프링 클라우드 컴포넌트를 활용한 마이크로서비스 확장’에서는 스프링 클라우드 기술 스택을 이용해 앞에서 만든 스프링 부트 애플리케이션 확장 방법을 알아본다. 스프링 클라우드의 아키텍처와 다양한 컴포넌트에 대해 자세히 살펴보고, 여러 컴포넌트를 어떻게 통합해서 사용하는지 알아본다.
8장. ‘마이크로서비스 로깅 및 모니터링’에서는 마이크로서비스 개발 시 로깅과 모니터링의 중요성을 다룬다. 마이크로서비스를 사용할 때 필요한 중앙 집중형 로깅과 오픈소스 도구를 활용한 모니터링, 스프링 프로젝트와의 통합 방법 등에 대한 우수 사례를 자세히 살펴본다.
9장. ‘도커 컨테이너와 마이크로서비스’에서는 마이크로서비스 관점에서 컨테이너화(containerization)의 개념을 알아본다. 메소스(Mesos)와 마라톤(Marathon)을 사용해서 대규모 배포에서 사용자 정의 라이프사이클 관리자를 대체할 수 있는 차세대 구현 방식을 알아본다.
10장. ‘메소스와 마라톤을 이용한 도커화된 마이크로서비스 확장’에서는 마이크로 서비스의 자동 프로비저닝과 배포에 대해 알아본다. 대규모 배포에서 도커 컨테이너를 활용하는 방법도 살펴본다.
11장. ‘마이크로서비스 개발 라이프사이클’에서는 마이크로서비스 개발 프로세스와 관습에 대해 알아보고, 데브옵스와 지속적 전달 파이프라인의 중요성에 대해 알아본다.
목차
목차
- 1장. 쉽게 알아보는 마이크로서비스
- 마이크로서비스로의 진화
- 마이크로서비스로 진화의 촉매: 비즈니스적 요구
- 마이크로서비스로 진화의 촉매: 기술
- 명령형 아키텍처의 진화
- 마이크로서비스란 무엇인가?
- 마이크로서비스와 벌집
- 마이크로서비스의 원칙
- 서비스 하나에 책임도 하나
- 마이크로서비스는 자율적
- 마이크로서비스의 특징
- 서비스는 일급 시민
- 마이크로서비스는 가볍다
- 다양한 언어로 구성할 수 있는 마이크로서비스
- 마이크로서비스 환경에서의 자동화
- 마이크로서비스를 지원하는 생태계
- 동적이고 분산돼 있는 마이크로서비스
- 붕괴 저항성, 빨리 실패하기, 자체 치유
- 마이크로서비스 예제
- 휴일 정보 포털의 예
- 여행사 포털 사례
- 마이크로서비스의 장점
- 폴리글랏 아키텍처 지원
- 실험과 혁신 유도
- 탄력적이고 선택적인 확장
- 대체 가능성
- 유기적 시스템 구축 유도
- 기술적 부채 경감
- 다양한 버전의 공존
- 자기 조직화 시스템 구축 지원
- 이벤트 주도 아키텍처 지원
- 데브옵스 지원
- 정리
- 마이크로서비스로의 진화
- 2장. 마이크로서비스 관련 아키텍처 스타일 및 사례
- 서비스 지향 아키텍처(SOA)
- 서비스 지향 통합
- 기존 시스템의 현행화
- 서비스 지향 애플리케이션
- SOA를 사용한 일체형의 전환
- 12 요소 애플리케이션과의 관계
- 단일 코드 베이스
- 의존성 꾸러미
- 환경설정 외부화
- 후방 지원 서비스 접근성
- 빌드, 출시, 운영의 격리
- 무상태, 비공유 프로세스
- 서비스를 포트에 바인딩해서 노출
- 확장을 위한 동시성
- 폐기 영향 최소화
- 개발과 운영의 짝 맞춤
- 로그 외부화
- 관리자 프로세스 패키징
- 서버리스 컴퓨팅
- 람다 아키텍처
- 삼총사의 만남: 데브옵스, 클라우드, 마이크로서비스
- 마이크로서비스 실천 방식과 프로세스로서의 데브옵스
- 마이크로서비스를 위한 셀프 서비스 인프라스트럭처로서의 클라우드
- 리액티브 마이크로서비스
- 리액티브 마이크로서비스 기반 주문 관리 시스템
- 마이크로서비스 사용 사례
- 마이크로서비스를 일찍 도입한 조직: 공통점 탐구
- 공통적인 주제는 일체형의 전환
- 마이크로서비스 프레임워크
- 정리
- 서비스 지향 아키텍처(SOA)
- 3장. 스프링 부트로 만드는 마이크로서비스
- 개발 환경 구축
- 스프링 부트 RESTful 마이크 서비스 만들기
- 스프링 부트 시작
- 스프링 부트 마이크 서비스 개발
- 첫 번째 스프링 부트 마이크로서비스 개발
- 스프링 부트 마이크로서비스 테스트
- 스프링 부트 마이크로서비스에 HATEOAS 기능 추가
- 리액티브 스프링 부트 마이크로서비스
- 스프링 웹플럭스를 활용한 리액티브 마이크로서비스
- 스프링 부트와 래빗엠큐를 사용하는 리액티브 마이크로서비스
- 보안 구현
- 마이크로서비스에 기본 보안 적용
- OAuth2를 사용하는 마이크 서비스 보안
- 다른 도메인에 존재하는 정보 요청 활성화
- 스프링 부트 액추에이터
- JConsole을 활용한 모니터링
- SSH를 활용한 모니터링
- 사용자 정의 서버 진단 모듈 추가
- 사용자 정의 지표
- 마이크로서비스 문서화
- 고객 등록 마이크로서비스 예제
- 정리
- 4장. 마이크로서비스 개념 적용
- 마이크로서비스 설계 가이드라인
- 마이크로서비스 경계 설정
- 통신 방식 설계
- 마이크로서비스 오케스트레이션
- 마이크로서비스 하나에 얼마나 많은 종단점을 둘 것인가?
- 가상머신 하나당 하나의 마이크로서비스 또는 다수의 마이크로서비스?
- 룰 엔진: 공유 또는 내장?
- BPM의 역할과 작업 흐름
- 마이크로서비스가 데이터 스토어를 공유할 수 있는가?
- 마이크로서비스는 화면이 꼭 필요한가?
- 트랜잭션 경계 설정
- 서비스 종단점 설계 고려 사항
- 공유 라이브러리 처리
- 마이크로서비스에서의 사용자 인터페이스
- 마이크로서비스의 게이트웨이 API
- ESB iPass 및 와 마이크로서비스의 사용
- 서비스 버저닝 고려 사항
- 크로스오리진 설계
- 공유 참조 데이터 처리
- 마이크로서비스와 대규모 데이터 작업
- 정리
- 마이크로서비스 설계 가이드라인
- 5장. 마이크로서비스 역량 모델
- 마이크로서비스 역량 모델
- 핵심 역량
- 서비스 리스너와 라이브러리
- 저장 기능
- 서비스 구현
- 서비스 종단점
- 인프라스트럭처 역량
- 클라우드
- 컨테이터 런타임
- 컨테이너 오케스트레이션
- 지원 역량
- 서비스 게이트웨이
- 소프트웨어 정의 로드 밸런서
- 중앙 집중형 로그 관리
- 서비스 탐색
- 보안 서비스
- 서비스 환경설정
- 운영 모니터링
- 의존 관계 관리
- 데이터 호수
- 신뢰성 메시징
- 프로세스 및 통제 역량
- 데브옵스
- 자동화 도구
- 컨테이너 레지스트리
- 마이크로서비스 문서화
- 참조 아키텍처 및 라이브러리
- 마이크로서비스 성숙도 모델
- 레벨 0: 전통 방식
- 레벨 1: 초급
- 레벨 2: 중급
- 레벨 3: 고급
- 마이크로서비스 도입을 위한 진입점
- 정리
- 6장. 마이크로서비스의 진화: 사례 연구
- PSS 애플리케이션의 이해
- 비즈니스 절차적 관점
- 기능적 관점
- 아키텍처 관점
- 설계 관점
- 구현 관점
- 배포 관점
- 일체형의 죽음
- 문제점
- 간극 메우기 중단
- 회고
- 마이크로서비스 구조대: 계획적 마이그레이션
- 비즈니스 사례
- 마이그레이션 방식
- 마이크로서비스 경계 식별
- 의존 관계 분석
- 마이그레이션을 위한 마이크로서비스 우선순위 지정
- 마이그레이션 중의 데이터 동기화
- 참조 데이터 관리
- 사용자 인터페이스와 웹 애플리케이션
- 테스트 전략
- 생태계 역량 구축
- 모듈 마이그레이션은 필요할 때만
- 마이크로서비스의 내부 계층 구조
- 마이크로서비스 오케스트레이션
- 다른 시스템과의 통합
- 공유 라이브러리 관리
- 예외 처리
- 구현 목표
- 프로젝트 구현
- 프로젝트 실행 및 테스트
- 심화 학습
- 정리
- PSS 애플리케이션의 이해
- 7장. 스프링 클라우드 컴포넌트를 활용한 마이크로서비스 확장
- 스프링 클라우드란?
- 스프링 클라우드 출시 버전
- 브라운필드 PSS 시스템 개발 환경설정
- 스프링 클라우드 컨피그컨피그 서버로 마이크로서비스 구축
- 컨피그 서버 설정
- 컨피서버 URL의 이해
- 환경설정 정보 변경 전파 및 반영
- 환경설정 변경을 전파하는 스프링 클라우드 버스
- 컨피그 서버에 고가용성 적용
- 컨피그 서버 상태 모니터링
- 컨피그 서버 환경설정 파일
- 컨피그 서버를 사용하는 환경설정 외부화 완성
- 유레카를 이용한 서비스 등록 및 탐색
- 동적 서비스 등록 및 발견의 이해
- 유레카의 이해
- 유레카 서버 구성
- 고가용성 유레카 서버
- 주울 프록시 API 게이트웨이
- 주울 설정
- 고가용성 주울
- 리액티브 마이브로서비스를 위한 스트림
- 스프링 클라우드 시큐리티를 활용한 마이크로서비스 보호
- 브라운필드 PSS 시스템 아키텍처 정리
- 정리
- 8장. 마이크로서비스 로깅 및 모니터링
- 로그 관리와 관련한 난제
- 중앙 집중형 로깅
- 로깅 솔루션
- 클라우드 서비스
- 내장 가능한 로깅 솔루션
- 최상의 조합
- 사용자 정의 로깅 구현
- 스프링 클라우드 슬루스로 분산 로그 추적
- 마이크로서비스 모니터링
- 모니터링 도전 과제
- 모니터링 도구
- 마이크로서비스 의존 관계 모니터링
- 장애를 견딜 수 있는 마이크로서비스를 위한 스프링 클라우드 히스트릭스
- 터바인을 통한 히스트릭스 스트림 통합
- 데이터 호수를 사용한 데이터 분석
- 정리
- 9장. 도커 컨테이너와 마이크로서비스
- 지금까지 만든 브라운필드 PSS 마이크로서비스의 한계
- 컨테이너란 무엇인가?
- 가상머신과 컨테이너의 차이
- 컨테이너의 장점
- 마이크로서비스와 컨테이너
- 도커 소개
- 도커 핵심 컴포넌트
- 마이크로서비스를 도커에 배포
- 도커에서 래빗엠큐 실행
- 도커 레지스트리 사용
- 도커 허브 구성
- 도커 허브에 마이크로서비스 퍼블리싱
- 클라우드에서의 마이크로서비스
- AWS EC2에 도커 설치
- EC2에서 브라운필드 서비스 실행
- 컨테이너화의 미래
- 정리
- 10장. 메소스와 마라톤을 이용한 도커화된 마이크로서비스 확장
- 마이크로서비스 확장
- 자동 확장 이해
- 잃어버린 조각
- 컨테이너 오케스트레이션
- 컨테이너 오케스트레이션 도구의 중요성
- 컨테이너 오케스트레이션 도구가 하는 일
- 마이크로서비스와의 관계
- 가상화와의 관계
- 컨테이너 오케스트레이션 솔루션
- 메소스와 마라톤을 이용한 컨테이너 오케스트레이션
- 메소스 자세히 알아보기
- DCOS로 메소스 마라톤 구현
- 브라운필드 마이크로서비스에 메소스와 마라톤 적용
- 메소스, 마라톤과 관련 컴포넌트 설치
- 메소스와 마라톤 실행
- 브라운필드 PSS 서비스 준비
- 브라운필드 PSS 서비스 배포
- 정리
- 마이크로서비스 확장
- 11장. 마이크로서비스 개발 라이프사이클
- 마이크로서비스 개발을 위한 사례
- 비즈니스 동기 및 가치에 대한 이해
- 프로젝트에서 제품 개발로의 사고방식 전환
- 개발 철학의 선택
- 실행 가능한 최소한의 제품 개념 활용(MVP)
- 레거시 난관 극복
- 자기 조직화 팀의 구성
- 셀프 서비스 클라우드 구축
- 마이크로서비스 생태계 구축
- 개발 라이프사이클 프로세스로서의 데브옵스
- 가치 주도 계획
- 지속적 모니터링과 피드백
- 개발 사이클 자동화
- 개발
- 통합
- 테스트
- 배포
- 모니터링과 피드백
- 설정 관리
- 마이크로서비스 개발 통제, 참조 아키텍처, 라이브러리
- 정리
- 마이크로서비스 개발을 위한 사례
도서 오류 신고
정오표
정오표
[p.95 : 2행]
메아븐(Maven)
->
메이븐(Maven)
[p.131 : 아래에서 2행]
Sprin Starter Project
->
Spring Starter Project
[p.161 : 하단 코드]
->
[p.202 : 이미지]
B) 비동기적 응답 - 요청
->
B) 비동기적 요청 - 응답
[p.203 : 이미지]
->