"자바생태계에서클라우드네이티브애플리케이션을만드는개발자라면꼭읽어야할필독서다.회복력있는(resilient)서비스제작,REST와비동기이벤트로들어오는데이터흐름관리,테스트,배포,관측성(observability)과관련된핵심작업까지모든것을다루는책이다."
-대니얼브라이언트/스펙토랩스(SpectoLabs)CTO
"클라우드네이티브로의여행을떠나는모든이가이책에담긴정제된통찰과경험을통해많은것을배울수있다."
-데이브사이어박사/스프링프레임워크기여자,스프링부트와스프링클라우드의공동설립자
아마존,넷플릭스,엣시같은회사는전통적인대기업과비교해어떤차이가있을까?아마존과넷플릭스는클라우드네이티브방식으로서비스를만들고운영하면서경쟁력을유지하고앞서갈수있었다.이책은자바개발자가스프링부트,스프링클라우드,클라우드파운드리를이용해서더나은소프트웨어를더빨리개발할수있는실용적인가이드를제공한다.많은기업이이미클라우드컴퓨팅,테스트주도개발,마이크로서비스,지속적통합및전달로소프트웨어개발방식을전향하고있다.이책을읽다보면레거시애플리케이션을클라우드네이티브애플리케이션으로전환하는데도움을주는도구와방법론에자연스럽게흠뻑빠져들게된다.
*기본:클라우드네이티브사고방식의장점을알아본다.스프링부트애플리케이션을설정하고테스트하는방법과레거시애플리케이션을클라우드로옮기는방법을설명한다.
*마이크로서비스:스프링을활용해서HTTP기반RESTful서비스를만들어본다.요청을분산시스템에적절히라우팅하는방법을알아보고관문역할을하는엣지서비스를구축한다.
*데이터통합:스프링데이터프레임워크를활용해서데이터를관리하는방법과,이벤트주도,메시징중심아키텍처를지원하는스프링을사용해서분산서비스를통합하는방법을알아본다.
*배포및운영:관찰가능한시스템을만드는방법을알아본다.서비스브로커를이용해서상태유지서비스와연결해보고,지속적전달에담긴진정한의미를이해한다.
예제코드,연습등보충자료는http://github.com/Cloud-Native-Java에서내려받을수있다.
[이책의구성]
1부'기초'
1장'클라우드네이티브애플리케이션'과2장'부트캠프:스프링부트와클라우드파운드리소개'에서는클라우드네이티브사고(thinking)의필요성에대해살펴보고스프링부트와클라우드파운드리를소개한다.
3장'12요소애플리케이션설정'에서는스프링부트애플리케이션을설정하는방법을알아본다.이내용은책전반에걸쳐계속나온다.
4장'테스트'에서는가장단순한컴포넌트에서분산시스템에이르기까지스프링애플리케이션을테스트하는방법에대해알아본다.
5장'애플리케이션마이그레이션'에서는일반적인보통의애플리케이션을클라우드파운드리와같은클라우드플랫폼으로이전하는데필요한리팩토링을가볍게살펴보고,여러분이클라우드플랫폼으로부터필요한가치를얻을수있도록도와줄것이다.
2부'웹서비스'
6장'RESTAPI'에서는스프링으로RESTfulHTTP서비스를만들어본다.이장에서다루는내용은API개발과도메인주도개발에서많이사용된다.
7장'라우팅'에서는분산시스템에서요청(request)의출입을제어하는일반적인방법을알아본다.
8장'엣지서비스'에서는외부로부터의요청을받아들이는첫번째관문역할을하는서비스를만드는방법을알아본다.
3부'데이터통합'
9장'데이터관리'에서는스프링데이터를사용해서스프링애플리케이션에서데이터를관리하는방법을알아본다.여기에서다루는내용은도메인주도사고의기초가된다.
10장'메시징'에서는스프링의이벤트주도,메시징중심아키텍처를이용해서분산서비스와데이터를통합하는방법을알아본다.
11장'배치프로세스와태스크'에서는클라우드파운드리같은클라우드플랫폼의확장성을이용해서오래지속되는작업부하를처리하는방법을알아본다.
12장'데이터통합'에서는분산시스템에서상태를관리하는몇가지방법을알아본다.
4부'운영환경'
13장'관측가능한시스템'에서는관측성(observability)과운영을지원하는시스템을만드는방법을알아본다.
14장'서비스브로커'에서는클라우드파운드리같은플랫폼을지원하는서비스브로커를만드는방법을알아본다.서비스브로커는메시지큐,데이터베이스,캐시처럼상태를가진서비스를클라우드플랫폼에연결해준다.
15장'지속적전달'에서는지속적전달뒤에숨어있는중요한개념을살펴본다.이책에서는마지막장에해당하지만,클라우드네이티브를향한여러분의여정에서는출발점에해당한다.
5부'부록'
부록A'자바EE와스프링부트'에서는스프링부트애플리케이션을자바EE환경에통합하는방법을살펴본다.
마지막으로,한국어판특별부록B'클라우드파운드리환경의준비와활용'에서는클라우드파운드리를준비하고애플리케이션을배포하며서비스를준비하는방법에대해알아본다.
[이책의독자대상]
이책은스프링부트,스프링클라우드와클라우드파운드리를이용해서더나은소프트웨어를더빠르게만들고싶어하는자바/JVM개발자를주요대상으로한다.마이크로서비스라는용어에대해들어본적이있고,하늘높이치솟는스프링부트의인기를느끼고있으며,오늘날대부분의기업들이왜클라우드파운드리를사용하는지궁금하다면,이책은바로여러분을위한책이다.
[옮긴이의말]
“소프트웨어를유지한다는것은‘이전처럼동작하게하는것'이아니다.‘변화하는세상에서도항상유용하게만드는것’이다.”스프링부트프로젝트의리드인피보탈의필웹(PhilWebb)은스프링원플랫폼2017발표(https://youtu.be/MQamx7-bCVI)에서원자이론학자제시카커(JessicaKerr)의말을인용했다.오늘날웹또는모바일기반의서비스를제공하는대부분의회사는소프트웨어와데이터를다루는능력,그자체가곧경쟁력이다.아이디어를동작하는소프트웨어로구현하고,이소프트웨어를가능한한빨리고객에게전달해서그가치를검증하는일을반복하는것은사업의성패에매우중요하다.
필웹은그날발표에서스프링프로젝트와스프링프레임워크가발표된해에함께출시된노키아6610의전화기를예로들었다.노키아6610은현재도시장에서구매할수있으며심지어수리도가능하지만오늘날아무도이전화기를쓰지않는다.대신,모두가더많은기능이탑재된최신스마트폰을사용한다.‘전화기’에대한세상의인식이바뀌었기때문이다.이처럼변화를수용하지못한기기는시장에서외면을받기마련이다.반면스프링프로젝트는여전히많은서비스애플리케이션에서사용되고있으며심지어최근에는더욱더많은사용자를확보하는중이다.그오랜세월동안스프링은꾸준히시장의변화를반영해왔기때문이다.이어서필웹은스프링부트애플리케이션을시작하고자할때사용하는스프링이니셜라이저(http://start.spring.io)의통계를예로들었다.스프링MVC에적용된다양한뷰(View)기술중타임리프(Thymeleaf)는여전히개발자들이많이사용하지만,벨로시티(Velocity)의경우는그사용량이점점줄어들다가결국사라졌다.어느시점에스프링이니셜라이저에서이벨로시티의사용량이제로가된이유는스프링팀에서벨로시티를더이상지원하지않기로결정했기때문이다.벨로시티프로젝트는더이상활발하게진행되지않고업데이트가이루어지지않았기때문에,스프링사용자들에게안정성,보안등의측면에서악영향을미칠수있는벨로시티를제외했다는것이다.
피보탈의클라우드파운드리연구개발총괄인온시파쿠리(OnsiFakuhouri)는스프링원플랫폼2017발표(https://youtu.be/_uB5bBsMZIk)에서"우리가개념적으로설정한목적지에다다르는과정은상상에서처럼올곧은것이아니라수많은난관과어려움이산재해있으며,그런어려움을모두헤치고막상도착한곳은원했던목적지가아닐수도있다."고말했다.따라서이런거대한위험을안고가는것보다는,관찰-선택-학습으로이어지는과정을반복해야한다고덧붙였다.우리가초행길에서목적지를찾아갈때도이런방법을적용해볼수있다.스마트폰에서먼저지도와주변지형을살피고,비교하고,이동한다.원하는목적지에더빠르게도달하려면이과정을더빠르게반복할수있으면된다.
스프링프로젝트의생존에서우리는온시가말한관찰-실행-학습의반복예를살펴볼수있다.스프링은이방법을바탕으로시장의개발자들의요구를살피고,이를반영해서그결과를관찰한다.그결과로스프링부트프로젝트가탄생했고,스프링클라우드프로젝트가탄생했다.시장의클라우드기반애플리케이션에대한요구는더욱더강력해졌고,이는비단더높은가용성및확장성뿐만아니라더잦은변화를스프링프레임워크에서수용해야함을의미했다.따라서오늘날의수많은스프링프로젝트는시장의변화에대한요구를수용하고적용했기때문에노키아전화기가처한상황과는다르게성공적으로살아남은결과물인것이다.그리고오늘도다양한스프링프로젝트들이이과정을반복하고있다.
스프링부트는더이상우리가XML설정에고통받지않아도되는방법을제공한다.매번반복해야하는동일한설정은스프링부트팀이제공하고,개발자들은필요한기능을의존관계주입을통해이전과는다른방법으로사용할수있다.이외에도스프링부트는‘재사용성’을기반으로한다양한장점을제공한다.이에더하여,스프링클라우드는여러분이클라우드기반의애플리케이션을구현하고자할때,이분야에이미선도적인애플리케이션을만들고있는넷플릭스나아마존이사용하는기술을스프링부트의방법으로사용할수있도록제공한다.누군가가이미해결한어려운문제를풀때,스프링에익숙한개발자라면넷플릭스가사용하는주요개념을거의즉시적용가능한것이다.
뿐만아니라,클라우드는이전에있어왔던도구와이전에는없었던도구들을API공개를통해사용할수있게하는능력을제공한다.오래전부터있어왔던관계형데이터베이스는예전처럼서버에운영팀이설치해주는식으로준비되지않는다.데이터베이스생성을위한API를사용하면,개발자는필요한데이터베이스를즉시얻을수있다.관계형데이터베이스뿐만아니라최근에는다양한메시지큐,NoSQL데이터베이스,머신러닝도구,데이터소스간데이터이동지원을위한다양하고도새로운도구들을함께지원한다.이런도구들을개발자의랩탑이나데스크탑,또는서버에매번설치하는것은굉장히어려운일이다.
넷플릭스는얼마전,풀사이클개발자(FullCycleDeveloper)라는개념을자사의기술블로그에발표했다(https://bit.ly/2k91j0b).풀사이클개발자란애플리케이션의수명주기전체를다룰수있는개발자를말한다.소프트웨어수명주기는디자인,개발,테스트,배포,운영,지원의흐름을말한다.거의대부분의조직에서,하나하나의단계는전문가들이자신의분야만다루는형태로팀을조직한다.이런조직문화에서는그앞단계나뒷단계를자신의일이아닌것으로취급하거나,전문성이없으므로서로관여하지않는문화로발전한다.서로관여하지않는사람들,팀들이공통된하나의소프트웨어에관여하는방식은소프트웨어를유지하는데상당한비용이들며,더욱이소프트웨어의필요성을유지하는데매우해로운방법이다.이에반해넷플릭스는자사의모든개발자가자신이만든코드를스스로운영할수있는방법을만들어적용하고있다.즉소프트웨어수명주기전체를개발자가직접관리하게하는것이다.이것이가능한핵심요인은바로개발자들에게사용이편리한다양한플랫폼도구를제공하는것이다.자신의소프트웨어를직접운용할때필요한관찰을쉬운모니터링으로제공하고,실행을배포와연결로서지원하며,로그와로그의분석을통한학습을위한도구를제공하는것이다.그리고클라우드파운드리는정확히이지점에위치한다.모니터링,로깅