클라우드 네이티브 스프링 [클라우드 플랫폼을 위한 자바 마이크로서비스]
- 원서명Cloud-Native Applications in Java: Build microservice-based cloud-native applications that dynamically scale
- 지은이아제이 마하잔(Ajay Mahajan), 무니쉬 쿠마르 굽타(Munish Kumar Gupta), 시암 순다르(Shyam Sundar)
- 옮긴이박규태
- ISBN : 9791161752457
- 35,000원
- 2018년 11월 27일 펴냄
- 페이퍼백 | 464쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 소프트웨어 아키텍처
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
클라우드 네이티브 애플리케이션 개발은 쉽지 않다. 단순한 애플리케이션 하나라도 클라우드의 장점을 십분 활용할 수 있게 만들고 배포하려면 많은 배경지식과 기술이 필요하다. 이 책은 실용적인 예제를 점진적으로 발전시켜 나가면서 클라우드 네이티브 애플리케이션을 설계하고 구축하는 데 필요한 여러 가지 기술과 해법을 설명한다. AWS, Azure 등의 클라우드 플랫폼 활용법, API 디자인, 일체형 애플리케이션을 마이크로서비스로 분할하는 방법 등을 배울 수 있다.
추천의 글
배포 다이어그램을 보면 방화벽 외부의 인터넷은 구름 모양으로 그려져 있다. 나는 니콜라스 카(Nicholas G. Carr)가 쓴 『Big Switch』(W. W. Norton & Company, 2013)를 읽고 난 후에야 비로소 클라우드의 잠재력과 앞으로 올 것이 무엇인지 깨달았다. 지난 10년을 빠르게 보낸 지금에 와서는 두 번 생각할 필요도 없이 클라우드가 어디에나 있다는 것을 표현하기 위해 전체 시스템을 감싸는 구름 모양을 그리게 됐다. 클라우드 네이티브는 스타트업에서는 클라우드 네이티브가 익숙하지만, 많은 기업에서는 여전히 미지의 영역이다. 대기업 대부분은 데이터 센터 비용을 줄이거나 임대를 연장하지 않기 위해 가장 먼저 하는 일이기는 하지만, 리프트 앤 시프트를 수행하는 것만으로 클라우드를 올바르게 사용할 수는 없다. 클라우드의 강점은 비즈니스에 중요한 역할을 하는 클라우드 네이티브 애플리케이션을 구축해서 혁신적인 가치를 창출할 수 있을 때 확인할 수 있다. 따라서 나는 우리 팀이 더 똑똑한 클라우드 애플리케이션을 설계하고 구축하기 위해 연구하게 격려해 왔다.
무니쉬(Munish), 아제이(Ajay), 시암(Shyam)은 비즈니스 문제를 해결하기 위한 신기술을 항상 연구하고 개발해온 핵심 팀의 일원이다. 이들은 마이크로서비스를 사용하는 분산 시스템, 리액티브 프레임워크, 오픈소스, 컨테이너 기술(도커와 쿠버네티스) 등의 신기술에 초점을 맞춰 엔터프라이즈 트랜스포메이션 분야를 선도하는 전문가 및 컨설턴트다. 따라서 나는 다음 세대의 개발자들이 클라우드 네이티브 애플리케이션 개발을 빠르게 시작할 수 있도록 이 책의 저술을 권했다.
이 책은 클라우드용 애플리케이션을 이해하고 설계하고 만드는 데 필요한 단계별 접근 방법을 사용한다. 저자들은 개념부터 시작해서 작은 REST 서비스를 구축하고, 이어서 클라우드 네이티브로 서비스를 개선하는 점진적인 방식으로 독자들을 이끈다.
분산 아키텍처에서 서비스를 검색하는 방법이나 서비스 검색 도구가 수행하는 역할과 같은 클라우드 특유의 다양한 측면을 다룬다. 애플리케이션을 AWS나 Azure 같은 공개 클라우드로 마이그레이션하는 방법을 배우고, AWS Lamda 및 Google Cloud Functions 같은 서버리스 컴퓨팅 모델도 다룬다.
이 책을 최대한 활용해 클라우드 환경에서의 애플리케이션 개발을 선도하길 바란다.
/하리 키산 부를리(Hari Kishan Burle), 위프로 리미티드(Wipro Limited)의 부사장 겸 아키텍처 서비스 글로벌 책임자
이 책에서 다루는 내용
■ 가변성, 프로비저닝, 도구 지원 측면에서 클라우드 환경의 장점
■ 클라우드에서 개발할 때 필요한 아키텍처 패턴 및 고려할 사항
■ 요청 라우팅, RESTful 서비스 생성, 이벤트 소싱 등의 클라우드 네이티브 기술/패턴 사용법
■ 마이크로서비스를 위한 도커 컨테이너 생성과 젠킨스를 이용한 지속적인 통합 환경 설정
■ 컨테이너화를 위해 도커와 쿠버네티스 등의 도구 검토
■ AWS와 Azure 전용 도구를 사용한 애플리케이션 설계, 개발, 배포, 관리 방법
이 책의 대상 독자
클라우드 기반 환경에 배포하기 위한 복원력 있고 견고하며, 확장성 있는 애플리케이션을 구축하려는 자바 개발자에게 유용하다. 자바, 스프링, 웹 프로그래밍, AWS 및 Azure 같은 공개 클라우드 플랫폼을 경험해봤다면 이 책을 충분히 이해할 수 있다.
이 책의 구성
1장. ‘클라우드 네이티브 소개’에서는 클라우드 네이티브 애플리케이션이 필요한 이유를 설명한다. 클라우드 플랫폼으로 이동하는 이유는 무엇인가? 클라우드 개발 및 배포가 일반 애플리케이션과 다른 이유는 무엇인가? 클라우드 애플리케이션의 12가지 요소는 무엇인가?
2장. ‘첫 번째 클라우드 네이티브 애플리케이션’에서는 애플리케이션을 마이크로서비스 방식으로 설계할 때의 핵심 개념을 설명한 후 이 책을 진행하면서 점점 살을 붙여 나갈 예제 프로젝트를 소개한다. 또한 마이크로서비스 애플리케이션 개발을 위해 스프링 부트를 사용하는 방법과 클라우드 네이티브 애플리케이션을 개발할 때 사용하는 마이크로서비스 원칙을 알아본다.
3장. ‘클라우드 네이티브 애플리케이션 설계’에서는 클라우드 네이티브 애플리케이션을 설계할 때 고려할 몇 가지 고급 아키텍처 문제를 다룬다. 여기에는 이벤트 기반 아키텍처, 코레오그래피를 이용한 디커플링, 경계가 있는 컨텍스트와 같은 도메인 주도 설계(DDD) 개념 등이 포함된다. 시스템 중심의 서비스 정의 대신, 클라우드에서 개발하고 고객 중심 API를 제공하는 데 필요한 아키텍처 패턴과 고려할 사항을 알아본다.
4장. ‘클라우드 네이티브 애플리케이션 확장’에서는 다양한 스택, 원칙, 지원 컴포넌트를 사용해 애플리케이션을 만드는 방법을 자세히 알아본다. 서비스 구현에 필요한 패턴을 다루며, 클라우드 개발에 상당한 영향을 미치는 오류 처리, CQRS, 캐싱 등의 다양한 측면을 설명한다.
5장. ‘클라우드 네이티브 애플리케이션 테스트’에서는 마이크로서비스를 테스트하는 방법과 행위 주도 개발에서의 테스트 작성 방법을 알아본다.
6장. ‘클라우드 네이티브 애플리케이션 배포’에서는 도커 컨테이너 배포를 위한 애플리케이션 패키징 방법, CI/CD 파이프라인을 설정하는 방법을 비롯한 마이크로서비스 배포 모델을 자세히 살펴본다.
7장. ‘클라우드 네이티브 애플리케이션 런타임’에서는 서비스 런타임을 다룬다. 구성 서버를 이용해 구성을 외부화하는 방법과 주울을 프론트엔드로 배치하는 방법을 알아보며, 피보탈 클라우드 파운드리에 관해 설명하고, PCF Dev에 서비스를 배포하는 방법을 알아본다. 컨테이너 오케스트레이션 또한 다룬다.
8장. ‘AWS 플랫폼에 배포’에서는 AWS 환경을 설명하고, 이전 장에서 설명한 개념(레지스트리, 구성, 로그 집계, 비동기 메시징)을 바탕으로 클라우드 개발을 하기 위한 AWS 고유의 도구를 설명한다.
9장. ‘Azure 플랫폼에 배포’에서는 Azure 환경을 설명하고, 클라우드 개발을 하기 위한 Service Fabric, Azure Functions 등의 Azure 고유의 도구를 설명한다.
10장. ‘서비스 통합’에서는 IaaS, PaaS, iPaaS, DBaaS를 비롯한 다양한 유형의 XaaS를 설명하고, 인프라 요소를 서비스로 노출하는 방법을 알아본다. 클라우드 네이티브 모드에서는 애플리케이션을 소셜 미디어 API나 PaaS API와 통합하거나 다른 애플리케이션에서 사용할 서비스를 호스팅할 수 있다. 또한 다른 외부 서비스를 연결해서 사용하거나 직접 서비스를 제공하는 방법을 설명한다.
11장. ‘API 디자인 모범 사례에서는 기능 지향적이고 세분화된 사용자 중심의 API를 설계하는 방법을 설명한다. 또한 API 수준 또는 서비스에서의 오케스트레이션 수행 여부, 무료 API 모델을 만드는 방법, 서비스가 채널에 구애받지 않도록 API 계층에서 채널과 관련된 문제를 해결하는 방법, 보안을 고려한 API 설계 등 API 설계에 대한 다양한 모범 사례를 설명한다.
12장. ‘디지털 트랜스포메이션’에서는 클라우드 개발이 기존 기업 환경에 미치는 영향과 클라우드를 이용해 디지털 엔터프라이즈로 성공적으로 전환하는 방법을 설명한다.
목차
목차
- 1장. 클라우드 네이티브 소개
- 클라우드 네이티브가 필요한 이유
- 클라우드 네이티브란?
- 클라우드 플랫폼으로 이동
- 클라우드 네이티브로 이동
- 서버 리스로 이동
- 클라우드 네이티브와 마이크로서비스
- 클라우드 애플리케이션의 12가지 요소
- 마이크로서비스 실행을 위한 서비스 생태계
- 마이크로서비스 도입
- 일체형 애플리케이션 변환
- 요약
- 2장. 첫 번째 클라우드 네이티브 애플리케이션
- 개발 도구 설정
- IDE 선택
- 인터넷 연결 설정
- 개발 생명주기의 이해
- 요구 사항/사용자 스토리
- 아키텍처
- 설계
- 테스트와 개발
- 구축과 배포
- 프레임워크 선택
- 드롭위자드
- 버텍스
- 스프링 부트
- product 서비스 작성
- 메이븐 프로젝트 생성
- 스프링 부트 애플리케이션 클래스 작성
- 서비스 및 도메인 객체 작성
- 서비스 실행
- 브라우저에서의 서비스 테스트
- 배포본 생성
- 기본적인 클라우드 네이티브 기능 추가
- 구성 외부화
- 서비스 미터링(metering)
- 서비스 등록과 검색
- 요약
- 개발 도구 설정
- 3장. 클라우드 네이티브 애플리케이션 설계
- 트리오: REST, HTTP, JSON
- API의 발달과 유행
- API 게이트웨이의 역할
- API 게이트웨이의 장점
- 애플리케이션 분리
- 경계가 있는 컨텍스트/도메인 주도 설계
- 업스트림 및 다운스트림 서비스 분류
- 비즈니스 이벤트
- 마이크로서비스 식별
- 마이크로서비스와 서비스지향 아키텍처의 차이점
- 서비스 분류
- 마이크로서비스 설계 지침
- 디자인 및 배포 패턴
- 마이크로서비스를 위한 데이터 아키텍처
- 명령 조회 책임 분리
- 데이터 복제
- 목적에 맞춘 선택
- 서비스 보안
- 요약
- 4장. 클라우드 네이티브 애플리케이션 확장
- 제품 조회 서비스 구현
- 간단한 제품 테이블
- 캐싱
- 분산 캐시
- 데이터 모델과 서비스를 분리하기 위해 CQRS 적용
- 데이터 업데이트 서비스
- REST 규약
- 유효성 검사와 오류 메시지
- CQRS 패턴의 데이터 업데이트 구현
- 비동기 메시징
- 골든 소스 업데이트
- 데이터 업데이트 시 이벤트 발생
- 쿼리 모델 업데이트
- 요약
- 제품 조회 서비스 구현
- 5장. 클라우드 네이티브 애플리케이션 테스트
- 개발 전에 테스트 케이스 작성
- TDD
- BDD
- 테스트 패턴
- A/B 테스트
- 테스트 더블
- 테스트 유형
- 단위 테스트
- 통합 테스트
- 부하 테스트
- 회귀 테스트
- 코드 리뷰와 커버리지
- 제품 서비스 테스트
- 큐컴버를 이용한 BDD
- 스프링 부트 테스트
- JaCoCo를 이용한 코드 커버리지
- 요약
- 개발 전에 테스트 케이스 작성
- 6장. 클라우드 네이티브 애플리케이션 배포
- 배포 모델
- 가상화
- PaaS
- Containers
- 도커 이미지 빌드
- 배포 패턴
- 블루/그린 배포
- 카나리아 배포
- 은밀한 개시
- 자동화를 위한 CI/CD 적용
- 배포 모델
- 요약
- 7장. 클라우드 네이티브 애플리케이션 런타임
- 런타임의 필요성
- 참조 런타임 아키텍처 구현
- 서비스 레지스트리
- 컨피그 서버
- 마이크로서비스의 프론트엔드
- 쿠버네티스: 컨테이너 오케스트레이션
- 쿠버네티스 아키텍처와 서비스
- Minikube
- 쿠버네티스에서 product 서비스 실행
- 서비스로서의 플랫폼
- PaaS의 사례
- 클라우드 파운드리
- 피보탈 클라우드 파운드리
- 요약
- 8장. AWS 플랫폼에 배포
- AWS 플랫폼
- AWS 플랫폼의 배포 옵션
- Beanstalk에 스프링 부트 API 배포
- Amazon Elastic Container Registry에 컨테이너 이미지 푸시
- ECS에 스프링 부트 애플리케이션 배포
- AWS Lambda에 배포
- 요약
- 9장. Azure 플랫폼에 배포
- Azure 플랫폼
- Azure 플랫폼의 배포 옵션
- Azure App Service에 스프링 부트 API 배포
- Azure Container Service에 도커 컨테이너 배포
- Azure Service Fabric에 스프링 부트 API 배포
- Azure Function
- 요약
- 10장. 서비스 통합
- XaaS
- XaaS 구축 시의 주요 설계 고려 사항
- 서드파티 API와의 통합
- 요약
- 11장. API 디자인 모범 사례
- API 디자인
- API 리소스 식별
- API 설계 지침
- API 모델링
- Open API
- RESTful API 모델링 언어(RAML)
- API 게이트웨이 배포 모델
- 요약
- API 디자인
- 12장. 디지털 트랜스포메이션
- 애플리케이션 포트폴리오
- 포트폴리오 분석: 비즈니스 및 기술 요소
- 일체형 애플리케이션을 분산형 클라우드 네이티브 애플리케이션으로 변경
- 일체형 애플리케이션을 분산형 애플리케이션으로 변환
- 고객 여정을 도메인 주도 디자인으로 매핑
- 아키텍처 런웨이 정의
- 개발자 빌드
- 일체형 애플리케이션 분해
- 변환 과정 정리
- 자체 플랫폼 서비스 구축(제어 혹은 위임)
- 요약
- 애플리케이션 포트폴리오