◈이책에서다루는내용◈
스프링부트를사용한리액티브마이크로서비스구축
스프링클라우드를사용해복원력및확장성있는마이크로서비스개발
스프링시큐리티및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)에대해다룬다.이런오픈소스도구는개별적으로는훌륭하게작동하지만,여러도구를어떤방식으로조합하는게좋을