코틀린 마이크로서비스 개발 [스프링 5와 스프링 부트 2.0을 활용해 코틀린으로 구축하는 리액티브 마이크로서비스]
- 원서명Hands-On Microservices with Kotlin: Build reactive and cloud-native microservices with Kotlin using Spring 5 and Spring Boot 2.0 (ISBN 9781788471459)
- 지은이후안 안토니오 메디나 이글레시아스(Juan Antonio Medina Iglesias)
- 옮긴이강인호, 황주필
- ISBN : 9791161752556
- 33,000원
- 2019년 01월 29일 펴냄
- 페이퍼백 | 504쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 소프트웨어 아키텍처
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
어느새 자바 생태계의 주류 언어로 자리매김한 코틀린 언어를 바탕으로 마이크로서비스와 리액티브에 대해 알아본다. 기본 개념, 작동 원리와 장점을 살펴보는 것을 시작으로 스프링 부트 기반으로 마이크로서비스를 쉽게 만들어보고, 스프링 웹플럭스(WebFlux)를 사용해 넌블로킹 리액티브 마이크로서비스를 구축하는 방법을 알아본다. 이를 컨테이너 기반으로 운용하기 위한 개발, 테스트 모니터링과 배포까지 전 영역을 다룬다. 기본 개념 이해를 바탕으로 직접 만들어 보면서 새로운 개념과 기술을 체험할 수 있도록 구성돼 있다.
이 책에서 다루는 내용
█ 마이크로서비스 아키텍처 및 원리 이해
█ 스프링 부트 2.0 과 스프링 프레임워크 5.0을 사용해 코틀린으로 마이크로서비스 구축
█ 스프링 웹플럭스로 넌블로킹(non-blocking) 작업을 수행하는 리액티브 마이크로서비스 생성
█ 스프링 데이터를 사용해 몽고DB(MongoDB)에서 리액티브하게 데이터 가져오기
█ JUnit과 코틀린으로 하는 효과적인 테스트
█ 스프링 클라우드로 클라우드 네이티브 마이크로서비스 생성
█ 마이크로서비스의 도커 이미지 빌드 및 게시
█ 도커 스웜(Docker Swarm)을 활용한 마이크로서비스 확장
█ JMX를 활용한 마이크로서비스 모니터링
█ 오픈시프트 온라인(OpenShift Online)에서 마이크로 서비스 배포
이 책의 대상 독자
마이크로서비스 아키텍처에 대한 기본 지식이 있고 현재 엔터프라이즈급 웹 애플리케이션에서 서비스를 효과적으로 구현하고자 하는 코틀린 개발자라면, 이 책은 당신을 위한 것이다.
이 책의 구성
1장, ‘마이크로서비스 이해’에서는 마이크로서비스와 그 원리를 소개한다. 도메인 주도 설계(Domain-Driven Design), 클라우드 네이티브 마이크로서비스와 리액티브 아키텍처를 알아본다.
2장, ‘스프링 부트 2.0 시작하기’에서는 코틀린에서 처음 마이크로서비스를 개발하는 데 스프링 부트 2.0을 사용해 도움을 준다. 스프링 부트를 심도 깊게 알아볼 것이고 인텔리제이(IntelliJ) IDEA를 사용해 마이크로서비스를 구축하는 방법을 살펴본다.
3장, ‘RESTful 서비스 만들기’에서는 클라우드 네이티브 마이크로서비스를 RESTful API로 확장해 다양한 스프링 구성 요소를 소개한다.
4장, ‘리액티브 마이크로서비스 만들기’에서는 넌블로킹 리액티브 마이크로서비스를 생성한다. 스프링 웹플럭스(WebFlux)와 리액터(Reactor)를 사용해 리액티브 마이크로서비스를 구축하는 방법을 알아본다.
5장, ‘리액티브 스프링 데이터’에서는 리액티브 스프링 데이터를 사용해 몽고DB 같은 NoSQL 데이터베이스를 작업하는 방법에 중점을 둔다. 그런 다음 REST API의 CRUD 작업을 리액티브하게 생성하는 리액티브 마이크로서비스를 향상시키는 방법을 살펴본다.
6장, ‘클라우드 네이티브 마이크로서비스 만들기’에서는 클라우드 네이티브 마이크로서비스가 무엇이고, 스프링 클라우드로 쉽게 구축하는 방법을 설명한다.
7장, ‘도커 만들기’에서는 도커를 설치 및 구성해서 컨테이너를 작성, 게시, 실행하는 방법과 메이븐(Maven)을 사용해 마이크로서비스를 빌드할 때 이를 통합하는 방법에 대해 설명한다.
8장, ‘마이크로서비스 확장하기’에서는 도커에서 개인용 클라우드를 만드는 방법과 마이크로서비스를 확장하고 제어하는 방법을 살펴본다.
9장, ‘스프링 마이크로서비스 테스트’에서는 SpringBootTest와 JUnit을 사용해 마이크로서비스를 테스트하는 방법을 설명한다. Kluent를 사용해 더욱 풍부한 표현 방식으로 마이크로서비스를 테스트하는 방법을 배운다.
10장, ‘마이크로서비스 모니터링’에서는 실제 운영 시스템에서 모니터링이 중요한 이유와 스프링 부트 액추에이터(Actuator)와 JMX를 이용해 모니터하고 제어하는 마이크로서비스를 제공하는 방법에 대해 설명한다.
11장, ‘마이크로서비스 배포’에서는 마이크로서비스 도커를 오픈시프트 온라인(OpenShift Online)에 배포하는 방법과 마이크로서비스 코드가 변경될 때 깃허브를 통합해 자동 배포하는 방법을 설명한다.
12장, ‘모범 사례’에서는 마이크로서비스를 만드는 데 사용할 수 있는 업계 모범 사례를 설명한다.
목차
목차
- 1장. 마이크로서비스의 이해
- 마이크로서비스란 무엇인가
- SoA 이해
- SoA와 마이크로서비스의 차이점
- 일체형에서 마이크로서비스로
- 마이크로서비스 원칙
- 설계 원칙 정의
- 비즈니스 역량 중심 모델
- 느슨한 결합
- 단일 책임
- 구현 은닉
- 격리
- 독립적인 배포 가능
- 장애를 고려한 빌드
- 확장성
- 자동화
- 도메인 주도 설계
- 도메인 주도 설계란
- 리액티브 마이크로서비스
- 리액티브 프로그래밍
- 리액티브 선언문
- 리액티브 프레임워크
- 리액티브 마이크로서비스
- 클라우드 네이티브 마이크로서비스
- 클라우드 컴퓨팅
- 컨테이너
- 배포 모델
- 정리
- 마이크로서비스란 무엇인가
- 2장. 스프링 부트 2.0 시작하기
- 스프링 부트 애플리케이션 만들기
- 구성
- 스프링 이니셜라이저 사용
- 인텔리제이 IDEA 사용
- 스프링 부트 애플리케이션의 구조
- 애플리케이션 오브젝트 생성
- 스프링 애플리케이션 컨텍스트 정의
- 컴포넌트 스캔 이해
- 컴포넌트 사용
- 의존 관계 자동 설정
- 스프링 부트 애플리케이션 패키징 및 실행
- 패키징
- WAR가 아닌 JAR로 패키징하기
- 스프링 부트 애플리케이션 실행
- 실행 가능한 JAR 만들기
- 애플리케이션 설정
- 설정 값 설정하기
- 스프링 표현 언어의 이해
- 프로파일 사용
- 조건부 빈 만들기
- 정리
- 스프링 부트 애플리케이션 만들기
- 3장. RESTful 서비스 만들기
- RestController의 이해
- 컨트롤러란
- RestController 만들기
- 컨트롤러 이해
- 경로와 요청 매개 변수
- customers 맵 생성
- 경로 변수 얻기
- 경로 변수 이해
- 요청 매개 변수 정의
- 요청 매개 변수 이해
- HTTP 동사와 상태
- 표준 HTTP 동사와 상태
- HTTP 동사 처리
- 서비스 레이어 구현
- HTTP 상태 처리하기
- JSON으로 작업하기
- 고객 클래스에 전화번호 추가
- 역직렬화 이해
- 오류 처리
- 컨트롤러 어드바이스 사용
- 비즈니스 예외 생성
- 컨트롤러 어드바이스 피하기
- 정리
- RestController의 이해
- 4장. 리액티브 마이크로서비스 만들기
- 스프링 웹플럭스의 이해
- 스프링 웹플럭스 애플리케이션 만들기
- 네티 사용하기
- RestController 추가
- Customer 서비스 만들기
- 블로킹은 리액티브가 아니다
- 리액티브 서비스 만들기
- 구독자와 게시자
- 단일 객체 게시하기
- 서비스에서 모노 사용하기
- 여러 객체 게시하기
- 서비스에서 플럭스 사용하기
- 리액티브하게 객체 수신
- 함수형 웹 프로그래밍 사용하기
- RouterFunction 사용하기
- 핸들러 만들기
- 리액티브 서비스 사용하기
- 다중 경로 처리하기
- 쿼리 매개 변수 사용하기
- JSON 본문 처리하기
- 리액티브 오류 처리하기
- 핸들러에서 오류 캡처하기
- 오류 게시
- 정리
- 스프링 웹플럭스의 이해
- 5장. 리액티브 스프링 데이터
- NoSQL 데이터베이스
- SQL 데이터베이스란
- NoSQL 데이터베이스란
- 몽고DB 설치
- Mongo 클라이언트와 연결
- 데이터베이스 생성
- 명령 사용
- 스프링 데이터 사용
- 프로젝트 설정
- 연결 구성
- 몽고DB에 명령어 보내기
- 리액티브 리포지토리
- 리포지토리 생성하기
- 리포지토리 사용하기
- 초기화 완료
- ReactiveMongoTemplate 사용
- CRUD 연산을 위한 RESTful API
- 서비스 재사용
- GET을 READ로 매핑
- POST를 CREATE로 매핑
- DELETE 매핑
- 고객 검색
- 정리
- NoSQL 데이터베이스
- 6장. 클라우드 네이티브 마이크로서비스 만들기
- 스프링 클라우드의 이해
- 클라우드 네이티브 프로그램이란 무엇인가
- 스프링 클라우드 아키텍처
- 스프링 클라우드 넷플릭스
- 스프링 클라우드 마이크로서비스 만들기
- 컨피그 서버
- 컨피그 서버 만들기
- 설정 얻기
- 데이터 암호화
- 애플리케이션 프로파일 사용하기
- 서비스 탐색
- 서비스 탐색 서버 만들기
- 탐색 서버에 연결하기
- 스프링 부트 액추에이터 사용하기
- 게이트웨이
- 게이트웨이 만들기
- 라우터 정의
- 정리
- 스프링 클라우드의 이해
- 7장. 도커 생성
- 도커로 시작하기
- 컨테이너 이해
- 도커 설치
- 도커 시작하기
- 이미지 가져오기
- 이미지 관리
- 마이크로서비스 도커 생성하기
- 예제 마이크로서비스 만들기
- Dockerfile 만들기
- 마이크로서비스 도커 만들기
- 마이크로서비스 실행하기
- 도커 게시
- 도커 허브 계정 만들기
- 도커 게시
- 도커와 메이븐 통합하기
- 정리
- 도커로 시작하기
- 8장. 마이크로서비스 확장
- 확장 가능한 아키텍처
- 확장의 방향성
- 확장 설계
- 독립적 확장
- 축소
- 클라우드 만들기
- 스웜 만들기
- 서비스 추가
- 서비스의 로그 확인하기
- 서비스 삭제
- 마이크로서비스를 서비스로 퍼블리시
- 레지스트리 만들기
- 마이크로서비스 만들기
- 도커 만들기
- 서비스 만들기
- 서비스 제어하기
- 인스턴스 확장
- 서버스 로그 가져오기
- 서비스 제어하기
- 정리
- 확장 가능한 아키텍처
- 9장. 스프링 마이크로서비스 테스트
- SpringBootTest 이해
- 간단한 마이크로 서비스 만들기
- SpringBootTest 이해
- 빈 테스트
- MockMvc 사용하기
- 모의 빈 사용하기
- 왜 mock을 사용하는가
- 목(mock) 설치
- 모의(mocked) 값 반환하기
- 목(mock) 호출 검증하기
- 유창한 테스트
- Kluent 추가하기
- 서술적으로 서비스 테스트하기
- 서술적으로 컨트롤러 테스트하기
- 정리
- SpringBootTest 이해
- 10장. 마이크로서비스 모니터링
- 모니터링의 이해
- 모니터링은 무엇인가
- 경고
- 복구
- 장애 발생 마이크로서비스 만들기
- 스프링 부트 액추에이터
- 스프링 부트 액추에이터 활성화
- 액츄에이터의 종단점 이해
- JMX
- JMX 이해
- JMX 사용하기
- 정리
- 모니터링의 이해
- 11장. 마이크로서비스 배포
- 설정
- 깃허브 계정 생성
- 깃 설치
- 오픈시프트 계정 만들기
- 오픈시프트 클라이언트 다운로드
- 애플리케이션 빌드
- 예제 마이크로서비스 만들기
- 테스트 추가
- 깃허브에 업로드하기
- 오픈시프트에 게시
- 애플리케이션 만들기
- 애플리케이션 관리
- 애플리케이션 업데이트
- 정리
- 설정
- 12장. 모범 사례
- 코틀린 관용구 사용
- 타입 추론
- 표현식
- 기본 매개 변수
- 람다
- 스프링 컨텍스트 관리
- 생성자 주입
- 명시적 컨텍스트 설정
- 애플리케이션의 계층화
- 클래스 이해
- 분할
- 효과적인 테스트
- 테스트 유형 이해
- 단위 테스트
- 통합 테스트
- E2E 테스트
- 그 외 테스트
- 테스팅 피라미드
- 테스트 주도 개발
- 행위/행동 주도 개발
- CI/CD 처리
- 지속적인 통합
- 지속적 배포
- 파이프라인
- 대시보드
- 정리
- 코틀린 관용구 사용
도서 오류 신고
정오표
정오표
[p.36 : 2행]
UI 컴포턴트조차도
->
UI 컴포넌트조차도
[p.46 : 3행]
이 장애을 최대한 매끄럽게
->
이 장애를 최대한 매끄럽게
[p. 93, 184, 196, 209, 292 : 박스 안]
3장. ‘RESTFul 서비스 만들기’
->
3장. ‘RESTful 서비스 만들기’
[p.199 : 마지막 문단 1행]
컴포넌트 스캔에 통해
->
컴포넌트 스캔을 통해
[p.199 : 박스 마지막 행]
https://kotlinlang.org/docs/reference/typesafe-builders.html
->
https://kotlinlang.org/docs/reference/type-safe-builders.html
[p.203 : 6행]
람다(Lamda)를
->
람다(Lambda)를
[ p.225 : 아래서 8행]
어떤 오류도 정상적으로 처리할 수 한다.
->
어떤 오류도 정상적으로 처리할 수 있어야 한다.
[ p.297 : 아래서 3행]
마이크로서비스를 재시작 후 URL http://localhost:8080/greetings/greetings을 요청하면 다음과 같이 표시된다.
->
마이크로서비스를 재시작 후 URL http://localhost:8080/greetings을 요청하면 다음과 같이 표시된다.
[ p.305 : '게이트웨이 만들기'절 마지막 행]
Zuul, Eureka Discovery, Config Client를 선택한다.
->
Zuul, Eureka Discoverty Client, Config Client를 선택한다.