스프링으로 하는 마이크로서비스 구축 2/e - 에이콘 소프트웨어 아키텍처 시리즈

스프링으로 하는 마이크로서비스 구축 2/e - 에이콘 소프트웨어 아키텍처 시리즈

$48.03
저자

매그너스라슨

저자:매그너스라슨(MagnusLarsson)
35년이상IT산업에종사했으며볼보(Volvo),에릭슨(Ericsson),아스트라제네카(AstraZeneca)등스웨덴대기업의컨설턴트로일하고있다.예전에겪었던분산시스템과관련된어려운문제를스프링클라우드,쿠버네티스,이스티오등의오픈소스도구를이용해해결하고있다.지난몇년동안고객이이런도구를사용하도록도왔고해당주제에대해여러번발표했으며블로그게시물도작성했다.

역자:박규태
엔터프라이즈자바환경에서오랫동안일했다.CMS,웹오피스,쿠버네티스기반GPU플랫폼을개발했으며,지금은OpenTelemetry기반모니터링솔루션을개발하고있다.

목차


1부.스프링부트를사용한마이크로서비스개발

1장.마이크로서비스소개
__기술요구사항
__내마이크로서비스경험
____독립소프트웨어컴포넌트의장점
____독립소프트웨어컴포넌트의문제
____마이크로서비스입문
____샘플마이크로서비스환경
__마이크로서비스정의
__마이크로서비스의문제
__마이크로서비스디자인패턴
____서비스검색
____에지서버
____리액티브마이크로서비스
____구성중앙화
____로그분석중앙화
____분산추적
____서킷브레이커
____제어루프
____모니터링및경고중앙화
__필수소프트웨어
__다른주요고려사항
__요약

2장.스프링부트소개
__기술요구사항
__스프링부트
____설정보다관례와팻JAR파일
____스프링부트애플리케이션설정에대한코드예제
__스프링웹플럭스
____REST서비스설정에대한코드예제
__springdoc-openapi
__스프링데이터
____엔티티
____리포지터리
__스프링클라우드스트림
____메시지송수신에대한코드예제
__도커
__요약
__질문

3장.공조마이크로서비스집합생성
__기술요구사항
__마이크로서비스환경소개
____마이크로서비스가처리하는정보
____임시로검색서비스대체
__골격마이크로서비스생성
____스프링이니셜라이저로골격코드생성
____그래들에멀티프로젝트빌드설정
__RESTfulAPI추가
____api프로젝트와util프로젝트추가
____API구현
__복합마이크로서비스추가
____API클래스
____속성
____통합컴포넌트
____복합API구현
__예외처리추가
____전역REST컨트롤러예외핸들러
____API구현의예외처리
____API클라이언트의예외처리
__API수동테스트
__자동화된마이크로서비스테스트
__반자동화된마이크로서비스환경테스트
____테스트스크립트실행
__요약
__질문

4장.도커를사용한마이크로서비스배포
__기술요구사항
__도커소개
____첫도커커맨드실행
__도커에서자바를실행할때의문제
____사용가능한CPU제한
____사용가능한메모리제한
__도커로단일마이크로서비스실행
____소스코드변경
____도커이미지빌드
____서비스시작
____컨테이너를분리모드로실행
__도커컴포즈를사용한마이크로서비스환경관리
____소스코드변경
____마이크로서비스환경시작
__공조마이크로서비스의테스트자동화
____테스트실행문제해결
__요약
__질문

5장.OpenAPI를사용한API문서화
__기술요구사항
__springdoc-openapi소개
__소스코드변경
____그래들빌드파일에의존성추가
____ProductCompositeServiceApplication에구성과API정보추가
____ProductCompositeService인터페이스에API정보추가
__마이크로서비스환경구축및시작
__OpenAPI문서사용법
__요약
__질문

6장.영속성추가
__기술요구사항
__목표
__핵심마이크로서비스에영속성계층추가
____의존성추가
____엔티티클래스를사용해데이터저장
____스프링데이터리포지터리정의
__영속성에중점을둔자동테스트작성
____Testcontainers사용법
____영속성테스트작성
__서비스계층에서영속성계층사용
____데이터베이스연결URL기록
____새API추가
____서비스계층에서영속성계층호출
____자바빈매퍼선언
____서비스테스트업데이트
__복합서비스API확장
____복합서비스API에새오퍼레이션추가
____통합계층에메서드추가
____새복합API오퍼레이션구현
____복합서비스테스트업데이트
__도커컴포즈환경에데이터베이스추가
____도커컴포즈구성
____데이터베이스연결구성
____MongoDB및MySQLCLI도구
__새API및영속성계층의수동테스트
__마이크로서비스환경의자동테스트업데이트
__요약
__질문

7장.리액티브마이크로서비스개발
__기술요구사항
__논블로킹동기API와이벤트기반비동기서비스의선택기준
__논블로킹동기RESTAPI개발
____프로젝트리액터소개
____스프링데이터MongoDB를사용한논블로킹영속성
____핵심서비스의논블로킹RESTAPI
____복합서비스의논블로킹RESTAPI
__이벤트기반비동기서비스개발
____메시징관련문제처리
____토픽및이벤트정의
____그래들빌드파일변경
____핵심서비스에서이벤트소비
____복합서비스에서이벤트게시
__리액티브마이크로서비스환경의수동테스트
____이벤트저장
____상태점검API추가
____파티션없이RabbitMQ사용
____파티션을추가해RabbitMQ사용
____토픽당2개의파티션으로카프카사용
__리액티브마이크로서비스환경의자동테스트
__요약
__질문

2부.스프링클라우드를활용한마이크로서비스관리

8장.스프링클라우드소개
__기술요구사항
__스프링클라우드의진화
__넷플릭스유레카를검색서비스로사용
__스프링클라우드게이트웨이를에지서버로사용
__구성중앙화를위해스프링클라우드컨피그사용
__복원력향상을위해Resilience4j사용
____Resilience4j를사용한서킷브레이커샘플
__스프링클라우드슬루스와집킨을사용한분산추적
__요약
__질문

9장.넷플릭스유레카를사용한서비스검색
__기술요구사항
__서비스검색소개
____DNS기반서비스검색의문제
____서비스검색의문제
____넷플릭스유레카를이용한서비스검색
__넷플릭스유레카서버설정
__넷플릭스유레카서버에마이크로서비스연결
__개발용구성설정
____유레카구성매개변수
____유레카서버구성
____유레카서버에연결할클라이언트구성
__검색서비스사용
____확장
____축소
____유레카서버의장애상황테스트
__유레카서버다시시작
__요약
__질문

10장.스프링클라우드게이트웨이를에지서버로사용
__기술요구사항
__시스템환경에에지서버추가
__스프링클라우드게이트웨이설정
____복합상태점검추가
____스프링클라우드게이트웨이구성
__에지서버테스트
____도커엔진외부로공개되는항목확인
____라우팅규칙테스트
__요약
__질문

11장.API접근보안
__기술요구사항
__OAuth2.0및OpenIDConnect소개
____OAuth2.0소개
____OpenIDConnect소개
__시스템환경보안
__HTTPS를사용한외부통신보호
____런타임에자체서명인증서교체
__검색서비스접근보안
____유레카서버변경
____유레카클라이언트변경
__로컬권한부여서버추가
__OAuth2.0과OpenIDConnect를사용한API보안
____에지서버와product-composite서비스변경
____product-composite서비스변경
____테스트스크립트변경
__로컬권한부여서버를사용한테스트
____자동테스트빌드및실행
____검색서버보안테스트
____접근토큰획득
____접근토큰을사용해보안API호출
____스웨거UI에서OAuth2.0테스트
__외부OpenIDConnect공급자를사용한테스트
____Auth0사용자계정의설정및구성
____Auth0를OpenID공급자로사용하기위해필요한변경사항적용
____Auth0를OpenIDConnect공급자로사용해테스트스크립트실행
____클라이언트자격증명승인흐름을사용해접근토큰획득
____권한코드승인흐름을사용해접근토큰획득
____Auth0접근토큰을사용해보안API호출
____사용자에대한추가정보획득
__요약
__질문

12장.구성중앙화
__기술요구사항
__스프링클라우드컨피그서버소개
____구성저장소의저장유형선택
____클라이언트가먼저접속할서버결정
____구성보안
____구성서버API소개
__구성서버설정
____에지서버에라우팅규칙설정
____도커환경을위한구성서버설정
__구성서버의클라이언트설정
____연결정보구성
__구성저장소구조화
__스프링클라우드컨피그서버사용
____빌드및자동화테스트실행
____구성서버API로구성조회
____민감한정보의암호화및해독
__요약
__질문

13장.Resilience4j를사용한복원력개선
__기술요구사항
__Resilience4j의복원메커니즘소개
____서킷브레이커소개
____시간제한기소개
____재시도메커니즘소개
__소스코드에복원력메커니즘추가
____프로그래밍방식으로지연및무작위오류추가
____서킷브레이커및시간제한기추가
____재시도메커니즘추가
____자동테스트추가
__서킷브레이커및재시도메커니즘테스트
____빌드및자동화테스트실행
____정상적인요청만유입될때서킷이닫혀있는지확인
____문제가발생했을때서킷이열리는지확인
____서킷브레이커다시닫기
____무작위오류로재시도메커니즘테스트
__요약
__질문

14장.분산추적
__기술요구사항
__스프링클라우드슬루스와집킨을사용한분산추적
__소스코드에분산추적추가
____빌드파일에의존성추가
____스프링클라우드슬루스및집킨에대한구성추가
____도커컴포즈파일에집킨추가
__분산추적수행
____RabbitMQ를대기열관리자로사용해시스템환경시작
____정상적인API요청전송
____

출판사 서평

◈이책에서다루는내용◈

스프링부트를사용한리액티브마이크로서비스구축
스프링클라우드를사용해복원력및확장성있는마이크로서비스개발
스프링시큐리티및OAuth2.1/OIDC를사용해공개API보호
도커를사용해개발,테스트환경과상용환경사이의격차해소
쿠버네티스를사용한마이크로서비스배포및관리
이스티오를사용한보안성,관찰가능성,트래픽관리편의성향상
JUnit,Testcontainers,그래들(Gradle),배시(Bash)를사용해자동화된마이크로서비스테스트작성및실행

이책의대상독자

쿠버네티스를컨테이너오케스트레이터(containerorchestrator)로사용하고이스티오를서비스메시(servicemesh)로사용해,기반마이크로서비스환경을구축하고온프레미스(onpremise)나클라우드로배포하는방법을배우려는자바,스프링개발자와아키텍트를위한책이다.마이크로서비스아키텍처(microservicearchitecture)에익숙하지않더라도문제없이읽을수있다.

이책의구성

1장,‘마이크로서비스소개’에서는이책의기본전제인마이크로서비스의필수개념과디자인패턴을설명한다.

2장,‘스프링부트소개’에서는스프링부트와책의앞부분에서사용할오픈소스프로젝트를소개한다.RESTfulAPI개발에사용하는스프링웹플럭스,OpenAPI기반API문서를생성하는springdoc-openapi,SQL및NoSQL데이터베이스에데이터를저장할때사용하는스프링데이터,메시지기반의마이크로서비스에서사용하는스프링클라우드스트림,마이크로서비스를컨테이너로실행하는도커등을소개한다.

3장,’공조마이크로서비스집합’에서는생성공조마이크로서비스집합을생성하는방법을설명한다.스프링이니셜라이저(SpringInitializr)를사용해스프링프레임워크5.3및스프링부트2.5기반의골격프로젝트를생성하고세가지핵심서비스를만든다.또한세가지핵심서비스에서얻은정보를집계해복합적결과를만드는복합서비스도만든다.3장의뒷부분에선스프링웹플럭스(SpringWebFlux)를기반으로기본적인RESTfulAPI를추가하는방법을배우며,4장에서는더많은기능을마이크로서비스에추가한다.

4장,‘도커를사용한마이크로서비스배포’에서는도커를사용해마이크로서비스를배포하는방법을설명한다.Dockerfile이나docker-compose파일을이용해전체마이크로서비스환경을하나의커맨드로시작하는방법을배우고,여러스프링프로필을사용해도커용구성과이외의구성을분리해서처리하는방법도살펴본다.

5장,‘OpenAPI를사용한API문서화’에서는OpenAPI를사용해,마이크로서비스에서공개하는API를빠르게문서화하는방법을배운다.서비스코드에붙인애노테이션(annotation)을검사해OpenAPI기반의API문서를생성하는springdoc-openapi와웹브라우저에서API를테스트하는스웨거UI(SwaggerUI)를사용해본다.

6장,‘영속성추가’에서는마이크로서비스데이터에영속성을부여하는방법을배운다.스프링데이터를사용해두핵심마이크로서비스의데이터를문서데이터베이스인MongoDB에저장및접근하게하고,나머지마이크로서비스의데이터는관계형데이터베이스인MySQL에두고접근하게한다.통합테스트를실행할때는Testcontainers를사용해데이터베이스를시작한다.

7장,‘리액티브마이크로서비스개발’에서는리액티브(reactive)방식을사용해야하는이유와사용시기,종단간(end-to-end)리액티브서비스를개발하는방법을배운다.논블로킹(non-blocking)동기방식RESTfulAPI,이벤트기반비동기방식서비스를개발하고테스트하는방법도배운다.또한MongoDB용리액티브논블로킹드라이버사용방법과일반적인MySQL용블로킹코드사용방법을배운다.

8장,‘스프링클라우드소개’에서는이책에서사용하는스프링클라우드및스프링클라우드컴포넌트를소개한다.

9장,‘넷플릭스유레카를사용한서비스검색’에서는스프링클라우드에넷플릭스유레카(NetflixEureka)를사용해서비스검색기능을추가하는방법을알아본다.즉넷플릭스유레카기반의서비스검색서버를시스템환경에추가하고,스프링클라우드로드밸런서(LoadBalancer)를사용해다른마이크로서비스를찾도록마이크로서비스를구성한다.또한자동으로마이크로서비스를등록하는방법과스프링클라우드로드밸런서를통해전달된트래픽을활성화된새인스턴스로자동로드밸런싱하는방법을배운다.

10장,‘스프링클라우드게이트웨이를에지서버로사용’에서는스프링클라우드게이트웨이를사용해마이크로서비스를에지서버(edgeserver)뒤로숨기고,골라낸일부API만외부소비자에게공개하는방법을배운다.또한외부소비자가볼수없도록마이크로서비스내부의복잡성을숨기는방법을살펴본다.즉스프링클라우드게이트웨이기반의에지서버를시스템환경에추가하고공개API만노출하도록에지서버를구성한다.

11장,‘API접근보안’에서는OAuth2.0및OpenIDConnect를사용해공개API를보호하는방법을설명한다.SpringAuthorizationServer기반의OAuth2.0권한서버를시스템환경에추가하는방법과해당권한서버에서발급한유효한접근토큰을가진클라이언트만에지서버와복합서비스에접근할수있도록구성하는방법을배운다.또한에지서버를통해권한부여서버를공개하고HTTPS를사용해외부소비자와의통신을보호하는방법을알아본다.마지막으로,내부OAuth2.0인증서버를외부OpenIDConnect공급자인Auth0로교체하는방법을배운다.

12장,‘구성중앙화’에서는하나의중앙구성저장소에서모든마이크로서비스의구성파일을가져오고,구성서버를사용해런타임(runtime)에마이크로서비스로구성을배포하는방법을배운다.또한시스템환경에스프링클라우드컨피그서버(SpringCloudConfigServer)를추가하고스프링컨피그서버(SpringConfigServer)에서구성을가져오도록마이크로서비스를구성하는방법을살펴본다.

13장,‘Resilience4j를사용한복원력개선’에서는Resilience4j의기능을이용해연쇄장애(chainoffailure)같은안티패턴(anti-pattern)을방지하는방법을설명하며,복합서비스에재시도메커니즘과서킷브레이커(circuitbreaker)를추가하는방법을배운다.서킷이열려있을때빠른실패로직이작동하도록서킷브레이커를구성하는방법과폴백메서드(fallbackmethod)를사용해최적화된응답을생성하는방법도배운다.

14장,‘분산추적’에서는집킨(Zipkin)을사용해추적정보를수집하고시각화하는방법을설명한다.또한스프링클라우드슬루스(SpringCloudSleuth)로요청에추적ID를추가해공조마이크로서비스간의요청체인을시각화하는방법을배운다.

15장,‘쿠버네티스소개’에서는쿠버네티스의핵심개념과샘플디플로이먼트(sampledeployment)생성방법을설명한다.미니큐브(Minikube)를사용해개발및테스트용도의쿠버네티스를로컬에설치하는방법을배운다.

16장,‘쿠버네티스에마이크로서비스배포’에서는쿠버네티스에마이크로서비스를배포하는방법을설명하며,헬름(Helm)을사용해쿠버네티스에배포할마이크로서비스를패키징하고구성하는방법을배운다.테스트환경,상용환경등다양한런타임환경에헬름을사용해마이크로서비스를배포한다.또한쿠버네티스서비스객체와kube-proxy런타임컴포넌트를기반으로하는,쿠버네티스에내장된서비스검색기능으로넷플릭스유레카를대체하는방법을배운다.

17장,‘쿠버네티스로기존시스템환경대체’에서는앞에서소개한스프링클라우드서비스를쿠버네티스기능으로대체하는방법을설명한다.스프링클라우드컨피그서버를쿠버네티스시크릿과컨피그맵(ConfigMap)으로대체하는이유와방법을배운다.또한스프링클라우드게이트웨이를쿠버네티스인그레스(KubernetesIngress)객체로대체하는방법과cert-manager를사용해외부HTTPS엔드포인트를위한인증서를자동으로프로비저닝하고갱신하는방법을배운다.

18장,‘서비스메시를사용해관찰가능성및관리편의성개선’에서는서비스메시개념을소개하고이스티오를사용해쿠버네티스에서비스메시를구현하는방법을설명한다.서비스메시를사용해마이크로서비스환경의복원력,보안,트래픽관리,관찰가능성을향상하는방법을배운다.

19장,‘EFK스택을사용한로깅중앙화’에서는일래스틱서치(Elasticsearch),플루언티드(Fluentd),키바나(Kibana)를사용해마이크로서비스의로그스트림(logstream)을수집,저장,시각화하는방법을설명한다.미니큐브에EFK스택을배포하는방법과EFK스택으로수집한로그레코드를분석하는방법,여러마이크로서비스가관련된요청을처리하면서발생하는마이크로서비스로그출력을찾는방법을배운다.또한EFK스택을사용해근본원인분석을수행하는방법을알아본다.

20장,‘마이크로서비스모니터링’에서는프로메테우스와그라파나를이용해쿠버네티스에배포된마이크로서비스를모니터링하는방법을설명한다.기존그라파나대시보드를활용해다양한유형의메트릭을모니터링하는방법과직접대시보드를만드는방법을배운다.마지막으로,그라파나에서특정메트릭에임곗값을구성하고,이를초과하면이메일을전송하는경고를생성하는방법을배운다.

21장,‘맥OS용설치지침’에서는맥OS(MacOS)에이책에서사용하는도구를설치하는방법을설명한다.

22장,‘윈도우용설치지침’에서는윈도우PC에리눅스용윈도우하위시스템v2(WSL2,WindowsSubsystemforLinux2)를사용해이책에서사용하는도구를설치하는방법을설명한다.

23장,‘자바마이크로서비스의네이티브컴파일’에서는스프링네이티브(SpringNative)베타버전과그랄VM네이티브이미지컴파일러(GraalVMnative-imagecompiler)를사용해스프링기반마이크로서비스를네이티브코드로컴파일하는방법을설명한다.자바VM(JavaVirtualMachine)기반마이크로서비스보다시작속도가월등히빠른마이크로서비스를생성할수있다.

각장의말미에는해당장에서다루는내용을정리하는데도움이되는간단한질문이몇개씩있다.질문에대한답은깃허브저장소에있는Assessments파일에있다.

지은이의말

스프링부트와스프링클라우드를사용해상용마이크로서비스를구축하는방법을설명하는책이다.내가처음마이크로서비스학습을시작한8년전에바로이런책을찾아헤맸다.

나는공조마이크로서비스환경을개발,테스트,배포,관리할때사용하는오픈소스소프트웨어를학습하고익숙해진후에이책을썼다.

주로스프링부트,스프링클라우드,도커,쿠버네티스,이스티오,EFK스택(Elasticsearch,Fluentd,Kibanastack),프로메테우스(Prometheus),그라파나(Grafana)에대해다룬다.이런오픈소스도구는개별적으로는훌륭하게작동하지만,여러도구를어떤방식으로조합하는게좋을