Top

스프링 부트 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장, ‘스프링 부트로 앱 프로덕션하기’에서는 프로파일-기반 구성을 사용해 로컬 및 클라우드-기반 상황을 구분하고, 모든 환경에 대한 코드를 다시 작성하지 않고 애플리케이션 설정을 조정할 수 있는 커스텀 속성을 생성해 애플리케이션을 번들하고 프로덕션으로 배포하는 방법을 보여준다.

저자/역자 소개

지은이의 말

스프링 부트는 개발자, 커뮤니티 및 고객에 초점을 맞춤으로써 일반적으로 소모되는 막대한 시간을 줄였다. 피보탈(Pivotal)의 수석 기술 디렉터리인 앤드류 클레이 샤퍼(Andrew Clay Shafer)는 가장 유명한 콘퍼런스에서 “올해 서버를 훌륭하게 설정했다. CEO도 없었다”라고 발표했다. 웹 컨테이너, 데이터베이스 커넥터, 템플릿 뷰 리졸버 및 기타 지루한 인프라를 설정하는 데 낭비할 시간은 없다. 하지만 이를 너무 오랫동안 해왔기 때문에 그것이 업계의 중요한 일부분이라고 생각한다.
스프링 부트는 애플 카트를 뒤엎고 고객이 원하는 기능을 처음으로 만들 수 있다는 것을 보여줬다. 피보탈의 수석 부사장인 제임스 와터(James Watters)가 수많은 프레젠테이션에서 언급했듯이, 가치보다 더 중요한 것에 집중하면 고객에게 진정한 신뢰를 심어준다. 이와 같은 사실은 자바 개발자 두 명 중 거의 한 명꼴인 46%가 스프링 포트폴리오의 일부를 사용하고 있다는 것을 보여주는 최신 제로 턴 어라운드(Zero Turnaround)의 백서에 의해 입증됐다. 스프링 부트는 수많은 고객의 문제를 해결하고 있으며, 이 책은 여러분이 이해의 갭을 줄이는 데 도움이 될 것이다.

지은이 소개

그렉 턴키스트(Greg L. Turnquist)

1997년부터 소프트웨어 전문가로 일하고 있으며, 2002년에는 해리스의 35억 달러 상당의 FAA 텔코 프로그램에 참여한 시니어 소프트웨어 팀에 합류해 소프트웨어 팀을 관리하면서 기업용 애플리케이션을 설계했다. 시간 외에 네이션-와이드 시스템에 도움을 줬고, 자정에 장애가 발생하고, 소프트웨어가 분리되는 일에 익숙하다. 2010년에는 VMware의 SpringSource 부문에 합류했고, VMware는 2013년 피보탈(Pivotal)로 분사됐다. Junky, Java geek 및 JavaScript Padawan 테스트용 스크립트로 스프링 데이터 팀의 멤버이자 스프링 세션 몽고 DB의 리더다. 스프링 부트, 스프링 HATOS 및 스프링 데이터 REST에 중요한 공헌을 했고, 스프링의 Getting Started Guides의 편집자로도 활약했다.
팩트출판사에서 출간된 기술 베스트셀러인 『Python Testing Cookbook』(2011)과 『Learning Spring Boot』(2017)를 집필했다. 투기적인 허구 액션과 모험 소설인 『Darklight』(Astraea Press, 2018)를 집필하며 마술과 크로스 스워드의 세계로 들어섰다.
오번 대학교에서 컴퓨터 공학 석사 학위를 받았으며, 미국에서 가족과 함께 살고 있다.

옮긴이의 말

우리는 언제부터인가 자바 웹 개발을 얘기할 때, 그 밑바닥에 스프링 프레임워크가 있다는 전제 조건을 갖고 시작한다. 그만큼 자바 개발자들에게는 없어서는 안 되는 존재가 됐고, 앞으로도 혁신적인 프레임워크가 나타나지 않는 한 스프링 프레임워크의 위치는 확고할 것이 분명하다. 기업에서 신제품을 내놓을 때는 경쟁사의 제품보다 더 뛰어난 것을 개발한 경우가 대부분이지만, 스프링 프레임워크와 같이 한국에서의 높은 지위를 생각한다면 더 뛰어난 프레임워크가 나올 것이라는 생각을 가진 개발자들은 거의 없었을 것이다. 또한 사람들은 최고의 제품만을 사용하고 싶어하고, 익숙해져 있는 제품을 관성적으로 사용하게 돼 있다.
이러한 생각에 젖어 있을 때쯤 스프링 프레임워크를 위협할 만한 프레임워크가 스프링 내부에서 나타났고, 그 파급력은 점점 커져가고 있다. 스프링 프레임워크에 익숙한 개발자들에게 스프링 부트는 마치 업그레이드된 자동차 엔진과 같이 전체 개발/운영은 동일한 익숙함으로 가능하고, 내부적으로는 좀 더 간결하고, 자동 설정들의 편의성을 제공해주는 마치 마법과 같은 것이 돼가고 있다.
스프링 프레임워크로 개발하는 경우에 개발자들이 고려해야 할 사항은 톰캣 설치에 대한 번거로움이 포함돼 있다는 것이다. 하지만 스프링 부트에는 톰캣이나 네티가 임베디드돼 있어 개발이 완료된 후 바로 운영이 가능하다는 점이 매우 매력적이라고 할 수 있다. 특히 데몬과 같은 프로그램을 개발하고 운영하고자 할 때에는 설치 시간 및 리소스를 획기적으로 절약해준다. 스프링 프레임워크와 달리, 의존성 자동 설정과 같은 기능은 수동 변속기로 운전하다가 자동 변속기로 바꾸고 운전했을 때의 편리함을 제공해준다고 할 수 있다. 이러한 다양한 장점을 가진 스프링 부트를 사용하지 않는다면, 도대체 무엇을 사용하겠다는 것인가? 스프링 부트에 대한 전반적인 내용을 살펴보고, 스프링 프레임워크를 대체 할 만한 것이라는 판단을 하고 싶다면, 이 책이 그 해답을 줄 것이다.

-김완철

하나의 프로젝트를 진행하면서 패키지 구성부터 테스트, 배포에 이르기까지 스프링 부트를 중심으로 쉬운 예제를 통해 풀어가고 있으며, 스프링 부트 2.0의 최신 기능인 웹 플럭스 프레임워크, 리액티브 프로그래밍, 웹 소켓, 데이터베이스 등을 활용하는 방법을 배울 수 있다. 또한 이 책은 프로그래밍에만 초점을 두지 않고 클라우드 구성에 따른 빌드 및 배포 방법, 각종 테스트 방법, 간단한 보안 설정 등을 경험하게 해줘 최신 트렌드에 맞는 프로젝트(애플리케이션) 제작의 시작부터 끝을 경험할 수 있게 해준다.

-권용길

옮긴이 소개

김완철

자바 백엔드 엔지니어로서 웹/모바일 플랫폼을 개발해왔으며, 현재 소프트웨어 아키텍트로 자바와 Node.js를 사용해 IoT 솔루션을 개발하고 있다. 한국 제이보스 유저 그룹(Korea JBoss User Group) 멤버로 활동하고 있으며, 실시간 빅데이터 분석 및 AI에 관심이 많다.

권용길

2004년 커머스 서비스 개발을 시작으로 멤버십, 빌링 등과 같은 웹 플랫폼 서비스를 개발했으며, 현재 모바일 공용 플랫폼 서비스 개발하고 있다. 대외적으로는 앱 개발 콘테스트 멘토링, 스타트업 기술 자문 등 다양한 활동에 참여하고 있으며, 경력의 많은 부분을 자바 기반의 스프링과 함께하고 있다.

목차

목차
  • 1장. 자바로 빠른 시작
    • 시작하기
    • 스프링 부트 스타터
    • 스프링 부트 애플리케이션 실행
    • 스프링 부트의 속성 지원에 대해 알아보기
    • 애플리케이션을 실행 가능한 JAR 파일로 묶기
    • 클라우드 파운드리에 배포
    • 프로덕션-준비 지원 추가
      • 일반적인 헬스를 위한 앱 핑(Pinging)
      • 매트릭스
    • 요약

  • 2장. 스프링 부트 리액티브 웹
    • 스프링 이니셜라이저를 이용한 리액티브 웹 애플리케이션 생성하기
    • 리액티브 프로그래밍의 원리 배우기
    • 리액터 타입 소개
    • 임베디드 네티에서 아파치 톰캣으로 전환
    • 리액티브 스프링 웹 플럭스와 고전적인 스프링 MVC 비교하기
      • 왜 스프링이 이것을 하고 있는가?
    • 모노/플럭스-기반 엔드포인트 표시
    • 리액티브 ImageService 생성하기
    • 리액티브 파일 컨트롤러 생성하기
    • 리액티브 프로그래밍을 사용해야 하는 이유
    • 타임리프 템플릿과 상호 작용
    • 비동기에서 동기화로 이동하는 방법을 설명하는 것은 쉽지만, 그 반대는 아니다
    • 요약

  • 3장. 스프링 부트를 이용한 리액티브 데이터 액세스
    • 리액티브 데이터 저장소를 사용해 진행
    • 문제 해결
      • 스프링 부트로 스프링 데이터 저장소 연결하기
    • 리액티브 저장소 생성
    • 모노/플럭스 및 오퍼레이션 체인을 통해 데이터 가져오기
    • 커스텀 파인더 생성하기
    • Example로 쿼리하기
    • MongoOperations로 쿼리하기
    • 리액티브 오퍼레이션 로깅
    • 요약

  • 4장. 스프링 부트 테스트
    • 테스트 의존성
    • 단위 테스팅
    • 슬라이스-기반 테스팅
      • 임베디드 몽고 DB로 테스팅
      • 실제 몽고 DB 데이터베이스로 테스팅
    • 웹 플럭스 컨트롤러 테스팅
    • 임베디드 스프링 부트 앱 테스트
    • 커스텀 스프링 부트 자동 설정 테스팅
    • 요약

  • 5장. 스프링 부트 앱을 위한 개발자 도구
    • 핫 코드 리로딩을 위해 스프링 부트의 DevTools 사용
    • 스프링 부트의 자동 설정 보고서 사용
    • 로컬 변경 및 대상 시스템에서 보기
    • 커스텀 헬스 체크 작성
    • /application/info에 빌드 데이터 추가
    • 커스텀 매트릭스 생성
    • 추가 액추에이터 엔드포인트 작업
    • 요약

  • 6장. 스프링 부트로 AMQP 메시징하기
    • 래빗MQ 시작하기
      • 래빗MQ 브로커 설치
      • 래빗MQ 브로커 시작
    • 기존 애플리케이션에 메시징을 새로운 컴포넌트로 추가
    • 메시지 생성자/메시지 소비자 생성하기
      • 코멘트 표시
      • 코멘트 작성
      • AMQP 기본 사항
    • 메시지 플로를 추적하는 커스텀 매트릭스 추가
    • 스프링 클라우드 스트림(래빗MQ 포함)에서 엿보기
      • 스프링 클라우드 소개
      • 스프링 클라우드 스트림을 이용한 로깅
    • 요약

  • 7장. 스프링 부트의 마이크로서비스
    • 마이크로서비스에 대한 간단한 입문서
    • 유레카를 사용해 동적으로 서비스를 등록 및 검색
    • @SpringCloudApplication 소개
    • 클라이언트-사이드 로드 밸런싱을 통해 다른 마이크로서비스를 호출
    • 마이크로서비스 서킷 브레이커 구현
    • 서킷 모니터링
    • 마이크로서비스 설정을 컨피그 서버로 오프로드
    • 요약

  • 8장. 스프링 부트의 웹 소켓
    • 저장된 코멘트를 채팅 서비스에 게시하기
    • 웹 소캣 트래픽을 처리하기 위한 채팅 서비스 생성하기
      • 웹 소캣 메시지 중개
      • 저장된 코멘트 브로드캐스트
      • 웹 소캣 핸들러 구성
    • 웹 페이지에서 웹 소켓 메시지 소비
    • 완전 비동기식 웹 클라이언트로 이동
    • 서버에서 AJAX 호출 처리
    • 사용자 채팅 소개
    • 사용자별 메시지 보내기
      • 인증 없이 사용자 등록
      • 사용자를 세션에 연결
      • 사용자 간 메시지 보내기
    • 최종 제품 체크 아웃
    • JSR 356 대 스프링 WebFlux 메시징
    • 요약

  • 9장. 스프링 부트로 앱 보안
    • 스프링 부트 애플리케이션 보안
    • 스프링 세션 사용하기
      • 게이트웨이 API 작성
    • 채팅 마이크로서비스 보안
      • 인증 대 권한 부여
    • 다른 마이크로서비스와 세션 세부 정보 공유
    • 이미지 마이크로서비스 보안
    • 이미지 소유권 연결
      • 인증 메서드
    • 권한 부여 확인을 사용해 UI 조정
    • 웹 소켓 보안
    • 통신 추적
    • 컨피그 서버 보안
    • 유레카 서버 보안
    • 요약

  • 10장. 스프링 부트로 앱 프로덕션하기
    • 프로파일-기반 빈 세트
    • 설정 등록 정보 빈 생성
    • 프로덕션 환경 설정 오버라이딩
      • @ConfigurationProperties 대 @Value
    • 앱을 클라우드 파운더리에 푸시하고 설정 조정

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[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장, '스프링 부트 리액티브 앱'에서는 ... 방법을 학습했다.
->
이번 장에서는 ... 방법을 학습할 것이다.