스프링 부트 2.0 2/e [마이크로서비스와 리액티브 프로그래밍]
- 원서명Learning Spring Boot 2.0 - Second Edition: Simplify the development of lightning fast applications based on microservices and reactive programming (ISBN 9781786463784)
- 지은이그렉 턴키스트(Greg L. Turnquist)
- 옮긴이김완철, 권용길
- ISBN : 9791161752624
- 33,000원
- 2019년 01월 30일 펴냄
- 페이퍼백 | 460쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 프로그래밍 언어
판매처
개정판책 소개
가장 최신 버전의 소스 파일은 다음 주소에서 다운 받으실 수 있습니다.
예제 소스 구동 시 주의사항도 확인하실 수 있습니다.
https://github.com/david100gom/Spring-Boot-2.0
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
스프링 부트의 최신 버전으로 기본적인 내용부터 마이크로서비스에 이르기까지 다양한 기능들을 소개하고, 예제를 통해서 스트링 부트의 장점이 무엇이고, 왜 스프링 부트를 사용해야 하는지에 대한 답을 제시해 준다. 기존에 스프링 프레임워크를 사용해본 자바 개발자라면 쉽게 따라 하면서 익힐 수 있으며, 마이크로서비스나 클라우드 네이티브와 같은 최신 트렌드에 맞는 내용도 다루고 있어, 이미 스프링 부트에 익숙해한 자바 개발자들도 흥미롭게 읽을 수 있을 것이다.
추천의 글
바야흐로 클라우드-네이티브의 시대에 서 있는 지금, 가장 중요한 자리에 스프링 부트가 있다. 이 책은 스프링 부트의 세계로 입문하거나 시스템에 도입하고자 할 때 필요한 기본 지식에서부터 다양한 시스템에 접목할 수 있는 예제에 이르기까지 전반적인 범위를 다룬다.
무엇보다 2장의 리액티브 프로그래밍에 대한 이해도를 높여주는 내용을 포함해 6장부터 다루는 AMQP 메시징 및 마이크로서비스, 웹 소켓과 관련된 여러 가지 기술은 한 번쯤은 다뤄봐야 할 최신 트렌드라 할 수 있다.
자바를 이용한 리액티브 프로그래밍에 관심이 있거나 스프링 부트로 서비스를 구축하려는 조직 및 프로그래머에게 권한다.
이용혁 / KBSYS
우리는 동료와 책만큼이나 스프링을 통해서도 많은 것을 배운다. 그런 스프링이 이제 스프링 부트 2.0까지 발표됐고, 스프링 부트 2.0은 이전 버전에 비해 크게 변화했다. 비동기 통신은 더 강해졌고, 패러다임은 달라졌다. 이 기본서는 달라진 핵심 내용을 설명해주고, 예제를 통해 그 원리를 이해시켜준다. 개발 시에 도움 되는 개발자 도구 사용 방법과 테스팅 방법도 다룬다. 이 책을 읽으면서 다시 한번 스프링 부트의 매력을 느낄 수 있었다. 여러분들도 그러한 시간이 되길 바란다.
안광운 / 카카오
스프링 부트 2.0에 대해 알고 싶던 차에 단비와 같은 책이 번역돼 나왔다. 스프링 5와 스프링 부트 2.0의 가장 큰 변화는 리액티브다.
기존 통신 방식이 동기 통신이었고, MVC 기반의 모노리틱 아키텍처가 적합한 프레임워크였다면, 스프링 부트 2.0은 비동기 통신이 MSA에 적합한 구조로 탈바꿈된 내용을 소개한다. 리액티브 스프링 데이터(Reactive Spring Data), 웹 플럭스(Web-Flux) 중심의 구현을 소개할 뿐만 아니라 클라우드 파운더리(Cloud Foundary) 배포나 AMQP 등을 이용한 메시징, 스프링 부트 기반의 마이크로 서비스 소개를 통해 스프링 부트 2.0을 활용해 효율적인 개발/배포를 할 수 있는 기술들을 소개한다. 이미 스프링을 사용하고 있고, 스프링 부트를 사용한다면 이 책에서 소개한 내용을 바탕으로 스프링 부트 2.0을 적용하는 데 많은 도움이 될 것이다.
장회수 / 우아한형제들
실용적인 목차 선정, 상세한 설명 그리고 완전한 예제 코드까지 꼼꼼하게 작성된 인상적인 책이다. 스프링 부트 2.0의 기술적 내용이 잘 정리돼 있어 이해하기가 쉽다. 또한 최신 트렌드 기술과 스프링 부트를 함께 응용하는 목차와 예제가 스프링 부트의 특징을 잘 반영하고 있다. 잘 정리된 교재로 스프링 부트를 배우고 싶은 초보 개발자, 실무에서 빠르게 서비스를 구현하고 싶은 생산성을 중시하는 중급 이상 개발자 모두에게 유용한 책이다. 원서를 편안한 한글로 볼 수 있어서 더욱 좋다. 더욱이 실무에서 스프링 부트를 사용하고 있는 경험 많은 전문 개발자의 번역이라 믿고 볼 수 있는 추천할 만한 책이다.
원종석 / 레드햇
이 책에서 다루는 내용
■ 번거로움을 최소화하면서 강력한 프로덕션 수준의 애플리케이션 및 서비스 생성하기
■ 하나의 아티팩트로 여러 환경을 지원하고, 프로덕션급 기능 지원 추가하기
■ 다양한 속성을 통해 앱을 조정하는 방법 알아보기
■ 커스텀 매트릭스을 사용해 게시되고, 소비된 메시지 수 추적하기
■ 애플리케이션의의 보안 모델 강화
■ 스프링 부트에서 리액티브 프로그래밍 사용하기
■ 경량 단위 테스트에서 임베디드 웹 컨테이너 통합 테스트에 이르기까지 모든 것을 빌드하기
이 책의 대상 독자
초보자와 숙련된 스프링 개발자 모두를 대상으로 한다. 스프링 부트 설정을 오버라이트하는 법을 가르쳐줄 것이며, 복잡한 구성을 정의할 필요가 없게 해 줄 것이다.
이 책의 구성
1장, ‘자바로 빠른 시작’에서는 최소한의 코드 및 빌드 설정을 사용해 임베디드 웹 컨테이너에서 실행 중인 웹 애플리케이션을 빠르게 작성하고, 일부 데이터에 액세스한 후 클라우드에 배포하는 방법에 대해 설명한다.
2장, ‘스프링 부트 리액티브 웹’에서는 스프링 웹 플럭스, 프로젝트 리액터 및 타임리프 템플릿 엔진을 사용해 소셜 미디어 서비스를 구축해 이미지를 업로드하는 방법을 보여준다.
3장, ‘스프링 부트를 이용한 리액티브 데이터 액세스’에서는 스프링 데이터 몽고 DB를 리액티브-파워 데이터 저장소로 선택해 소셜 미디어 플랫폼에 연결하는 방법에 대해 설명한다. 스프링 부트가 어떻게 앱을 자동 설정해 데이터를 유지하는지 알게 될 것이다.
4장, ‘스프링 부트 테스트’에서는 JUnit으로 단위 테스트를 작성하는 방법, 애플리케이션의 실제 컴포넌트를 사용하는 슬라이스 테스트, 완전한 임베디드 컨테이너 테스트에 대해 설명한다. 또한 웹 브라우저 구동 테스트 툴킷에 대한 자동 설정 정책을 작성하고, 이를 테스트하는 방법도 설명한다.
5장, ‘스프링 부트 앱을 위한 개발자 도구’에서는 DevTools, LiveReload 및 IDE를 클라우드에 연결하는 것과 같은 개발자 경험을 향상시키기 위해 여러 가지 도구를 제공한다.
6장, ‘스프링 부트로 AMQP 메시징 하기’에서는 래빗MQ를 메시지 브로커로 사용하는 방법을 설명하고 컴포넌트 간 안정적이고 스트리밍되는 메시지 서비스를 리액티브적으로 구축한다.
7장, ‘스프링 부트의 마이크로서비스’에서는 스프링 클라우드와 소셜 미디어 플랫폼을 더 작고 관리하기 쉬운 앱으로 분해해 서로 동적으로 대화하는 기능을 소개한다.
8장, ‘스프링 부트의 웹 소켓’에서는 다양한 마이크로서비스에 관심 있는 모든 사람에게 업데이트를 보내 사용자 경험을 향상시키는 방법을 보여준다. 또한 모든 웹 소켓 메시지를 래빗MQ 브로커를 통해 라우팅하는 방법을 알 수 있다.
9장, ‘스프링 부트로 앱 보안’에서는 URL-기반 및 메서드-기반 전략을 사용해 프로덕션 소셜 미디어 플랫폼을 보호할 수 있어, 등록된 사용자만 온라인에 접속할 수 있으며 승인된 관리자와 소유자만 실제로 업로드된 이미지를 삭제할 수 있다.
10장, ‘스프링 부트로 앱 프로덕션하기’에서는 프로파일-기반 구성을 사용해 로컬 및 클라우드-기반 상황을 구분하고, 모든 환경에 대한 코드를 다시 작성하지 않고 애플리케이션 설정을 조정할 수 있는 커스텀 속성을 생성해 애플리케이션을 번들하고 프로덕션으로 배포하는 방법을 보여준다.
목차
목차
- 1장. 자바로 빠른 시작
- 시작하기
- 스프링 부트 스타터
- 스프링 부트 애플리케이션 실행
- 스프링 부트의 속성 지원에 대해 알아보기
- 애플리케이션을 실행 가능한 JAR 파일로 묶기
- 클라우드 파운드리에 배포
- 프로덕션-준비 지원 추가
- 일반적인 헬스를 위한 앱 핑(Pinging)
- 매트릭스
- 요약
- 2장. 스프링 부트 리액티브 웹
- 스프링 이니셜라이저를 이용한 리액티브 웹 애플리케이션 생성하기
- 리액티브 프로그래밍의 원리 배우기
- 리액터 타입 소개
- 임베디드 네티에서 아파치 톰캣으로 전환
- 리액티브 스프링 웹 플럭스와 고전적인 스프링 MVC 비교하기
- 왜 스프링이 이것을 하고 있는가?
- 모노/플럭스-기반 엔드포인트 표시
- 리액티브 ImageService 생성하기
- 리액티브 파일 컨트롤러 생성하기
- 리액티브 프로그래밍을 사용해야 하는 이유
- 타임리프 템플릿과 상호 작용
- 비동기에서 동기화로 이동하는 방법을 설명하는 것은 쉽지만, 그 반대는 아니다
- 요약
- 3장. 스프링 부트를 이용한 리액티브 데이터 액세스
- 리액티브 데이터 저장소를 사용해 진행
- 문제 해결
- 스프링 부트로 스프링 데이터 저장소 연결하기
- 리액티브 저장소 생성
- 모노/플럭스 및 오퍼레이션 체인을 통해 데이터 가져오기
- 커스텀 파인더 생성하기
- Example로 쿼리하기
- MongoOperations로 쿼리하기
- 리액티브 오퍼레이션 로깅
- 요약
- 4장. 스프링 부트 테스트
- 테스트 의존성
- 단위 테스팅
- 슬라이스-기반 테스팅
- 임베디드 몽고 DB로 테스팅
- 실제 몽고 DB 데이터베이스로 테스팅
- 웹 플럭스 컨트롤러 테스팅
- 임베디드 스프링 부트 앱 테스트
- 커스텀 스프링 부트 자동 설정 테스팅
- 요약
- 5장. 스프링 부트 앱을 위한 개발자 도구
- 핫 코드 리로딩을 위해 스프링 부트의 DevTools 사용
- 스프링 부트의 자동 설정 보고서 사용
- 로컬 변경 및 대상 시스템에서 보기
- 커스텀 헬스 체크 작성
- /application/info에 빌드 데이터 추가
- 커스텀 매트릭스 생성
- 추가 액추에이터 엔드포인트 작업
- 요약
- 6장. 스프링 부트로 AMQP 메시징하기
- 래빗MQ 시작하기
- 래빗MQ 브로커 설치
- 래빗MQ 브로커 시작
- 기존 애플리케이션에 메시징을 새로운 컴포넌트로 추가
- 메시지 생성자/메시지 소비자 생성하기
- 코멘트 표시
- 코멘트 작성
- AMQP 기본 사항
- 메시지 플로를 추적하는 커스텀 매트릭스 추가
- 스프링 클라우드 스트림(래빗MQ 포함)에서 엿보기
- 스프링 클라우드 소개
- 스프링 클라우드 스트림을 이용한 로깅
- 요약
- 래빗MQ 시작하기
- 7장. 스프링 부트의 마이크로서비스
- 마이크로서비스에 대한 간단한 입문서
- 유레카를 사용해 동적으로 서비스를 등록 및 검색
- @SpringCloudApplication 소개
- 클라이언트-사이드 로드 밸런싱을 통해 다른 마이크로서비스를 호출
- 마이크로서비스 서킷 브레이커 구현
- 서킷 모니터링
- 마이크로서비스 설정을 컨피그 서버로 오프로드
- 요약
- 8장. 스프링 부트의 웹 소켓
- 저장된 코멘트를 채팅 서비스에 게시하기
- 웹 소캣 트래픽을 처리하기 위한 채팅 서비스 생성하기
- 웹 소캣 메시지 중개
- 저장된 코멘트 브로드캐스트
- 웹 소캣 핸들러 구성
- 웹 페이지에서 웹 소켓 메시지 소비
- 완전 비동기식 웹 클라이언트로 이동
- 서버에서 AJAX 호출 처리
- 사용자 채팅 소개
- 사용자별 메시지 보내기
- 인증 없이 사용자 등록
- 사용자를 세션에 연결
- 사용자 간 메시지 보내기
- 최종 제품 체크 아웃
- JSR 356 대 스프링 WebFlux 메시징
- 요약
- 9장. 스프링 부트로 앱 보안
- 스프링 부트 애플리케이션 보안
- 스프링 세션 사용하기
- 게이트웨이 API 작성
- 채팅 마이크로서비스 보안
- 인증 대 권한 부여
- 다른 마이크로서비스와 세션 세부 정보 공유
- 이미지 마이크로서비스 보안
- 이미지 소유권 연결
- 인증 메서드
- 권한 부여 확인을 사용해 UI 조정
- 웹 소켓 보안
- 통신 추적
- 컨피그 서버 보안
- 유레카 서버 보안
- 요약
- 10장. 스프링 부트로 앱 프로덕션하기
- 프로파일-기반 빈 세트
- 설정 등록 정보 빈 생성
- 프로덕션 환경 설정 오버라이딩
- @ConfigurationProperties 대 @Value
- 앱을 클라우드 파운더리에 푸시하고 설정 조정
도서 오류 신고
정오표
정오표
[p.71 : 주의사항]
일반적으로 차단되므로
->
일반적으로 블로킹되므로
[p.73 : 소스 코드 6행]
[p.73 : 아래에서 2행]
s.split(" ")
->
s.split("")
[p.75 : 아래에서 6행]
중첩을 제거한다.
->
중첩구조를 제거한다.
[p.76 : 주의사항]
더 빠르게 실행하려면 스레드를 사용해야 한다. 스레드가 많을수록 빠르다. 이것은 경험적 연구에서 나온 것이 아니다.
->
'더 빠르게 실행하려면 스레드를 사용해야 한다. 스레드가 많을수록 빠르다.' 이 주장은 경험적 연구에서 나온 것이 아니다.
[p.102 : 아래에서 10행]
findAllImages() 메서드를 차단하는 방법을
->
findAllImages() 메서드를 블로킹하는 방법을
[p.103 : 주의사항]
데드락 상황을 피하거나 절대로 오지 않을 수 있는 응답을 기다리려면
->
데드락 상황이나 절대로 오지 않을 수 있는 응답을 기다리는 상황을 피하려면
[p. 103 : 아래에서 2행]
이 경우 응답을 기다리는데 최대 30초가 걸렸다.
->
이 경우 응답을 기다리는 최대 시간을 30초로 정했다.
[p.105 : 아래에서 2행]
2장, '스프링 부트 리액티브 앱'에서는 ... 방법을 학습했다.
->
이번 장에서는 ... 방법을 학습할 것이다.