토마스비탈레
저자:토마스비탈레(ThomasVitale)
복원력있고안전한클라우드네이티브엔터프라이즈애플리케이션구축을전문으로하는소프트웨어엔지니어이자아키텍트다.덴마크의Systematic에서소프트웨어설루션의설계및개발을담당하고있으며,개발자경험과보안에중점을두고클라우드네이티브환경을위한플랫폼및애플리케이션현대화작업을해왔다.주요관심사및전문분야는자바,스프링부트,쿠버네티스,케이네이티브및클라우드네이티브기술전반이다.지속적전달관행을지지하며함께협력하는협업문화를통해사용자,고객,비즈니스에가치를제공할수있다고믿고있으며,스프링보안및스프링클라우드와같은오픈소스프로젝트에기여하고커뮤니티에서지식을나누는것도좋아한다.
역자:차건회
현재미국로스앤젤레스에있는ShellRechargeSolutions에서자바백엔드테크리드로일하고있다.자바,스프링부트,메시지큐,일래스틱서치,레디스등자바백엔드의전반적인기술스택및성능향상에관심이있다.옮긴책으로는《크리에이티브프로그래머》(한빛미디어,2023),《좋은코드,나쁜코드》,《프로그래머의뇌》(이상제이펍,2022)가있다.
옮긴이머리말xv
베타리더후기xviii
추천서문(조시롱)xx
머리말xxii
감사의글xxiv
이책에대하여xxvi
표지에대하여xxxii
PARTI클라우드네이티브개요
CHAPTER1클라우드네이티브소개3
1.1클라우드네이티브란무엇인가?5
__1.1.1클라우드네이티브에서의세가지P5
1.2클라우드와클라우드컴퓨팅모델6
__1.2.1서비스형인프라스트럭처9/1.2.2서비스형컨테이너9/1.2.3서비스형플랫폼10/1.2.4서비스형함수10/1.2.5서비스형소프트웨어11
1.3클라우드네이티브애플리케이션의특성11
__1.3.1확장성12/1.3.2느슨한결합13/1.3.3복원력15/1.3.4관측가능성16/1.3.5관리용이성17
1.4클라우드네이티브를지원하는문화및관행18
__1.4.1자동화19/1.4.2지속적전달21/1.4.3데브옵스22
1.5클라우드가최선의선택인가?24
__1.5.1속도25/1.5.2복원력26/1.5.3확장성27/1.5.4비용27
1.6클라우드네이티브구성28
__1.6.1컨테이너29/1.6.2오케스트레이션32/1.6.3서버리스33
1.7클라우드네이티브애플리케이션을위한아키텍처35
__1.7.1다중계층에서마이크로서비스아키텍처까지그리고그이후36/1.7.2클라우드네이티브애플리케이션을위한서비스기반아키텍처38
요약40
CHAPTER2클라우드네이티브패턴및기술42
2.1클라우드네이티브개발원칙:12요소와확장43
__2.1.1하나의코드베이스,하나의애플리케이션44/2.1.2API우선44/2.1.3의존성관리44/2.1.4설계,빌드,릴리스,실행45/2.1.5설정,크리덴셜및코드45/2.1.6로그46/2.1.7일회성46/2.1.8지원서비스47/2.1.9환경동일성47/2.1.10관리프로세스47/2.1.11포트바인딩48/2.1.12상태를갖지않는프로세스48/2.1.13동시성49/2.1.14원격측정49/2.1.15인증및승인49
2.2스프링을사용한클라우드네이티브애플리케이션구축50
__2.2.1스프링개요50/2.2.2스프링부트애플리케이션구축51
2.3도커를통한애플리케이션컨테이너화62
__2.3.1도커소개:이미지및컨테이너63/2.3.2컨테이너를통한스프링애플리케이션의실행66
2.4쿠버네티스로컨테이너관리68
__2.4.1쿠버네티스소개:배포,파드,서비스69/2.4.2쿠버네티스에서스프링애플리케이션실행71
2.5폴라북숍:클라우드네이티브애플리케이션75
__2.5.1시스템요구사항이해75/2.5.2프로젝트에서사용되는패턴과기술78
요약82
PARTII클라우드네이티브개발
CHAPTER3클라우드네이티브개발시작87
3.1클라우드네이티브프로젝트부트스트래핑88
__3.1.1하나의코드베이스,하나의애플리케이션88/3.1.2그래들과메이븐의의존성관리90
3.2임베디드서버로작업92
__3.2.1실행가능한JAR및임베디드서버93/3.2.2요청당스레드모델이해95/3.2.3내장톰캣설정97
3.3스프링MVC를이용한RESTful애플리케이션구축100
__3.3.1RESTAPI를먼저,비즈니스로직은그다음100/3.3.2스프링MVC를이용한RESTAPI구현106/3.3.3데이터유효성검사및오류처리109/3.3.4미래요구사항을위해진화하는API114
3.4스프링RESTful애플리케이션테스트115
__3.4.1JUnit5를이용한단위테스트117/3.4.2@SpringBootTest를통한통합테스트119/3.4.3@WebMvcTest를사용한REST컨트롤러의테스트122/3.4.4@JsonTest를사용한JSON직렬화테스트124
3.5배포파이프라인:빌드및테스트126
__3.5.1배포파이프라인의커밋단계이해127/3.5.2깃허브액션을이용한커밋단계구현129
요약133
CHAPTER4외부화설정관리136
4.1스프링설정:속성과프로파일139
__4.1.1속성:설정을위한키-값쌍140/4.1.2프로파일:기능플래그와설정그룹146
4.2외부화된구성:하나의빌드,여러설정150
__4.2.1커맨드라인인수를통한애플리케이션설정152/4.2.2JVM시스템속성을통해애플리케이션구성152/4.2.3환경변수를통해애플리케이션구성153
4.3스프링클라우드컨피그서버로중앙식설정관리하기155
__4.3.1깃을통한설정데이터저장158/4.3.2설정서버구성160/4.3.3복원력높은설정서버생성164/4.3.4설정서버RESTAPI이해166
4.4스프링클라우드컨피그클라이언트로설정서버사용168
__4.4.1설정클라이언트구축168/4.4.2내결함성이높은설정클라이언트의구축171/4.4.3런타임시설정새로고침173
요약176
CHAPTER5클라우드에서데이터저장과관리178
5.1클라우드네이티브시스템을위한데이터베이스179
__5.1.1클라우드에서의데이터서비스180/5.1.2PostgreSQL을컨테이너로실행183
5.2스프링데이터에대한데이터지속성JDBC185
__5.2.1JDBC로데이터베이스에연결187/5.2.1스프링데이터를통한지속성엔티티정의190/5.2.3JDBC감사활성화와설정195/5.2.4스프링데이터의데이터리포지터리198
5.3스프링및테스트컨테이너로데이터지속성테스트하기202
__5.3.1PostgreSQL을위한테스트컨테이너설정203/5.3.2@DataJdbcTest및테스트컨테이너를통한데이터지속성테스트205/5.3.3@SpringBootTest및테스트컨테이너를이용한통합테스트206
5.4플라이웨이를통한프로덕션환경에서의데이터베이스관리207
__5.4.1플라이웨이이해:데이터베이스버전관리208/5.4.2플라이웨이를이용한데이터베이스스키마초기화210/5.4.3플라이웨이를이용한데이터베이스진화211
요약213
CHAPTER6스프링부트컨테이너화215
6.1도커에서컨테이너이미지로작업하기216
__6.1.1컨테이너이미지이해217/6.1.2도커파일을통한이미지생성218/6.1.3깃허브컨테이너저장소로이미지저장222
6.2스프링부트애플리케이션을컨테이너이미지로패키지226
__6.2.1스프링부트의컨테이너화를위한준비226/6.2.2도커파일로스프링부트컨테이너화229/6.2.3프로덕션을위한컨테이너이미지빌드231/6.2.4클라우드네이티브빌드팩을이용한스프링부트컨테이너화237
6.3도커컴포즈를통한스프링부트컨테이너의관리242
__6.3.1도커컴포즈를통한컨테이너라이프사이클관리243/6.3.2스프링부트컨테이너디버깅244
6.4배포파이프라인:패키지및등록247
__6.4.1커밋단계에서릴리스후보빌드248/6.4.2깃허브액션을통한컨테이너이미지등록249
요약254
CHAPTER7스프링부트를위한쿠버네티스기초256
7.1도커에서쿠버네티스로의이동257
__7.1.1로컬쿠버네티스클러스터259/7.1.2로컬클러스터에서데이터서비스관리261
7.2스프링부트를위한쿠버네티스배포263
__7.2.1컨테이너에서파드로263/7.2.2배포를통한파드제어264/7.2.3스프링부트애플리케이션을위한배포객체생성265
7.3서비스검색및부하분산271
__7.3.1서비스검색및부하분산의이해271/7.3.2클라이언트측서비스검색및부하분산272/7.3.3서버측서비스검색및부하분산274/7.3.4쿠버네티스서비스를통한스프링부트애플리케이션노출276
7.4확장성과일회성279
__7.4.1일회성을위한조건:빠른시작280/7.4.2일회성을위한조건:우아한종료280/7.4.3스프링부트애플리케이션확장283
7.5틸트를사용한로컬쿠버네티스개발286
__7.5.1틸트를사용한내부개발루프286/7.5.2옥탄트를사용한쿠버네티스워크로드시각화289
7.6배포파이프라인:쿠버네티스매니페스트유효성검사292
__7.6.1커밋단계에서쿠버네티스매니페스트검증292/7.6.2깃허브액션을통한쿠버네티스매니페스트유효성검사자동화294
요약295
PARTIII클라우드네이티브분산시스템
CHAPTER8리액티브스프링:복원력과확장성299
8.1리액터와스프링의비동기및비차단아키텍처301
__8.1.1요청당스레드에서이벤트루프로302/8.1.2프로젝트리액터:모노와플럭스를갖는리액티브스트림304/8.1.3스프링리액티브스택이해306
8.2스프링웹플럭스와스프링데이터R2DBC를갖는리액티브서버307
__8.2.1스프링부트를통한리액티브애플리케이션부트스트래핑309/8.2.2스프링데이터R2DBC를사용한리액티브데이터지속성311/8.2.3리액티브스트림을이용한비즈니스로직구현318/8.2.4스프링웹플럭스로RESTAPI노출321
8.3스프링웹클라이언트를사용한리액티브클라이언트323
__8.3.1스프링에서서비스간통신324/8.3.2데이터교환방법에대한이해326/8.3.3웹클라이언트를통한REST클라이언트구현328
8.4리액티브스프링을통한복원력높은애플리케이션332
__8.4.1타임아웃332/8.4.2재시도336/8.4.3폴백및오류처리339
8.5스프링,리액터,테스트컨테이너를이용한리액티브애플리케이션의테스트341
__8.5.1모의웹서버로REST클라이언트테스트341/8.5.2@DataR2dbcTest및테스트컨테이너를이용한데이터지속성테스트344/8.5.3@WebFluxTest를이용한REST컨트롤러테스트346
요약348
CHAPTER9API게이트웨이와서킷브레이커350
9.1에지서버와스프링클라우드게이트웨이352
__9.1.1스프링클라우드게이트웨이를이용한에지서버부트스트래핑354/9.1.2경로와술어의정의356/9.1.3필터를통한요청및응답처리360
9.2스프링클라우드서킷브레이커와Resilience4J로내결함성개선하기362
__9.2.1스프링클라우드서킷브레이커를통한서킷브레이커소개364/9.2.2Resilience4J서킷브레이커설정365/9.2.3스프링웹플럭스를이용한폴백RESTAPI정의366/9.2.4서킷브레이커,재시도및시간제한의결합367
9.3스프링클라우드게이트웨이와레디스를통한요청사용률제한371
__9.3.1레디스컨테이너실행372/9.3.2스프링과레디스의통합373/9.3.3요청사용률제한설정374
9.4레디스를통한분산세션관리377
__9.4.1스프링세션데이터레디스를통한세션처리378
9.5쿠버네티스인그레스를통한외부액세스관리382
__9.5.1인그레스API와인그레스컨트롤러이해382/9.5.2인그레스객체사용385
요약388
CHAPTER10이벤트중심애플리케이션과함수390
10.1이벤트중심아키텍처392
__10.1.1이벤트중심모델이해392/10.1.2발행자/구독자모델의사용393
10.2메시지브로커와래빗MQ395
__10.2.1메시징시스템의AMQP이해396/10.2.2발행/구독통신을위한래빗MQ사용397
10.3스프링클라우드함수를통한함수399
__10.3.1스프링클라우드함수의함수적패러다임사용400/10.3.2함수의합성및통합:REST,서버리스,데이터스트림406/10.3.3@FunctionalSpringBootTest를통한통합테스트408
10.4스프링클라우드스트림을통한메시지처리410
__10.4.1래빗MQ와의통합설정410/10.4.2함수의메시지채널바인딩412/10.4.3테스트바인더를통한통합테스트419/10.4.4실패에대한메시지복원력422
10.5스프링클라우드스트림을통한메시지생성및소비423
__10.5.1이벤트소비자구현및멱등성문제423/10.5.2이벤트생성자구현과원자성문제427
요약433
CHAPTER11보안:인증과SPA435
11.1스프링보안기초436
11.2키클록을통한사용자계정관리441
__11.2.1보안영역정의443/11.2.2사용자및역할관리444
11.3오픈ID커넥트,JWT및키클록을통한인증445
__11.3.1오픈ID커넥트를통한사용자인증446/11.3.2JWT를통한사용자정보교환450/11.3.3키클록에서애플리케이션등록452
11.4스프링보안및오픈ID커넥트로사용자인증455
__11.4.1새의존성추가456/11.4.2스프링보안과키클록의통합설정457/11.4.3기초적인스프링보안설정458/11.4.4인증된사용자콘텍스트검사460/11.4.5스프링보안및키클록에서사용자로그아웃설정464
11.5스프링보안과SPA통합468
__11.5.1앵귤러애플리케이션실행469/11.5.2인증흐름제어471/11.5.3사이트간요청위조방지474
11.6스프링보안및오픈ID커넥트테스트477
__11.6.1OIDC인증테스트477/11.6.2CSRF테스트479
요약482
CHAPTER12보안:권한과감사484
12.1스프링클라우드게이트웨이와OAuth2를통한권한과역할485
__12.1.1스프링클라우드게이트웨이에서다른서비스로의토큰전달488/12.1.2토큰사용자지정및사용자역할전파491
12.2스프링보안및OAuth2를통한API보호(명령형)497
__12.2.1스프링부트OAuth2리소스서버보호497/12.2.2스프링보안및JWT를통한역할기반접근제어501/12.2.3스프링보안및테스트컨테이너를이용한OAuth2테스트504
12.3스프링보안과OAuth2를이용한API보호(반응형)511
__12.3.1스프링부트OAuth2리소스서버보호511/12.3.2스프링보안및테스트컨테이너로OAuth2테스트514
12.4스프링보안및스프링데이터로데이터보호및감사516
__12.4.1스프링보안및스프링데이터JDBC를사용한데이터감사517/12.4.2스프링데이터와@WithMockUser를통한데이터감사테스트520/12.4.3스프링보안및스프링데이터R2DBC로사용자데이터보호522/12.4.4@WithMockUser및스프링데이터R2DBC를통한데이터감사및보호테스트526
요약528
PARTIV프로덕션에서의클라우드네이티브
CHAPTER13관측가능성및모니터링533
13.1스프링부트,로키및플루언트비트를사용한로깅534
__13.1.1스프링부트를사용한로깅535/13.1.2로키,플루언트비트,그라파나로로그관리하기538
13.2스프링부트액추에이터와쿠버네티스를사용한상태프로브544
__13.2.1액추에이터를통한스프링부트애플리케이션상태프로브정의545/13.2.2스프링부트및쿠버네티스에서상태프로브설정548
13.3스프링부트액추에이터,프로메테우스,그라파나를통한메트릭및모니터링553
__13.3.1스프링부트액추에이터및마이크로미터로메트릭설정554/13.3.2프로메테우스와그라파나를통한메트릭모니터링557/13.3.3쿠버네티스에서프로메테우스메트릭설정562
13.4오픈텔레메트리및템포를사용한분산추적563
__13.4.1템포와그라파나를통한트레이스관리566/13.4.2오픈텔레메트리를사용해스프링부트에서추적구성하기567
13.5스프링부트액추에이터를통한애플리케이션관리및모니터링572
__13.5.1스프링부트에서플라이웨이마이그레이션모니터링573/13.5.2애플리케이션정보노출574/13.5.3힙덤프생성및분석577
요약579
CHAPTER14설정과시크릿관리581
14.1쿠버네티스에서애플리케이션설정하기582
__14.1.1스프링시큐리티를통한설정서버보안583/14.1.2스프링클라우드버스를통한런타임설정새로고침584/14.1.3스프링클라우드컨피그를통한시크릿관리586/14.1.4스프링클라우드컨피그비활성화587
14.2쿠버네티스에서컨피그맵과시크릿사용588
__14.2.1컨피그맵을통한스프링부트설정589/14.2.2시크릿으로민감한정보를저장하거나저장하지않기594/14.2.3스프링클라우드쿠버네티스를통한런타임설정갱신597
14.3커스터마이즈를통한설정관리600
__14.3.1커스터마이즈를통한스프링부트애플리케이션관리및설정601/14.3.2커스터마이즈를통한여러환경에대한쿠버네티스설정관리606/14.3.3스테이징을위한설정오버레이정의609/14.3.4환경변수사용자지정변경610/14.3.5컨피그맵사용자정의변경612/14.3.6이미지이름및버전의사용자지정변경613/14.3.7복제본수사용자지정변경614
요약618
CHAPTER15지속적전달과깃옵스620
15.1배포파이프라인:수락단계621
__15.1.1지속적배포를위한릴리스후보버전지정621/15.1.2배포파이프라인수락단계의이해626/15.1.3깃허브액션으로수락단계구현628
15.2프로덕션을위한스프링부트설정631
__15.2.1프로덕션을위한설정오버레이정의632/15.2.2스프링부트컨테이너CPU및메모리설정638/15.2.3프로덕션환경에스프링부트배포644
15.3배포파이프라인:프로덕션단계646
__15.3.1배포파이프라인의프로덕션단계이해647/15.3.2깃허브액션을통한프로덕션단계구현647
15.4깃옵스를사용한지속적배포654
__15.4.1아르고CD로깃옵스구현656/15.4.2종합하기660
요약662
CHAPTER16서버리스,그랄VM및케이네이티브664
16.1스프링네이티브및그랄VM을사용한네이티브이미지665
__16.1.1그랄VM과네이티브이미지이해하기666/16.1.2스프링네이티브를통한그랄VM의스프링부트지원667/16.1.3스프링부트애플리케이션의네이티브이미지컴파일674
16.2스프링클라우드함수를사용한서버리스애플리케이션678
__16.2.1스프링클라우드함수를통한서버리스애플리케이션구축679/16.2.2배포파이프라인:빌드및등록685/16.2.3서버리스애플리케이션의클라우드배포687
16.3케이네이티브를통한서버리스애플리케이션배포688
__16.3.1로컬케이네이티브플랫폼구축689/16.3.2케이네이티브CLI로애플리케이션배포690/16.3.3케이네이티브매니페스트를통한애플리케이션배포692
요약696
APPENDIX부록
APPENDIXA개발환경설정701
A.1자바701
A.2도커703
A.3쿠버네티스705
A.4다른툴707
APPENDIXB디지털오션프로덕션환경을위한쿠버네티스710
B.1디지털오션에서쿠버네티스클러스터실행711
B.2디지털오션에서PostgresQL데이터베이스실행715
B.3디지털오션에서레디스실행717
B.4쿠버네티스오퍼레이터를통한래빗MQ실행719
B.5헬름차트를사용한키클록실행720
B.6폴라UI실행723
B.7모든클라우드리소스삭제723
찾아보기725
온라인서점시스템을만들며배우는클라우드네이티브개발
클라우드네이티브방식을이용하면소프트웨어를신속하게제공하고,필요에따라동적으로확장하며,비용을최적화하면서항상사용가능하게유지할수있다.개발자가최상의결과를얻기위해고려해야할‘15요소방법론’을기초로클라우드네이티브애플리케이션을개발하고운영하는거의모든방법을이책에담았다.스프링부트와쿠버네티스를사용해클라우드네이티브애플리케이션을설계부터빌드,배포까지모두배울수있는유익한도서다.
‘폴라북숍’이라는가상의온라인서점시스템을개발하면서스프링및자바생태계에서제공하는라이브러리를사용해클라우드네이티브애플리케이션을빌드하고테스트하는방법을설명한다.아이디어를떠올리는것을시작으로모든과정을단계별로안내하고있어클라우드네이티브개발이어떤사이클로이루어지는지살펴볼수있다.특히RESTAPI,데이터지속성,리액티브프로그래밍,API게이트웨이,함수,이벤트중심아키텍처,복원력,보안,테스트,통합가시성등의주제를깊이다루며독자로하여금처음부터끝까지실습하도록구성한것이장점이다.끝으로처음부터만든클라우드용애플리케이션을컨테이너이미지로패키징하고쿠버네티스와같은클라우드환경에배포하는방법까지설명하며대단원의막을내린다.
저자는이책을구성하고집필할때“예제는일상업무와관련있고즉시적용할수있는실제적인것이어야한다”는점을원칙으로삼았다고밝혔다.실전과같은예제를차근차근따라하면서현장에서바로쓸수있는기술과아이디어를얻길바란다.
주요내용
·스프링으로클라우드네이티브패턴구현
·클라우드네이티브모범사례및디자인패턴
·온라인서점시스템개발실습
·필수및반응형애플리케이션빌드및테스트
·보안,복원력및확장성처리
·쿠버네티스에서애플리케이션구성,배포및통합가시성
·지속적배포및깃옵스도입