본문 바로가기
+ 펴낸 책

클라우드 네이티브 자바

by 책만 2018. 6. 19.

 

클라우드 네이티브 자바

스프링 마이크로서비스 아키텍처와 데브옵스를 실천하는 
클라우드 기반 서비스의 모든 것

조쉬 롱, 케니 바스타니 지음 | 정윤진, 오명운, 장현희 옮김

784쪽 | 38,000원 2018년 6월 29일 출간 | 188*240*37 | ISBN 9791196203733

판매처 [교보문고] [YES24] [알라딘] [인터파크] [반디앤루니스] 전국 교보문고 매장

전자책 판매처 [리디북스] [교보문고] [YES24] [알라딘] | ISBN 9791196203788 | PDF 포맷  

 

 

★ 자료실: http://github.com/Cloud-Native-Java (본문에 수록된 예제파일)

★ 정오표: 

http://www.onlybook.co.kr/entry/cloud-native-java-errata

★ 독자문의: support (at) onlybook.co.kr

 

 

풀 사이클 개발자로 진화하고 싶은 엔터프라이즈 자바 개발자가 꼭 읽어야 할 클라우드 시대의 생존 지침서!

스프링 부트, 스프링 클라우드, 클라우드 파운드리를 이용한 다양한 예제를 통해 확장성 높은 마이크로서비스 아키텍처 설계와 데브옵스(DevOps), 애자일 개발의 진정한 실천 방법을 알려준다.

"자바 생태계에서 클라우드 네이티브 애플리케이션을 만드는 개발자라면 꼭 읽어야 할 필독서다. 회복력 있는(resilient) 서비스 제작, REST와 비동기 이벤트로 들어오는 데이터 흐름 관리, 테스트, 배포, 관측성(observability)과 관련된 핵심 작업까지 모든 것을 다루는 책이다."

- 대니얼 브라이언트 / 스펙토랩스(SpectoLabs) CTO

 

"클라우드 네이티브로의 여행을 떠나는 모든 이가 이 책에 담긴 정제된 통찰과 경험을 통해 많은 것을 배울 수 있다."

- 데이브 사이어 박사 / 스프링 프레임워크 기여자, 스프링 부트와 스프링 클라우드의 공동 설립자

 

스프링이 등장해서 폭발적인 인기를 끌기 시작하던 즈음에 오픈소스 네이티브 자바의 시대가 열렸다. 오픈소스 기술은 자바 개발에 빠질 수 없는 핵심이 되었고 다양한 형태의 기술로 매우 빠르게 발전해왔다. 이런 변화에 자연스럽게 적응하고 함께 발전해온 대표적인 기술이 스프링이다. 오픈소스 네이티브 자바의 주력이었던 스프링이지만 새롭게 다가오는 클라우드 네이티브 시대에서도 과연 그 위치를 지킬 수 있을까.

『클라우드 네이티브 자바』는 그런 의문에 대해 명쾌하게 대답을 해주는 책이다. 혜성처럼 등장해서 스프링으로도 최신 기술 흐름에 뒤처지지 않는 기민한 개발이 가능하다는 것을 보여준 스프링 부트가 클라우드 환경에서도 빛을 발한다는 사실을 이 책에 나온 간결한 예제를 따라해보는 것만으로도 충분히 느낄 수 있을 것이다.

이 책은 유명 IT 기업에서 개발자들이 함께 작성하고 공유한다는 사내 기술 위키 같은 책이다. 실제 개발 프로젝트를 거치며 축적된 각종 기술의 핵심 개념, 활용법, 적용 전략, 주의사항, 팁 그리고 빠르게 가져다 써볼 수 있는 깔끔한 예제들이 정리되어 있는, 경쟁사 개발자들에게는 절대 보여주고 싶지 않은, 우리만의 보물 같은 농축된 자료를 보는 듯하다. 이렇게 잘 정리된 책의 도움 없이 스프링 부트와 각 장에서 다루는 기술의 자료를 찾아 개념을 잡고 동작하는 코드를 직접 만들어보려면 꽤나 오랜 시간이 필요할 것이다. 변화의 속도에 뒤처지지 않고 빠르게 개발할 수 있게 해주는 클라우드 기술처럼 이 책도 독자들의 시간을 절약해주고 민첩하게 새로운 시대에 대응할 자신감을 갖게 해줄 것이라고 믿는다.

이일민 / 이프릴 대표, 『토비의 스프링 3.1』 저자

수년간 버즈워드로 떠도는 사이트 신뢰성 엔지니어링(SRE), 데브옵스, 마이크로서비스 아키텍처(MSA)가 누군가에게는 단순한 흥미로운 기술 조류이거나 선택의 문제일지 모르지만, 내가 일하는 우아한형제들에서는 '배달의 민족'이라는 O2O 서비스를 운영하는 데 있어 생존이 달린 문제다. 서비스는 급변하는 트래픽에 탄력적으로 대응해야 한다. 장애가 일어나면 소비자는 즐거운 식사시간을 망치고 사장님들은 큰 손실을 입는다. 예전에는 미처 예상하지 못한 다양한 요구에 대응하려면 하루에도 몇 번씩 서비스를 배포해야 하며, 사용자 수는 끝을 알 수 없을 정도로 계속 늘어난다. 이런 가운데 SRE, 데브옵스, MSA를 둘러싸고 진행되는 논의를 보면 애플리케이션 개발자 관점이 종종 소외된다는 생각이 든다. 코드를 통한 인프라 자동화, 지속적 배포 체계, 중앙 로그 수집 시스템, 가관측성 같은 인프라/플랫폼 중심의 논의는 많지만 애플리케이션 개발자들에게는 먼 이야기로 들린다. 클라우드의 장점을 잘 활용한 애플리케이션의 특징을 허로쿠(Heroku)에서 정리해 '12요소 애플리케이션'이라는 이름으로 발표했음에도 이를 구현하는 것은 여전히 개발자 개인의 문제로 남는다.

『클라우드 네이티브 자바』는 이런 갈증을 풀어주는 오아시스 같은 책이다. 스프링 프레임워크가 여기저기 흩어져 있는 자바 EE 기술을 엮어서 일관된 플랫폼이 되어 주었다면, 스프링 클라우드는 여러 클라우드 관련 기술을 엮어서 클라우드 네이티브 애플리케이션이 동작하는 환경을 제공한다. 스프링 부트는 우리가 만드는 애플리케이션을 스프링 클라우드가 제공하는 환경에 잘 접목시켜 준다.

소프트웨어가 중요한 시대라고 한다. 소프트웨어 개발자가 마냥 대접받는 시대라기보다는, 소프트웨어가 풀어야 할 문제가 많아지고 책임이 커졌다는 의미다. 예전과 같은 방식으로 개발해서는 새로운 플랫폼의 장점을 살릴 수 없다. 이미 스프링을 사용하고 있다면, 그리고 성숙한 클라우드 네이티브 기술을 활용해서 하루 빨리 가치를 시장에 전달하고 싶은 이라면 이 책이 큰 도움이 될 것이다.

박성철 우아한형제들 인프라서비스실장

언제부터인가 서비스 개발이라고 하면 클라우드라는 용어가 빠지지 않고 등장한다. 클라우드 네이티브란 대형 서비스를 개발하는 회사들에서 내부적으로 사용하던 분산 아키텍처링 방법을 클라우드에 접목해 대규모 서비스를 안정적으로 처리할 수 있는 방법을 정의한 것이다. 특히, 넷플릭스는 AWS 위에서 돌리던 서비스 아키텍처와 자사 솔루션을 오픈소스로 공개한 뒤, 피보탈과 협업해 스프링 클라우드라는 클라우드 네이티브를 위한 기능들을 스프링에 추가했다. 경험 많은 개발자의 노하우가 필요하던 부분이 클라우드 네이티브 도입으로 훨씬 더 대규모의 서비스를 구축하기 쉬워졌다.

이 책은 원래 대규모 서비스에서 사용하던 개념들을 스프링 클라우드로 가져온 것에 대한 설명이 대다수이며 상당히 많은 분야를 두루 다루기 때문에 읽기 쉽지는 않지만, 실제로 대규모 서비스에 어떤 기술들이 필요한지에 대한 최신 트렌드를 따라갈 수 있다. 시스템을 확장 가능하게 만들기 위해서 넷플릭스의 솔루션인 유레카, 주울, 페인, 리본 등을 스프링 클라우드에서 어떻게 쉽게 사용할 수 있게 했는지 확인해보시기 바란다. 특히, 이 책을 쓴 원서의 두 저자 중 특히 조쉬 롱은 스프링에 가장 많은 버그를 만들었다는 것을 농담삼아 자랑하기도 한다(버그를 많이 만들었다는 것은 코드를 많이 만들어 기여했다라는 사실과 거의 일치한다). 경험과 식견을 녹여 만든 저자들의 뛰어난 지식을 이 책에서 배워가길 바란다.

강대명 / 유데미(Udemy) 데이터 엔지니어

스프링 클라우드를 활용해서 클라우드 네이티브 애플리케이션을 만드는 방법에 대한 아주 구체적인 방법들을 알려주는 책이다. 그동안의 모호했던 개념들을 실제로 개발하고 적용할 수 있는 실용 예제들과 함께 설명하므로, 클라우드 전환을 생각하는 엔지니어 또는 조직에게 큰 도움이 될 것이다. 특히 클라우드를 사용해서 개발해보고자 하는 초급 개발자, 기존에 스프링 프레임워크를 사용하고 있었지만, 클라우드로 전환하고자 하는 중급 또는 고급 개발자, 스프링 클라우드를 효과적으로 사용하고자 하는 개발자, 클라우드로 이전해 운영 부담을 줄이고자 하는 엔지니어/조직에게 선물과도 같은 책이 될 것이다.

공용준 / 카카오 클라우드 파트장, 『카프카, 데이터 플랫폼의 최강자』 저자

신뢰성 있는 소프트웨어를 개발하는 것은 많은 부분에서 잘 진행되어 왔다고 말하기 힘들다. 검증된 클라우드 네이티브 패턴을 사용함으로써 개발자들은 애플리케이션 로직에 더 집중할 수 있고, 운영자들은 예측 가능한 서비스 확장과 함께 알 수 없는 장애로부터 시스템을 보호할 수 있다. 이 책에 나온 실전 예제 코드와 이해하기 쉬운 설명을 통해 자바 개발자들은 각종 패턴과 방법을 알게 될 것이다. 우리 팀 멤버인 케니와 조쉬가 저술한 책이 역시 우리 팀의 멤버인 윤진을 통해 한글화되어 출간됨을 매우 기쁘게 생각한다. 이 책이 한국의 많은 스프링 개발자와 데브옵스들에게 더 나은 서비스를 구현하는 데 도움이 되리라 믿는다.

앤드류 클레이 쉐이퍼(Andrew Clay Shafer) / 데브옵스의 개척자이자 퍼펫 랩스(Puppet Labs)의 창시자

2015년 이래, 스프링 클라우드와 피보탈 클라우드 파운드리를 사용하는 새로운 방식으로 전환한 후에 개발 속도는 적어도 50% 상승했고, 시스템 다운 시간은 절반 이하로 줄어들었으며, 더 작은 플랫폼 전담팀으로도 수만 개의 JVM을 운영할 수 있게 되었다는 사례 데이터가 쌓이고 있습니다. 가장 중요한 점은 클라우드 네이티브 자바를 도입한 조직은 개발과 운영 복잡도에 대해 고민하는 시간을 큰 폭으로 줄이고, 고객과 시장을 바라보는 데 투자할 수 있는 시간을 획기적으로 늘릴 수 있었다는 것입니다.

이 책의 한 장 한 장에는 현대적인 엔터프라이즈 소프트웨어 설계에 있어 가장 중요한 여러 패턴에 대해 상세한 설명이 담겨 있습니다. 조쉬와 케니가 세계 최고의 기업들과 현장에서 함께 일하면서 힘겹게 익혀온 값진 경험들은 이 책 안에서 다양한 사례들과 함께 빛을 발할 것입니다. 모든 개발자와 IT 리더들이 이 책을 읽고 조직 안에서 적응성(adaptability)과 회복성(resilience)의 진정한 힘을 최대한 잘 이용할 수 있게 되기를 바랍니다.

 

제임스 워터스(James Waters) / 피보탈 클라우드 파운드리 수석부사장

아마존, 넷플릭스, 엣시 같은 회사는 전통적인 대기업과 비교해 어떤 차이가 있을까? 아마존과 넷플릭스는 클라우드 네이티브 방식으로 서비스를 만들고 운영하면서 경쟁력을 유지하고 앞서갈 수 있었다. 이 책은 자바 개발자가 스프링 부트, 스프링 클라우드, 클라우드 파운드리를 이용해서 더 나은 소프트웨어를 더 빨리 개발할 수 있는 실용적인 가이드를 제공한다. 많은 기업이 이미 클라우드 컴퓨팅, 테스트 주도 개발, 마이크로서비스, 지속적 통합 및 전달로 소프트웨어 개발 방식을 전향하고 있다. 이 책을 읽다 보면 레거시 애플리케이션을 클라우드 네이티브 애플리케이션으로 전환하는 데 도움을 주는 도구와 방법론에 자연스럽게 흠뻑 빠져들게 된다.

 

 

 

* 기본: 클라우드 네이티브 사고 방식의 장점을 알아본다. 스프링 부트 애플리케이션을 설정하고 테스트하는 방법과 레거시 애플리케이션을 클라우드로 옮기는 방법을 설명한다.

* 마이크로서비스: 스프링을 활용해서 HTTP 기반 RESTful 서비스를 만들어본다. 요청을 분산 시스템에 적절히 라우팅하는 방법을 알아보고 관문 역할을 하는 엣지 서비스를 구축한다.

* 데이터 통합: 스프링 데이터 프레임워크를 활용해서 데이터를 관리하는 방법과, 이벤트 주도, 메시징 중심 아키텍처를 지원하는 스프링을 사용해서 분산 서비스를 통합하는 방법을 알아본다.

* 배포 및 운영: 관찰 가능한 시스템을 만드는 방법을 알아본다. 서비스 브로커를 이용해서 상태 유지 서비스와 연결해보고, 지속적 전달에 담긴 진정한 의미를 이해한다.

 

 

 

이 책의 구성

 

1'기초'

 

1'클라우드 네이티브 애플리케이션'2'부트캠프: 스프링 부트와 클라우드 파운드리 소개'에서는 클라우드 네이티브 사고(thinking)의 필요성에 대해 살펴보고 스프링 부트와 클라우드 파운드리를 소개한다.

 

3'12요소 애플리케이션 설정'에서는 스프링 부트 애플리케이션을 설정하는 방법을 알아본다. 이 내용은 책 전반에 걸쳐 계속 나온다.

 

4'테스트'에서는 가장 단순한 컴포넌트에서 분산 시스템에 이르기까지 스프링 애플리케이션을 테스트하는 방법에 대해 알아본다.

 

5'애플리케이션 마이그레이션'에서는 일반적인 보통의 애플리케이션을 클라우드 파운드리와 같은 클라우드 플랫폼으로 이전하는 데 필요한 리팩토링을 가볍게 살펴보고, 여러분이 클라우드 플랫폼으로부터 필요한 가치를 얻을 수 있도록 도와줄 것이다.

2'웹 서비스'

 

6'REST API'에서는 스프링으로 RESTful HTTP 서비스를 만들어본다. 이 장에서 다루는 내용은 API 개발과 도메인 주도 개발에서 많이 사용된다.

 

7'라우팅'에서는 분산 시스템에서 요청(request)의 출입을 제어하는 일반적인 방법을 알아본다.

 

8'엣지 서비스'에서는 외부로부터의 요청을 받아들이는 첫 번째 관문 역할을 하는 서비스를 만드는 방법을 알아본다.

3부 '데이터 통합'

 

9'데이터 관리'에서는 스프링 데이터를 사용해서 스프링 애플리케이션에서 데이터를 관리하는 방법을 알아본다. 여기에서 다루는 내용은 도메인 주도 사고의 기초가 된다.

 

10'메시징'에서는 스프링의 이벤트 주도, 메시징 중심 아키텍처를 이용해서 분산 서비스와 데이터를 통합하는 방법을 알아본다.

 

11'배치 처리와 태스크'에서는 클라우드 파운드리 같은 클라우드 플랫폼의 확장성을 이용해서 오래 지속되는 작업부하를 처리하는 방법을 알아본다.

 

12'데이터 통합'에서는 분산 시스템에서 상태를 관리하는 몇 가지 방법을 알아본다.

4'운영 환경'

 

13'관측 가능한 시스템'에서는 관측성(observability)과 운영을 지원하는 시스템을 만드는 방법을 알아본다.

 

14'서비스 브로커'에서는 클라우드 파운드리 같은 플랫폼을 지원하는 서비스 브로커를 만드는 방법을 알아본다. 서비스 브로커는 메시지 큐, 데이터베이스, 캐시처럼 상태를 가진 서비스를 클라우드 플랫폼에 연결해준다.

 

15'지속적 전달'에서는 지속적 전달 뒤에 숨어있는 중요한 개념을 살펴본다. 이 책에서는 마지막 장에 해당하지만, 클라우드 네이티브를 향한 여러분의 여정에서는 출발점에 해당한다.

5'부록'

 

부록 A '자바 EE와 스프링 부트'에서는 스프링 부트 애플리케이션을 자바 EE 환경에 통합하는 방법을 살펴본다.

 

마지막으로, 한국어판 특별 부록 B '클라우드 파운드리 환경의 준비와 활용'에서는 클라우드 파운드리를 준비하고 애플리케이션을 배포하며 서비스를 준비하는 방법에 대해 알아본다.

 

 

 

이 책의 독자 대상

 

이 책은 스프링 부트, 스프링 클라우드와 클라우드 파운드리를 이용해서 더 나은 소프트웨어를 더 빠르게 만들고 싶어하는 자바/JVM 개발자를 주요 대상으로 한다. 마이크로서비스라는 용어에 대해 들어본 적이 있고, 하늘 높이 치솟는 스프링 부트의 인기를 느끼고 있으며, 오늘날 대부분의 기업들이 왜 클라우드 파운드리를 사용하는지 궁금하다면, 이 책은 바로 여러분을 위한 책이다.

 

 

 

추천의 글 

로드 존슨Rod Johnson스프링 프레임워크 창시자, 아토미스트 CEO

우리는 소프트웨어 업계의 역사에서 가장 멀리까지 영향을 미칠 수 있는 큰 전환의 한가운데에 있습니다그 변화는 바로 레거시 아키텍처에서 클라우드로의 전환개발과 운영의 전통적인 분리에서 통합을 지향하는 데브옵스로의 전환입니다이 책은 이런 전환에 정면으로 맞서서 클라우드 네이티브 애플리케이션을 작성하는 방법을 설명하고성공적인 전환을 이끌어낼 수 있는 명확한 가이드를 제공해줍니다.전환은 하루아침에 이루어지지 않습니다. 이 책의 가장 뛰어난 장점 중 하나는 여러분이 지금 처한 환경에서, 각자의 경험을 잘 활용해서 클라우드로 전환하는 데 중점을 두었다는 점입니다. 특히 5장의 '스프링을 이용한 서비스 짝맞춤' 절에는 기업 시스템의 레거시 관습에서 클라우드 친화적인 관습으로 전환할 수 있게 해주는 탁월한 자료들이 포함되어 있습니다.

이 책은 현대적인 애플리케이션의 아키텍처 원칙과 입증된 효율적인 구현 방법을 모두 설명하면서 이론과 실무의 균형을 아주 적절하게 잘 맞추고 있습니다. 현대적인 애플리케이션은 항상 문제에 대한 포괄적인 해답을 담고 있는 입증된 오픈소스 위에 만들어지기 때문에, 단순히 프로그래밍 언어에 대한 선택뿐 아니라 주로 사용할 오픈소스 프레임워크에 대한 선택이 실무 사례에 반드시 필요합니다. 자바를 주요 언어로 사용한다면, 또는 특정 언어에 구속받지 않고 열려 있는 분이라면, 이 책은 바로 당신을 위한 책입니다.

 

내 사망 보도는 상당히 과장되어 있다.” - 마크 트웨인

 

 

몇 년 전에 자바의 종말론이 널리 퍼진 적이 있습니다. 자바는 오늘날에도 여전히 번창하고 있고, 이 책에는 그 이유가 담겨 있습니다. 자바는 넷플릭스의 오픈소스 프로젝트와 스프링이라는 두 가지 핵심 성공 요소를 바탕으로 현대적인 클라우드 방식의 애플리케이션 개발을 이끌어오면서 새롭게 생명력을 이어가고 있습니다. 이 책에서는 그 두 가지 핵심 성공 요소를 이해하기 쉽게 잘 풀어내고 있습니다.

더보기

스프링은 처음에는 과거 자바 EE의 복잡성을 단순화하기 위해 탄생했지만, 그 핵심 아이디어는 오랜 시간 동안 굳건히 유지되면서 클라우드 애플리케이션 개발에 있어서도 탄탄하고 완벽한 기초를 제공해주고 있습니다. 십 년이 넘도록 우리는 의존관계 주입(Dependency Injection), 이식 가능한 서비스 추상화(Portable Service Abstration)와 관점 지향 프로그래밍(AOP)이라는 '스프링 삼각형'에 대해 이야기해오고 있습니다. 이 세 가지는 비즈니스 로직과 그를 둘러싼 환경의 명확한 분리가 그 어느 때보다 중요한 오늘날에도 여전히 필요합니다.

 

이 책의 중심부에서는 스프링 부트를 다룹니다. 스프링 부트는 마이크로서비스 시대에 스프링을 사용하는 새로운 방식으로서, 개발 현장에 도입되는 사례가 급증하고 있습니다. 또한, 다양한 규모와 형태의 스프링 서비스를 쉽게 만들며, 컨테이너화된 현대적인 환경에 쉽게 배포할 수 있게 해줍니다. 전통적인 '엔터프라이즈' 자바 애플리케이션은 여전히 하나의 거대한 애플리케이션 서버에서 일체형 방식으로 구동되고 있지만, 스프링 부트는 그와 반대로 단순함과 효율성을 위해 잘게 나눌 수 있게 해줍니다. 서비스는 하나의 단위 업무에 집중할 수 있는 크기로 구성되어, 딱 그만큼의 서비스에 알맞는 적당한 규모의 서버에 배포되어 구동됩니다.

 

이 책에는 넷플릭스 오픈소스 프로젝트와의 통합과 관련한 고도화된 내용뿐 아니라 스프링 클라우드 스트림과 통합 테스트 지원 개선 등 스프링 개발 팀에서 작성한 최신 작업에 대한 따끈따끈한 사례가 포함되어 있습니다.

 

저는 스프링의 창시자로서, 스프링이 개발자들의 일을 간단하게 만들어 줄 수 있도록 혁신과 집중을 계속 이어나가는 것을 볼 수 있어서 기쁩니다. 최근 5년 동안은 오로지 사용자의 입장에서 스프링과 교류해오고 있지만, 스프링이 번영을 이루고, 새로운 복잡성들을 계속 정복해나가는 것을 보게 되어 정말로 즐겁습니다. 저는 예전에 스프링이 자바 애플리케이션을 위해 했던 일들을 개발자들과 개발 프로세스를 위해서 수행하고 있는 아토미스트(Atomist) 사에서, 중요한 모든 것들을 자동화할 수 있는 기능을 제공하면서 단순화라는 미션을 수행하고 있습니다. 스프링은 자바 개발자들이 신경써야 하는 모든 작업에 대해 단순하고 생산적인 구조와 추상층을 제공합니다. 마찬가지로 아토미스트도 프로젝트 소스 코드, 빌드 시스템, 이슈 트래커, 배포 환경 등에 대해 단순하고 생산적인 구조와 추상층을 제공해서, 새 프로젝트 생성에서부터 슬랙과 배포 이벤트 모니터링을 포함하는 팀 협업까지를 아우르는 강력한 배포 자동화를 가능하게 합니다.

 

자동화의 기초가 되는 기본 구성 요소는 테스트입니다. 이 책에서 줄곧 다루는 테스트 주제에 대해, 마이크로서비스를 테스트할 때 마주치게 되는 쉽지 않은 이슈와 해결 방법을 다루는 점이 특히 마음에 들었습니다. 그리고 다양한 예제 코드와 저자들이 적절하게 추가한 오라일리 출판사 특유의 빈틈없고 풍부한 주석도 아주 마음에 들었습니다.

 

 

내가 사랑하는 기술을 주제로 친구들이 집필한 책에 추천사를 쓰게 되어 정말 기쁩니다. 조쉬의 강연을 들을 수 있는 행운을 누렸던 많은 사람이 얘기하는 것처럼, 조쉬는 의사소통에 아주 탁월한 재능을 지닌 사람입니다. 조쉬는 라이브 코딩에서의 능숙함을 책에도 잘 녹여냈습니다. 조쉬와 케니는 열정적이고 호기심이 많으며 박식합니다. 그들과 함께 떠난 클라우드 네이티브로의 여행에서 저도 많은 것을 배웠으며 특별한 재미를 맛볼 수 있었습니다. 이제 여러분이 그 재미를 누릴 차례입니다.

 

 

 

지은이

조쉬 롱Josh Long

 

스프링 개발 애드버킷(Advocate)이자 <인포큐닷컴InfoQ.com>의 자바 큐 편집자이며, 『스프링 레시피 2판』(에이프레스)을 비롯한 여러 권의 책을 저술했다. 그는 더서버사이드 자바 심포지움(TheServerSide Java Symposium), 스프링원(SpringOne), 오스콘(OSCON), 자바존(JavaZone), 데복스(Devoxx), 자바투데이즈(Java2Days) 등 국제적인 여러 컨퍼런스에 발표자로 참여했다. 스프링 소스 코드 작업을 하지 않을 때는 지역 자바 사용자 그룹이나 커피 숍에 주로 머무른다. 기술의 한계를 극복할 수 있는 솔루션을 좋아하며, 관심 분야는 확장성, BPM(Business Process Management), 그리드 처리, 모바일 컴퓨팅, '스마트'라는 수식어를 달고 있는 다양한 시스템이다. 스프링 소스 블로그(blog.springsource.org)에 글을 쓰며, 개인 블로그(joshlong.com)도 운영 중이다.

소프트웨어는 모두를 평등하게 한다소프트웨어는 코드를 통해 사람들에게 새로운 길을 제시하기도 한다소프트웨어는 고객에게 가치를 전달할 수 있으며사람들의 삶을 송두리째 바꾸기도 한다우리 책 『클라우드 네이티브 자바』의 한국어판이 출간된다니 영광이다더 많은 사람에게 수많은 길을 터주고 때로는 사람들의 삶을 바꾸는 소프트웨어를 만드는 데 이 책이 조금이라도 기여하기를 바란다이 책을 통해 여러분의 코드를 실 서비스로 배포하는 여행을 즐기기를!

 

 

 

케니 바스타니Kenny Bastani

 

피보탈의 스프링 개발자 애드버킷이다. 오픈소스 기여자이자 블로거로서 그래프 데이터베이스에서 마이크로서비스까지 다양한 주제로 열정적인 개발자 커뮤니티에서 활동 중이며, 오스콘, 스프링원 플랫폼, GOTO와 같은 여러 컨퍼런스에 발표자로 정기적으로 참여한다. 개인 블로그(kennybastani.com)에서 소프트웨어 아키텍처에 대한 강좌와 이벤트 주도 마이크로서비스와 서버리스 아키텍처를 만드는 오픈 소스 예제를 볼 수 있다.

 

우리의 책 『클라우드 네이티브 자바』가 한국어로 번역되다니윤진과 명운 님현희 님한국의 번역팀에 감사한다클라우드 애플리케이션에서 사용되는 패턴은 이전과 유사한 것도 있고새로운 것들도 존재한다자바 스프링 개발자들이 클라우드 기반의 애플리케이션을 구현하는 데 어떤 점들을 살펴야 하는지 이 책에 담기 위해 노력했다확장성이란 단순히 서버의 숫자를 늘려갈 수 있음을 의미하는 것이 아니다더 많은 요청과 워크로드를 처리하기 위해 그에 적합한 기법들을 사용해야 한다이런 방법은 애플리케이션의 규모가 크건 작건 언제나 적용될 수 있어야 하며이를 통해 각자의 기능을 하는 신축성 있는 애플리케이션을 모아서 하나의 거대한 서비스를 이룰 수 있다지난 2016년 한국 방문에서 발표했던 책을 한글로 공개할 수 있게 되어 매우 기쁘며많은 스프링 사용자에게 도움이 되기를 바란다.

 

 

 

옮긴이

 

정윤진

 

커널 및 드라이버 엔지니어로 경력을 시작해서 시스템 엔지니어를 지나 데브옵스를 거쳐 현재는 테크놀로지스트라는 생소한 일을 하고 있다. 카페24 연구소 초기 멤버로 각종 호스팅 서비스의 개발에 참여, 장단기 장애 해결과 일일 단위 문제 해결 등을 수행하다가, 알서포트에서 베어메탈과 AWS 기반의 글로벌 시스템을 한국, 일본, 미국과 유럽 등지에 구현했다. 이후 스파크 앤 어소시에이트에서 클라우드 스케일링 팀과 함께 애자일 기반으로 KT 클라우드 개발 및 국내 제조 회사의 사설 클라우드 개발에 참여했으며, 이후 아마존 웹 서비스의 솔루션 아키텍트로 활동하며 크고 작은 회사의 서비스의 클라우드 마이그레이션을 돕다가, 지금은 피보탈에서 일하고 있다.

 

 

 

오명운

 

백발 개발자를 꿈꾸며 언제나 버그와 씨름하는 개발자다. 번역을 통해 개발자 생태계에 조금이라도 기여하고자 노력한다. 옮긴 책으로는 『스프링 5.0 마이크로서비스 2/e, D3.js 실시간 데이터 시각화』(에이콘출판) 등이 있다. http://homoefficio.github.io/에서 개발 관련 지식을 나누고 있으며, 최근에는 분산 원장 기술에 관심을 가지고 공부 중이다.

 

 

 

장현희

 

19년째 개발자의 길을 걷고 있는 옮긴이는 지난 17년간 『사이트 신뢰성 엔지니어링』(제이펍)을 비롯한 20여 종의 개발 관련서를 집필하거나 번역했다. 현재는 호주 시드니에 있는 ROKT에서 테크니컬 스페셜리스트로 근무 중이며, 국내 개발자들에게 조금이라도 도움되는 번역서를 만들기 위해 틈틈이 노력 중이다. 앞으로도 책이라는 매개체를 통해 멀리서나마 국내 개발자들과 계속해서 소통할 계획이다.

 

 

 

"꼭 바꿔야 할 필요는 없다. 생존은 의무가 아니다." 이 역설적 표현은 시장에서의 생존이 각자의 선택이며, 시대의 변화에 따른 적응에 실패하는 것을 의미한다. 이 책은 변화하는 환경에 적응하고 생존하기에 관심이 있는 엔터프라이즈 스프링 개발자분들께 스프링 전문가들이 선사하는 최고의 선물일 것이다.

더보기

소프트웨어를 유지한다는 것은 ‘이전처럼 동작하게 하는 것'이 아니다. ‘변화하는 세상에서도 항상 유용하게 만드는 것’이다.” 스프링 부트 프로젝트의 리드인 피보탈의  웹(Phil Webb)은 스프링원 플랫폼 2017 발표(https://youtu.be/MQamx7-bCVI)에서 원자 이론학자 제시카 커(Jessica Kerr)의 말을 인용했다. 오늘날 웹 는 바일 기반의 서비스를 제공하는 대부분의 사는 소프트웨어와 이터를 다루는 능력 자체가  경쟁력이다. 아이디어를 동작하는 소프트웨어로 현하고, 이 소프트웨어를 가능한 한 리 고객에게 전달해서 그 가치를 검증하는 일을 반복하는 것은 사업의 성패에 매우 중요하다.

 

필 웹은 그날 발표에서 스프링 프로젝트와 스프링 프레임워크가 발표된 해에 함께 출시된 노키 6610의 전화기를  들었. 노키아 6610은 현재도 시장에서 구매할 수 있으며 심지어 수리도 가능하지만 오늘날 아무도 이 전화기를 쓰지 않는다. 대신, 모두가 더 많은 기능이 탑재된 최신 스마트폰을 사용한다. ‘전화기에 대한 세상의 인식이 바뀌었기 때문이다. 이처럼 변화를 수용하지 못한 기기는 시장에서 외면을 받기 마련이다. 반면 스프링 프로젝트는 여전히 많은 서비스 애플리케이션에서 사용되고 있으며 심지어 최근에는 더욱 더 많은 사용자를 보하는 중이다. 그 오랜 세월 동안 스프링은 꾸준히 시장의 변화를 반영해 기 때문이다. 이어서 필 웹은 스프링 부트 애플리케이션을 시작하고자 할 때 사용하는 스프링 이니셜라이저(http://start.spring.io) 통계를 예로 들었다. 스프링 MVC에 적용된 다양한 뷰(View) 기술 중 임리프(Thymeleaf)는 여전히 개발자들이 많이 사용하지만, 로시티(Velocity)의 경우는 그 사용량이 점점 어들다가 결국 사라졌다. 어느 시점에 스프링 이니셜라이저에서 이 벨로시티의 사용량이 제로가 된 이유는 스프링 에서 벨로시티를 더 이상 지원하지 않기로 결정했기 때문이다. 벨로시티 프로젝트는 더 이상 발하게 진행되지 않고 업데이트가 이루어지지 않았기 때문에, 스프링 사용자들에게 안정성, 보안  면에서 영향을 미칠수 있는 벨로시티를 제외했다는 것이다.

 

피보탈의 라우드 파운드리   총괄 시 파쿠리(Onsi Fakuhouri)는 스프링원 플랫폼 2017 발표(https://youtu.be/_uB5bBsMZIk)에서 "우리가 개념으로 설정 적지에 다다르는 정은 상상에서처럼 곧은 것이 아니라 수많은 난관과 어려움이 산재해 있으며, 그런 어려움을 모두 헤치고 막상 도착 은 원했던 목적지가 아닐 수도 있다."고 말했다. 따라서 이런 대한 위험 고 가는 것보다는, 관찰-선택-학습으로 이어지는 과정을 반복해야 한다고 덧붙였다. 우리가 행길에서 목적지를  갈 때도 이런 방법을 적용해  수 있다. 스마트폰에서 먼저 지도와 변 지형을 피고, 비교하고, 이동한다. 원하는 목적지에  르게 도달하려면 이 과정을 더 빠르게 반복할 수 있으면 .

 

스프링 프로젝트의 생존에서 우리는 온시가 한 관찰--학습의 반복 예를 살펴볼 수 있다. 스프링은 이 방법을 바탕으로 시장의 개발자들의 요구를 살피고, 이를 반영해서 그 결과를 관찰한다. 그 결과로 스프링 부트 프로젝트가 생했고, 스프링 클라우드 프로젝트가 탄생했다. 시장의 클라우드 기반 애플리케이션에 대한 요구는 더욱 더 강력해졌고, 이는 비단 더 은 가용성  확장성만 아니라 더 은 변화를 스프링 프레임워크에서 수용해야 을 의미했다. 따라서 오늘날의 수많은 스프링 프로젝트는 시장의 변화에 대한 요구를 수용하고 적용했기 때문에 노키아 전화기가 처한 상황과는 다르게 성공적으로 살아남은 결과물인 것이다. 그리고 오늘도 다양한 스프링 프로젝트들이 이 과정을 반복하고 있다.

 

스프링 부트는 더 이상 우리가 XML 설정에 고통받지 않아도 되는 방법을 제공한다. 매번 반복해야 하는 동일한 설정은 스프링 부트 팀이 제공하고, 개발자들은 필요한 기능을 의존관계 주입을 통해 이전과는 다른 방법으로 사용할 수 있다. 이 외에도 스프링 부트는 재사용성을 기반으로 한 다양한 장점을 제공한다. 이에 더하여, 스프링 클라우드는 여러분이 클라우드 기반의 애플리케이션을 구현하고자 할 때, 이 분야에 이미 선도적인 애플리케이션을 만들고 있는 플릭스나 아마존이 사용하는 기술을 스프링 부트의 방법으로 사용할 수 있도록 제공한다. 누군가가 이미 해결한 어려운 문제를 풀 때, 스프링에 익숙한 개발자라면 넷플릭스가 사용하는 주요 개념을 거의 즉시 적용 가능한 것이다.

 

뿐만 아니라, 클라우드는 이전에 있어왔던 도구와 이전에는 었던 도구들을 API 공개를 통해 사용할 수 있게 하는 능력을 제공한다. 오래전부터 있어왔던 관계형 데이터베이스는 예전처럼 서버에 운영팀이 설치해 주는 으로 준비되지 않는다. 데이터베이스 생성을 위한 API를 사용하면, 개발자는 필요한 데이터베이스를 즉시 을 수 있다. 관계형 데이터베이스뿐만 아니라 최근에는 다양한 메시지 큐, NoSQL 데이터베이스, 머신러닝 도구, 데이터소스 간 데이터 이동 지원을 위한 다양하고도 로운 도구들을 함께 지원한다. 이런 도구들을 개발자의 랩탑이나 데스크탑, 또는 서버에 매번 설치하는 것은 장히 어려운 일이다.

 

넷플릭스는 마 전,  사이클 개발자(Full Cycle Developer)라는 개념을 자사의 기술 로그에 발표했다(https://bit.ly/2k91j0b). 풀 사이클 개발자란 애플리케이션의 수명 주기 전체를 다룰 수 있는 개발자를 말한다. 소프트웨어 수명 주기는 디자인, 개발, 스트, 배포, 운영, 지원의 흐름을 말한다. 거의 대부분의 조직에서, 하나하나의 단계는 전문가들이 자신의 분야만 다루는 형태로 팀을 조직한다. 이런 조직 문화에서는 그 앞단계나 뒷단계를 자신의 일이 아닌 것으로 취급하거나, 전문성이 없으므로 서로 관여하지 않는 문화로 발전한다. 서로 관여하지 않는 사람들, 팀들이 공통된 하나의 소프트웨어에 관여하는 방식은 소프트웨어를 유지하는 데 상당한 비용이 들며, 더욱이 소프트웨어의 필요성을 유지하는 데 매우 해로운 방법이다. 이에 반해 넷플릭스는 자사의 모든 개발자가 자신이 만든 드를 스스로 운영할 수 있는 방법을 만들어 적용하고 있다. 즉 소프트웨어 수명 주기 전체를 개발자가 직접 관리하게 하는 것이다. 이것이 가능한 심 요인은 바로 개발자들에게 사용이 편리한 다양한 플랫폼 도구를 제공하는 것이다. 자신의 소프트웨어를 직접 운용할 때 필요한 관찰을 운 모니터링으로 제공하고, 실행을 배포와 연결로서 지원하며, 로그와 로그의 분석을 통한 학습을 위한 도구를 제공하는 것이다. 그리고 클라우드 파운드리는 정확히 이 지점에 위치한다. 모니터링, 로깅, 배포와 애플리케이션의 운영 환경 제공을 통해 개발자들은 풀 사이클 개발자에 한걸음 더 가까워질 수 있을 것이다.

 

스프링 애플리케이션과 이 스프링 애플리케이션이 동작하는 클라우드 파운드리 환경의 조합을 통해, 여러분은 필 웹과 온시 파쿠리가 언급한 "시장의 변화에 적응하고, 언제나 필요한 애플리케이션으로 유지할 수 있는데 필요한 관찰-실행-학습의 반복"을 더욱 빠르게 실행할 수 있다. 클라우드 파운드리가 없어도 직접 서버를 설정하는 방법을 사용할 수 있겠지만, 이 방법이 클라우드 파운드리가 제공하는 방법보다 빨라지기 위해서는 아마도 수많은 별도의, 그리고 누군가는 이미 했던 일의 반복일 것이다. 이 시간에 스프링 애플리케이션 자체에 중하는 것이, 여러분에게 더 도움이 되지 않을까 한다. 이 책 『클라우드 이티브 자바』에서는 예전의 개발 방식에 익숙한 개발자들에게 '현 시대에 필요한 개념과 기술'을 스프링의 방법으로 제공할 것이다. 따라서 스프링에 익숙한 개발자라면, 빠른 도로 현대 개발 기술을 습득할 수 있도록 는 역할을 수행하리라 믿는다.

 

 책은 여러분의 소프트웨어가 항상 유용할 수 있도록, 변화를 수용할 수 있는 스프링 도구들을 소개한다. 이일민 님이 지은 『토비의 스프링』이 클라우드 시대 이전의 자바 개발자에게 스프링의 길을 열어준 책이라면, 이 『클라우드 이티브 자바』는 클라우드가 기본인 시대에 필요한 기술을 스프링 개발자들에게 전달하는 입문서와 같은 책이다.

 

또한, 이 책에서는 클라우드 파운드리를 소개하며 여러분이 작성한 스프링 애플리케이션이 클라우드의 장점을 바탕으로 동작하는 경을 제공하는 동시에, 스프링 애플리케이션에 필요한 다양한 서비스들을 즉시 준비해서 연결할 수 있는 방법을 설명한다. 애플리케이션과 데이터 서비스 간 사용하는 '바인딩(binding)'이라는 방법은, 개발자가 데이터소스에 대한 네트워크 정보나 인증 정보 등을  필요가 없도록 시스템에서 연결을 제공하는 것을 말한다. 즉 연결에 필요한 정보들은 시스템이 알아서 처리하게 하고, 개발자는 필요한 데이터소스의 이름만 알면 애플리케이션에 바인딩해서 사용할 수 있는 환경을 제공한다. 이것은 개발 의만을 제공하는 것이 아니라, 클라우드 환경 위에서 제든 생성되고 사라질 수 있는 정보의 취급 방법을 변경함으로써 확장성과 가용성을 높이는 방법이기도 하다. 

아울러, 바인딩뿐만 아니라, 마이크로서비스 구현을 위한 기법들도 소개한다. 마이크로서비스에 관한 대부분의 첫 질문이 데이터의 분리에 관한 것인데, 9, '데이터 관리'에서는 경계 지어진 컨텍스트를 바탕으로 일반적인 리테일 서비스의 데이터 구분 방법과, 각 데이터에 맞는 데이터 스토어 선택 방법을 스프링 코드와 함께 알려준다.  책에서 다루는 내용은 생각보다 매우 광범위하며, 저자들의 폭넓은 설명은 빠른 변화의 수용과 클라우드 기반 환경에서의 애플리케이션 구동에 필요한 내용을 전반적으로 아우른다. 독자들은 이 책 한 권만으로도 다른 수많은 서적을 별도로 읽어 취합해야 볼 수 있는 내용을 한꺼번에 둘러 볼 수 있으며, 필요한 경우에는 좀 더 알고자 하는 부분을 특정해서 서술하는 다른 책을 살펴보는 방식의 접근을 취할 수 있다.

 

"꼭 바꿔야 할 필요는 없다. 생존은 의무가 아니다." 이 역설적 표현은 시장에서의 생존이 각자의 선택이며, 시대의 변화에 따른 적응에 실패하는 것을 의미한다. 이 책은 변화하는 환경에 적응하고 생존하기에 관심이 있는 엔터프라이즈 스프링 개발자분들께 스프링 전문가들이 선사하는 최고의 선물일 것이다.

- 옮긴이 일동

 

 

 

 

90년대 후반, 2000년대 초반을 지나 개인 컴퓨터와 인터넷의 발달은 동시에 서버 시장과 서버 애플리케이션의 확산을 불러왔다. 이후 모바일 폭발로 불리는 현상이 스마트폰의 등장과 함께 발생하며, 폭발적으로 성장한 클라이언트 요청 규모를 처리가 가능한 클라우드가 등장했다. 이 새로운 환경에 적합한 애플리케이션을 만들면, 이 거대한 클라이언트 요청에 부합하여 전례없는 규모의 확장과 빠른 배포가 가능하다. 이 책은 자바 스프링 개발자들에게 이러한 확장과, 더 빠른 배포에 적합한 '클라우드 네이티브' 애플리케이션을 만드는 데 필요한 기술을 담고 있다. 클라우드에 관심 있는 엔터프라이즈 자바 개발자 분들에게 꼭 필요한 책이다.

 

- 정윤진

 

마이크로서비스라는 말을 들어본 지 5년이 넘은 것 같습니다. 작게 나누어 빨리 만들고 빨리 실패하고 빨리 진화시키는 일이 말처럼 쉬운 일은 아니지만 분명한 장점이 있기 때문에 많은 시행 착오에도 불구하고 꾸준히 시도되고 있습니다. 이제는 여기에서 한걸음 더 나아가 배포 환경을 클라우드로 가져가면서 데브옵스로의 전환이 시작되고 있습니다. 이 책은 클라우드 네이티브 개발의 A to Z와 같은 책으로서 개념 정리 및 상세한 예제를 통해 여러분을 클라우드 네이티브 개발의 세계로 이끌어 줄 것입니다.

 

- 오명운

 

마이크로서비스 아키텍처는 이제 클라우드 기반의 분산 환경을 기반으로 하는 애플리케이션 개발 분야에서 주류 아키텍처로 자리매김하고 있지만, 제대로 된 마이크로서비스 아키텍처를 구축하고 이를 기반으로 확장성 있는 애플리케이션을 개발하는 것은 결코 쉬운 일이 아닙니다. 저는 지금 약 5년째 마이크로서비스 기반의 애플리케이션을 C#으로 개발 중이지만, 이 책을 번역하면서 자바 개발자들에 대한 부러움에 몸서리를 칠 수밖에 없었습니다. 마이크로서비스를 구현하기 위해 필요한 모든 플랫폼이 준비된 환경이 제게도 허락되었다면 저의 지난 5년이 이처럼 어렵고 힘들지는 않았을 테지요

이 책은 클라우드 네이티브 애플리케이션을 마이크로서비스 아키텍처를 기반으로 개발하고 운영하기 위해 필요한 정보를 폭넓게 다루는 효과적인 입문서입니다. 단순히 클라우드 파운드리라는 플랫폼의 소개를 넘어, 효율적이고 확장가능하며, 신뢰할 수 있고 스스로 회복할 수 있는 분산 애플리케이션 개발에 대한 기법과 노하우가 고스란히 담겨있는 이 책은, 마이크로서비스라는 바다를 항해하는 데 꼭 필요한 길잡이가 되어 줄 것입니다. 클라우드 및 분산 환경에 대한 저자들의 폭넓은 노하우와 전문성, 그리고 이에 뒤지지 않는 경험과 역량을 보유하신 역자분들의 노력이 결집된 이 책을 통해 마이크로서비스 아키텍처로의 첫 발을 자신있게 내딛으시기를 바랍니다.

 

- 장현희

 

 

 

차례

 

[1부 기초]1장 클라우드 네이티브 애플리케이션2장 부트캠프: 스프링 부트와 클라우드 파운드리 소개3장 12요소 애플리케이션 설정4장 테스트5장 애플리케이션 마이그레이션
[2부 웹 서비스]6장 REST API7장 라우팅8장 엣지 서비스
[3부 데이터 통합]9장 데이터 관리10장 메시징11장 배치 처리와 태스크12장 데이터 통합
[4부 운영 환경]13장 관측 가능한 시스템14장 서비스 브로커15장 지속적 전달
[5부 부록]부록 A 자바 EE와 스프링 부트부록 B [한국어판 특별부록] 클라우드 파운드리 환경의 준비와 활용

 

 

더보기

[1부 기초]

1장 클라우드 네이티브 애플리케이션

아마존 사례

플랫폼의 약속

패턴

확장성

신뢰도

애자일성

넷플릭스 사례

__마이크로서비스

__일체형 쪼개기

__넷플릭스 OSS

__클라우드 네이티브 자바

12요소 방법론

__코드베이스

__의존 관계

__설정

__지원 서비스

__빌드, 릴리스, 실행

__프로세스

__포트 바인딩

__동시성

__처분성

__개발/운영 짝맞춤

__로그

__관리 프로세스

 

정리

 

2장 부트캠프: 스프링 부트와 클라우드 파운드리 소개

스프링 부트

스프링 이니셜라이저

스프링 툴 스위트 시작하기

__스프링 툴 스위트 설치

__스프링 이니셜라이저로 새 프로젝트 생성

스프링 가이드

__STS에서 스프링 가이드 따라하기

설정

클라우드 파운드리

정리

 

3 12요소 애플리케이션 설정

혼동스러운 설정 스프링 프레임워크의 설정 지원

__설정 정보 이해를 위한 PropertyPlaceholderConfigurer 클래스

__Environment 추상화와 @Value __프로파일

스프링 부트 방식의 설정 스프링 클라우드 설정 서버로 중앙 집중형 설정 사용하기

__스프링 클라우드 설정 서버

__스프링 클라우드 설정 클라이언트

__보안

새로고침 가능한 설정

정리

 

4장 테스트

테스트의 구성

스프링 부트 애플리케이션 테스트

통합 테스트

__테스트 슬라이스

__모의 기법 활용

__@SpringBootTest로 서블릿 컨테이너 설정

__슬라이스

전 구간 테스트

__분산 시스템 테스트

__컨슈머 주도 계약 테스트

__스프링 클라우드 컨트랙트

정리

 

5장 애플리케이션 마이그레이션

계약

애플리케이션 환경 마이그레이션

__바로 가져다 쓰는 빌드팩

__커스텀 빌드팩

__컨테이너화된 애플리케이션

애플리케이션을 클라우드로 옮기기 위한 가벼운 리팩토링

__지원 서비스 연동

__스프링을 이용한 서비스 짝맞춤

정리

 

[2부 웹 서비스]

6 REST API

레너드 리차드슨의 성숙도 모델

스프링 MVC를 이용한 간단한 REST API 

컨텐트 협상

__바이너리 데이터 읽고 쓰기

__구글 프로토콜 버퍼

에러 처리

하이퍼미디어

__미디어 타입과 스키마

API 버저닝

REST API 문서화

클라이언트

__편리한 REST 클라이언트 제품

__RestTemplate

정리

 

7장 라우팅

DiscoveryClient 추상화

클라우드 파운드리 라우트 서비스

정리

 

8장 엣지 서비스

Greetings 서비스

간단한 엣지 서비스

넷플릭스 페인

넷플릭스 주울을 통한 필터링과 프록시

__커스텀 주울 필터

엣지 서비스의 보안

OAuth

__서비스 쪽 애플리케이션

__HTML5와 자바스크립트 단일 페이지 애플리케이션

__사용자 없는 애플리케이션

__신뢰할 수 있는 클라이언트

스프링 시큐리티

스프링 클라우드 시큐리티

__스프링 시큐리티 OAuth 인가 서버

__Greetings 자원 서버 보안 조치

__OAuth 보안이 적용된 단일 페이지 애플리케이션 만들기

정리

 

[3부 데이터 통합]

9장 데이터 관리

데이터 모델링

__관계형 데이터베이스 관리 시스템

__NoSQL

스프링 데이터

__스프링 데이터 애플리케이션의 구조

__도메인 클래스

__리포지토리

__도메인 데이터를 위한 자바 패키지 구성

JDBC를 사용한 RDBMS 접근 시작해보기

스프링의 JDBC 지원

스프링 데이터 예제

스프링 데이터 JPA

__계정 서비스

__통합 테스트

스프링 데이터 몽고디비

__주문 서비스

__통합 테스트

스프링 데이터 네오포제이

__재고 서비스

__통합 테스트

스프링 데이터 레디스

__캐싱

정리

 

10장 메시징

스프링 인티그레이션을 사용한 이벤트 주도 아키텍처

__메시징 종단점

__간단한 컴포넌트에서 복잡한 시스템으로

메시지 브로커, 브릿지, 경쟁적 컨슈머 패턴, 이벤트 소싱

__발행-구독

__점대점

스프링 클라우드 스트림

__스트림 프로듀서

__스트림 컨슈머

정리

 

11장 배치 처리와 태스크

배치 작업

스프링 배치

__첫 번째 배치 작업

스케줄링

메시징을 사용한 스프링 배치 작업의 원격 파티셔닝

태스크 관리

프로세스 중심의 워크플로우 통합

메시징을 사용한 분산

정리

 

12장 데이터 통합

분산 트랜잭션

장애의 격리와 단계적 성능 저하

사가 패턴

CQRS

__불만 접수 API

__불만 접수 통계 API

스프링 클라우드 데이터 플로우

__스트림

__태스크

__REST API

__데이터 플로우 클라이언트

정리

 

[4부 운영 환경]

13장 관측 가능한 시스템

만들면 운영까지

마이크로서비스 살인 미스테리

12요소 운영

새로운 계약

관측성

푸시와 풀 기반의 관측성 차이와 분석

스프링 부트 액추에이터를 사용한 애플리케이션 현재 상태 수집하기

메트릭

/info 종단점을 사용해서 서비스 분별하기

정상동작 상태 확인

감사 이벤트

애플리케이션 로깅

__로그 출력의 지정

__로그 수준의 지정

분산 추적

__스프링 클라우드 슬루스로 실마리 찾기

__어느 정도의 데이터라야 충분할까

__오픈 집킨: 수천 개의 추적만큼 가치 있는 한 장의 사진

__그 밖의 플랫폼과 기술

대시보드

__히스트릭스 대시보드를 사용한 서비스 모니터링

__코드센트릭 스프링 부트 어드민

__오디나 마이크로서비스 대시보드

__피보탈 클라우드 파운드리의 앱스매니저

치유

정리

 

14장 서비스 브로커

지원 서비스의 수명 주기

플랫폼으로서의 관점

스프링 클라우드 클라우드 파운드리 서비스 브로커로 사용자 정의 서비스 브로커 구현하기

__간단한 아마존 S3 서비스 브로커

__서비스 카탈로그

__서비스 인스턴스의 관리

__서비스 바인딩

__서비스 브로커의 보호

배포

__보쉬를 이용한 릴리스

__클라우드 파운드리를 활용한 릴리스

아마존 S3 서비스 브로커 등록하기

아마존 S3 서비스 인스턴스 생성하기

__서비스 인스턴스 활용하기

S3 클라이언트 애플리케이션

전체적인 동작 확인하기

정리

 

15장 지속적 전달

지속적 통합을 넘어서

__플리커와 엣시의 존 알스포

__넷플릭스의 에이드리안 코크로프트

__아마존의 지속적 전달

파이프라인

테스트

마이크로서비스 환경에서의 지속적 전달 

도구

__컨코스

__컨테이너

마이크로서비스의 지속적 전달

__컨코스 설치

__기본적인 파이프라인 디자인

__지속적 통합

컨슈머 주도 계약 테스트

__사용자 마이크로서비스의 파이프라인

데이터

운영 환경으로!

 

[5부 부록]

부록 A 자바 EE와 스프링 부트

부록 B [한국어판 특별부록] 클라우드 파운드리 환경의 준비와 활용

 

 

 

 

 

 

댓글