Top

스프링으로 하는 마이크로서비스 구축 [스프링 부트와 스프링 클라우드를 이용한 도커/쿠버네티스 마이크로서비스]

  • 원서명Hands-On Microservices with Spring Boot and Spring Cloud: Build and deploy Java microservices using Spring Cloud, Istio, and Kubernetes (ISBN 9781789613476)
  • 지은이매그너스 라슨(Magnus Larsson)
  • 옮긴이박규태
  • ISBN : 9791161754673
  • 40,000원
  • 2020년 11월 30일 펴냄
  • 페이퍼백 | 764쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 소프트웨어 아키텍처, 오픈소스 프로그래밍

판매처

개정판

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/microservices-spring

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약

기존 일체형 애플리케이션을 마이크로서비스로 나누고 온프레미스나 클라우드로 배포하려는 자바, 스프링 개발자와 아키텍트를 위한 책이다. 스프링 부트, 스프링 클라우드와 도커, 쿠버네티스, 이스티오, EFK 스택, 프로메테우스, 그라파나 등의 오픈 소스 도구를 조합해 마이크로서비스를 구축하는 방법을 설명한다.
스프링 기반의 자바 개발과 오픈 소스 도구 사용법을 실습 위주로 설명하며, 최소한의 시간 투자만으로도 다양하고 넓은 범위의 지식을 학습할 수 있게끔 효율적으로 구성돼 있다.

이 책에서 다루는 내용

■ 스프링 부트를 사용한 리액티브 마이크로서비스 구축
■ 스프링 클라우드를 사용해 탄력성 및 확장성 있는 마이크로서비스 개발
■ 스프링 시큐리티 및 OAuth 2.0/OIDC를 사용해 공개 API 보호
■ 도커를 사용해 개발, 테스트 환경과 상용 환경 사이의 격차 해소
■ 쿠버네티스를 사용한 마이크로서비스 배포 및 관리
■ 이스티오를 사용한 보안성, 관찰 가능성, 트래픽 관리 편의성 향상

이 책의 대상 독자

쿠버네티스를 컨테이너 오케스트레이터로 사용하고 이스티오를 서비스 메시로 사용해 기존 일체형 애플리케이션을 마이크로서비스로 분할하고 온프레미스나 클라우드로 배포하는 방법을 배우려는 자바, 스프링 개발자와 아키텍트를 위한 책이다. 마이크로서비스 아키텍처에 익숙하지 않더라도 문제 없이 읽을 수 있다.

이 책의 구성

1장, ‘마이크로서비스 소개’에서는 기본 전제인 마이크로서비스의 필수 개념과 디자인 패턴을 설명한다.
2장, ‘스프링 부트 소개’에서는 스프링 부트와 책의 앞 부분에서 사용할 오픈 소스 프로젝트를 소개한다. RESTful API 개발에 사용하는 스프링 웹플럭스(Spring WebFlux), 스웨거(Swagger)/OpenAPI 기반 API 문서를 생성하는 스프링 폭스(SpringFox), SQL 및 NoSQL 데이터베이스에 데이터를 저장할 때 사용하는 스프링 데이터(Spring Data), 메시지 기반의 마이크로서비스에서 사용하는 스프링 클라우드 스트림(Spring Cloud Stream), 마이크로서비스를 컨테이너로 실행하는 도커 등을 소개한다.
3장, ‘공조 마이크로서비스 집합 생성’에서는 공조 마이크로서비스 집합을 생성하는 방법을 설명한다. 스프링 이니셜라이저(Spring Initializr)를 사용해 스프링 프레임워크 5.1(Spring Framework 5.1) 및 스프링 부트 2.1(Spring Boot 2.1) 기반의 골격 프로젝트를 생성하고, 세 가지 핵심 서비스를 만든다. 또한 세 가지 핵심 서비스에서 얻은 정보를 집계해 복합적 결과를 만드는 복합 서비스도 만든다. 3장의 뒷부분에선 스프링 웹플럭스를 기반으로 기본적인 RESTful API를 추가하는 방법을 배우며, 4장에선 더 많은 기능을 마이크로서비스에 추가한다.
4장, ‘도커를 사용한 마이크로서비스 배포’에서는 도커를 사용해 마이크로서비스를 배포하는 방법을 설명한다. 도커파일(Dockerfile)이나 도커 컴포즈(Docker Compose) 파일을 이용해 전체 마이크로서비스 환경을 하나의 커맨드로 시작하는 방법을 배우고, 여러 스프링 프로필을 사용해 도커용 구성과 이외의 구성을 분리해서 처리하는 방법도 배운다.
5장, ‘OpenAPI/스웨거를 사용한 API 문서화’에서는 마이크로서비스에서 공개하는 API를 OpenAPI/스웨거를 사용해 빠르게 문서화하는 방법을 배운다. 스프링 폭스는 서비스 코드에 붙인 애노테이션(annotation)을 검사해 OpenAPI 및 스웨거 기반의 API 문서를 생성한다. 또한 스프링 폭스 스웨거 UI를 사용하면 API를 웹 브라우저에서 테스트할 수 있다.
6장, ‘영속성 추가’에서는 마이크로서비스 데이터에 영속성을 부여하는 방법을 배운다. 스프링 데이터를 사용해 2개의 핵심 마이크로서비스는 문서 데이터베이스인 MongoDB에 데이터를 저장 및 접근하게 하며, 나머지 마이크로서비스는 JPA(Java Persistence API)를 사용해 관계형 데이터베이스인 MySQL의 데이터에 접근하게 한다.
7장, ‘리액티브 마이크로서비스 개발’에서는 리액티브 방식을 사용해야 하는 이유와 사용 시기, 엔드투엔드(end-to-end) 리액티브 서비스를 개발하는 방법을 배운다. 논블로킹(non-blocking) 동기 방식의 RESTful API와 이벤트 기반 비동기 방식의 서비스를 개발하고 테스트하는 방법도 배운다. 또한 MongoDB를 위해 논블로킹 방식의 영속성 계층을 사용하는 방법과 MySQL을 위해 일반적인 블로킹 코드를 사용하는 방법을 배운다.
8장, ‘스프링 클라우드 소개’에서는 이 책에서 사용하는 스프링 클라우드 및 스프링 클라우드 컴포넌트를 소개한다.
9장, ‘넷플릭스 유레카와 리본을 사용한 서비스 검색’에서는 스프링 클라우드의 넷플릭스 유레카(Netflix Eureka)와 리본(Ribbon)을 사용해 서비스 검색 기능을 추가하는 방법을 알아본다. 즉 넷플릭스 유레카 기반의 서비스 검색 서버를 시스템 환경에 추가하고, 넷플릭스 리본을 사용해 다른 마이크로서비스를 찾도록 마이크로서비스를 구성한다. 또한 자동으로 마이크로서비스를 등록하는 방법과 넷플릭스 리본을 통해 전달된 트래픽을 활성화된 새 인스턴스로 자동로드 밸런싱하는 방법을 이해한다.
10장, ‘스프링 클라우드 게이트웨이를 에지 서버로 사용’에서는 스프링 클라우드 게이트웨이(Spring Cloud Gateway)를 사용해 마이크로서비스를 에지(edge) 서버 뒤로 숨기고, 선택된 일부 API만 외부 소비자에게 공개하는 방법을 배운다. 또한 외부 소비자가 볼 수 없도록 마이크로서비스 내부의 복잡성을 숨기는 방법을 배운다. 스프링 클라우드 게이트웨이 기반의 에지 서버를 시스템 환경에 추가하고, 공개 API만 노출하도록 구성하면 과업을 완수할 수 있다.
11장, ‘API 접근 보안’에서는 OAuth 2.0 및 OpenID Connect를 사용해 공개 API를 보호하는 방법을 설명한다. 스프링 시큐리티(Spring Security) 기반 OAuth 2.0 권한 서버를 시스템 환경에 추가하는 방법과 해당 권한 서버에서 발급한 유효한 접근 토큰이 있는 클라이언트만 에지 서버와 복합 서비스에 접근할 수 있도록 구성하는 방법을 배운다. 또한 에지 서버를 통해 권한 부여 서버를 공개하고 HTTPS를 사용해 외부 소비자와의 통신을 보호하는 방법을 배운다. 마지막으로 내부 OAuth 2.0 인증 서버를 외부 OpenID Connect 공급자인 Auth0로 교체하는 방법을 배운다.
12장, ‘구성 중앙화’에서는 하나의 중앙 구성 저장소에서 모든 마이크로서비스의 구성 파일을 가져오고, 구성 서버를 사용해 런타임에 마이크로서비스로 구성을 배포하는 방법을 배운다. 또한 시스템 환경에 스프링 클라우드 컨피그 서버(Spring Cloud Config Server)를 추가하고 스프링 컨피그 서버에서 구성을 가져오도록 마이크로서비스를 구성하는 방법을 배운다.
13장, ‘Resilience4j를 사용한 탄력성 개선’에서는 Resilience4j의 기능을 이용해 연쇄 장애 같은 안티 패턴(anti-pattern)을 방지하는 방법을 설명하며, 복합 서비스에 재시도 메커니즘과 서킷 브레이커(circuit breaker)를 추가하는 방법을 배운다. 또한 서킷이 열려 있을 때 빠른 실패 로직이 작동하도록 서킷 브레이커를 구성하는 방법과 폴백 메서드(fallback method)를 사용해 최적화된 응답을 생성하는 방법을 배운다.
14장, ‘분산 추적’에서는 집킨(Zipkin)을 사용해 추적 정보를 수집하고 시각화하는 방법을 설명한다. 또한 스프링 클라우드 슬루스(Spring Cloud Sleuth)로 요청에 추적 ID를 추가해 공조 마이크로서비스 간의 요청 체인을 시각화하는 방법을 배운다.
15장, ‘쿠버네티스 소개’에서는 쿠버네티스의 핵심 개념과 샘플 디플로이먼트(deployment) 생성 방법을 설명한다. 미니큐브(Minikube)를 사용해 개발 및 테스트 용도의 쿠버네티스를 로컬에 설치하는 방법을 배운다.
16장, ‘쿠버네티스에 마이크로서비스 배포’에서는 쿠버네티스에 마이크로서비스를 배포하는 방법을 설명한다. 그리고 Kustomize를 사용해 테스트 및 상용 환경과 같은 다양한 런타임 환경에 맞춰 쿠버네티스 디플로이먼트(deployment)를 구성하는 방법을 배운다. 또한 쿠버네티스 서비스 객체와 kube-proxy 런타임 컴포넌트를 기반으로 하는, 쿠버네티스에 내장된 서비스 검색 기능으로 넷플릭스 유레카를 대체하는 방법을 배운다.
17장, ‘쿠버네티스로 기존 인프라 대체’에서는 앞에서 소개한 스프링 클라우드 서비스를 쿠버네티스 기능으로 대체하는 방법을 설명한다. 스프링 클라우드 컨피그 서버를 쿠버네티스 시크릿(Kubernetes secret)과 컨피그 맵(config map)으로 대체하는 이유와 방법을 배운다. 또한 스프링 클라우드 게이트웨이를 쿠버네티스 인그레스(Kubernetes ingress) 객체로 대체하는 이유 및 방법을 배우고, Cert Manager를 추가해 Let’s Encrypt에서 HTTPS 엔드포인트를 위해 발급한 인증서를 자동으로 프로비저닝하고 갱신하는 방법을 배운다.
18장, ‘서비스 메시를 사용해 관찰 가능성 및 관리’에서는 편의성 개선 서비스 메시 개념을 소개하고 이스티오를 사용해 런타임에 서비스 메시를 구현하는 방법을 설명한다. 서비스 메시를 사용해 마이크로서비스 환경의 복원력, 보안, 트래픽 관리 및 관찰 가능성을 향상하는 방법을 배운다.
19장, ‘EFK 스택을 사용한 로깅 중앙화’에서는 일래스틱서치(Elasticsearch), 플루언티드(Fluentd), 키바나(Kibana)를 사용해 마이크로서비스의 로그 스트림(log stream)을 수집, 저장, 시각화하는 방법을 설명한다. 미니큐브에 EFK 스택을 배포하는 방법과 EFK 스택으로 수집한 로그 레코드를 분석하는 방법, 여러 마이크로서비스가 관련된 요청을 처리하면서 발생하는 마이크로서비스 로그 출력을 찾는 방법을 배운다. 또한 EFK 스택을 사용해 근본 원인 분석을 수행하는 방법을 배운다.
20장, ‘마이크로서비스 모니터링’에서는 프로메테우스(Prometheus)와 그라파나(Grafana)를 이용해 쿠버네티스에 배포된 마이크로서비스를 모니터링하는 방법을 설명한다. 기존 그라파나 대시보드를 활용해 다양한 유형의 메트릭(metric)을 모니터링하는 방법과 직접 대시보드를 만드는 방법을 배운다. 마지막으로 특정 메트릭에 임계값을 구성하고, 이를 초과하면 이메일을 전송하는 경고를 그라파나에서 생성하는 방법을 배운다.

저자/역자 소개

지은이의 말

스프링 부트와 스프링 클라우드를 사용해 상용 마이크로서비스를 구축하는 방법을 설명하는 책이며, 내가 처음 마이크로서비스 학습을 시작한 5년 전에 찾아 헤맸던 바로 그 책이다.
나는 공조 마이크로서비스 환경을 개발, 테스트, 배포, 관리할 때 사용하는 오픈 소스 소프트웨어를 학습하고 익숙해진 후에 이 책을 썼다.
이 책은 주로 스프링 부트(Spring Boot), 스프링 클라우드(Spring Cloud), 도커(Docker), 쿠버네티스(Kubernetes), 이스티오(Istio), EFK 스택(EFK stack), 프로메테우스(Prometheus), 그라파나(Grafana)를 다룬다. 이런 오픈 소스 도구는 개별적으로는 훌륭하게 작동하지만, 여러 도구를 어떤 방식으로 조합하는 게 좋을지 알아내는 건 어려운 일이다. 어떤 영역에서는 상호 보완적이지만, 다른 영역에서는 겹쳐서 특정 상황에 맞는 명확한 조합이 있는 게 아니기 때문이다. 이 책은 이런 오픈 소스 도구를 함께 사용하는 방법을 실습을 바탕으로 단계별로 설명한다. 내가 마이크로서비스 학습을 시작한 5년 전에 찾던 책이긴 하지만, 오픈 소스 도구는 업데이트된 버전을 사용한다.

지은이 소개

매그너스 라슨(Magnus Larsson)

30년 이상 IT 산업에 종사했으며, 볼보(Volvo)와 에릭슨(Ericsson), 아스트라제네카(AstraZeneca)등 스웨덴 대기업의 컨설턴트로 일하고 있다. 수년에 걸쳐 RPC, CORBA, SOAP, REST 등 다양한 통신 기술이 명멸해 가는 것을 지켜봤다. 예전에 실질적인 도움을 줄 수 있는 쓸 만한 소프트웨어의 부재로 분산 시스템과 관련된 문제에 어려움을 겪었다. 그러나 지난 몇 년 동안 스프링 클라우드, 넷플릭스 OSS, 도커, 쿠버네티스 등의 오픈 소스 프로젝트가 등장하면서 상황이 크게 바뀌었다. 지난 5년 동안 고객이 새로운 소프트웨어 기술을 사용하도록 도왔으며, 해당 주제로 여러 번 발표를 하고 블로그에 게시했다.

옮긴이의 말

시스템 통합이나 엔터프라이즈 업계에서 일하는 자바 개발자라면 최근 몇 년 동안에 몰아 닥친 마이크로서비스 열풍과 이를 보조하는 도커, 쿠버네티스 등의 컨테이너 기반 환경의 인기에 부담감을 느낄 수밖에 없을 것이다. 좀 더 유연하고 확장성 있는 서비스를 위한 시대적인 요구에 따른 것이라곤 하지만, 개발 자체가 아닌 기반 환경의 변화에 따라 맞닥뜨린 급격한 학습 곡선은 개발자에게 그리 달가운 상황은 아니기 때문이다.
이런 새로운 변화에 따른 학습이 필요하다고 느낀다면 이 책은 좋은 선택이 될 것이다. 개발자와 아키텍트가 편하게 볼 수 있도록 이론과 실습을 적절히 조합해서 스프링 부트 및 클라우드를 이용해 마이크로서비스를 구축하는 방법을 설명한다. 또한 다양한 오픈 소스 도구를 도입해야 하는 이유와 스프링 애플리케이션과 연동하는 방법을 배울 수 있다. 넓은 범위를 다루지만 각 기술 요소의 소개보다는 실무에 필요한 범위에 맞춰 핵심을 잘 전달하며, 코드로 설명하는 책이라고 말할 수 있다.

옮긴이 소개

박규태

엔터프라이즈 자바 환경에서 오랫동안 일했다. 웹 오피스, 클라우드 플랫폼 관리 솔루션, 쿠버네티스 기반의 머신러닝 플랫폼을 개발했으며, 지금은 클라우드 기반의 VDI 솔루션을 개발하고 있다. 자바월드(javaworld.co.kr)라는 블로그를 운영하고 있다.

목차

목차
  • 1부. 스프링 부트를 사용한 마이크로서비스 개발
  • 1장. 마이크로서비스 소개
    • 기술 요구 사항
    • 저자의 마이크로서비스 경험
      • 독립 소프트웨어 컴포넌트의 장점
      • 독립 소프트웨어 컴포넌트의 문제
      • 마이크로서비스 입문
      • 샘플 마이크로서비스 환경
    • 마이크로서비스 정의
    • 마이크로서비스의 문제
    • 마이크로서비스 디자인 패턴
      • 서비스 검색
      • 에지 서버
      • 리액티브 마이크로서비스
      • 구성 중앙화
      • 로그 분석 중앙화
      • 분산 추적
      • 서킷 브레이커
      • 제어 루프
      • 모니터링 및 경고 중앙화
    • 필수 소프트웨어
    • 다른 주요 고려 사항
    • 요약

  • 2장. 스프링 부트 소개
    • 기술 요구 사항
    • 스프링 부트
      • 설정보다 관례와 팻 JAR 파일
      • 스프링 부트 애플리케이션 설정에 대한 코드 예제
    • 스프링 웹플럭스
      • REST 서비스 설정에 대한 코드 예제
    • 스프링 폭스
    • 스프링 데이터
      • 엔티티
      • 리포지토리
    • 스프링 클라우드 스트림
      • 스프링 클라우드 스트림을 사용한 메시지 송수신 예제
    • 도커
    • 요약
    • 질문

  • 3장. 공조 마이크로서비스 집합 생성
    • 기술 요구 사항
    • 도구 설치
      • 소스 코드 다운로드
    • 마이크로서비스 환경 소개
      • 마이크로서비스가 처리하는 정보
      • 임시로 검색 서비스 대체
    • 골격 마이크로서비스 생성
      • 스프링 이니셜라이저로 골격 코드 생성
      • 그래들에 멀티 프로젝트 빌드 설정
    • RESTful API 추가
      • api 프로젝트와 util 프로젝트 추가
      • API 구현
    • 복합 마이크로서비스 추가
      • API 클래스
      • 속성
      • 통합 컴포넌트
      • 복합 API 구현
    • 예외 처리 추가
      • 전역 REST 컨트롤러 예외 핸들러
      • API 구현의 예외 처리
      • API 클라이언트의 예외 처리
    • API 수동 테스트
      • localhost의 조회 속도 문제 해결
    • 자동화된 마이크로서비스 테스트
    • 반자동화된 마이크로서비스 환경 테스트
      • 테스트 스크립트 실행
    • 요약
    • 질문

  • 4장. 도커를 사용한 마이크로서비스 배포
    • 기술 요구 사항
    • 도커 소개
      • 첫 도커 명령 실행
    • 도커에서 자바를 실행할 때의 문제
      • 도커 없이 자바 커맨드 실행
      • 도커에서 자바 커맨드 실행
      • 자바 SE 9 도커 컨테이너의 문제
    • 도커로 단일 마이크로서비스 실행
      • 소스 코드 변경
      • 도커 이미지 빌드
      • 서비스 시작
      • 컨테이너를 분리 모드로 실행
    • 도커 컴포즈를 사용한 마이크로서비스 환경 관리
      • 소스 코드 변경
      • 마이크로서비스 환경 시작
    • 도커 컴포즈를 사용한 마이크로서비스 환경 테스트
      • 테스트 실행 문제 해결
    • 요약
    • 질문

  • 5장. OpenAPI/스웨거를 사용한 API 문서화
    • 기술 요구 사항
    • 스프링 폭스 소개
    • 소스 코드 변경
      • 그래들 빌드 파일에 의존성 추가
      • ProductCompositeServiceApplication에 구성과 API 정보 추가
      • ProductCompositeService에 API 정보 추가
      • 속성 파일에 API 설명 추가
    • 마이크로서비스 환경 구축 및 시작
    • 스웨거 문서 사용법
    • 요약
    • 질문

  • 6장. 영속성 추가
    • 기술 요구 사항
    • 진행 방향 확인
    • 핵심 마이크로서비스에 영속성 계층 추가
      • 의존성 추가
      • 엔티티 클래스를 사용해 데이터 저장
      • 스프링 데이터 리포지토리 정의
    • 영속성에 중점을 둔 자동 테스트 작성
    • 서비스 계층에서 영속성 계층 사용
      • 데이터베이스 연결 URL 기록
      • 새 API 추가
      • 영속성 계층 사용
      • 자바 빈 매퍼 선언
      • 서비스 테스트 업데이트
    • 복합 서비스 API 확장
      • 복합 서비스 API에 새 오퍼레이션 추가
      • 통합 계층에 메서드 추가
      • 새 복합 API 오퍼레이션 구현
      • 복합 서비스 테스트 업데이트
    • 도커 컴포즈 환경에 데이터베이스 추가
      • 도커 컴포즈 구성
      • 데이터베이스 연결 구성
      • MongoDB 및 MySQL CLI 도구
    • 새 API 및 영속성 계층의 수동 테스트
    • 마이크로서비스 환경의 자동 테스트 업데이트
    • 요약
    • 질문

  • 7장. 리액티브 마이크로서비스 개발
    • 기술 요구 사항
    • 논블로킹 동기 API와 이벤트 기반 비동기 서비스의 선택 기준
    • 스프링을 사용해 논블로킹 동기 REST API 개발
      • 스프링 리액터 소개
      • 스프링 데이터 MongoDB를 사용한 논블로킹 영속성
      • 핵심 서비스의 논블로킹 REST API
      • 복합 서비스의 논블로킹 REST API
    • 이벤트 기반 비동기 서비스 개발
      • 메시징 관련 문제를 처리하도록 스프링 클라우드 스트림 구성
      • 토픽 및 이벤트 정의
      • 그래들 빌드 파일 변경
      • 복합 서비스에서 이벤트 게시
      • 핵심 서비스에서 이벤트 소비
    • 리액티브 마이크로서비스 환경의 수동 테스트
      • 이벤트 저장
      • 상태 점검 API 추가
      • 파티션 없이 RabbitMQ 사용
      • 토픽당 2개의 파티션으로 RabbitMQ 사용
      • 토픽당 2개의 파티션으로 카프카 사용
    • 리액티브 마이크로서비스 환경의 자동 테스트
    • 요약
    • 질문

  • 2부. 스프링 클라우드를 활용한 마이크로서비스 관리
  • 8장. 스프링 클라우드 소개
    • 기술 요구 사항
    • 스프링 클라우드의 진화
    • 넷플릭스 유레카를 검색 서비스로 사용
    • 스프링 클라우드 게이트웨이를 에지 서버로 사용
    • 구성 중앙화를 위해 스프링 클라우드 컨피그 사용
    • 탄력성 향상을 위해 Resilience4j 사용
      • Resilience4j를 사용한 서킷 브레이커 샘플
  • 스프링 클라우드 슬루스와 집킨을 사용한 분산 추적
    • 요약
    • 질문

  • 9장. 넷플릭스 유레카와 리본을 사용한 서비스 검색
    • 기술 요구 사항
    • 서비스 검색 소개
      • DNS 기반 서비스 검색의 문제
      • 서비스 검색의 문제
      • 넷플릭스 유레카를 이용한 서비스 검색
    • 넷플릭스 유레카 서버 설정
    • 넷플릭스 유레카 서버에 마이크로서비스 연결
    • 개발 프로세스에서 사용할 구성 설정
      • 유레카 구성 매개 변수
      • 유레카 서버 구성
      • 유레카 서버에 연결할 클라이언트 구성
    • 검색 서비스 사용
      • 확장
      • 축소
      • 유레카 서버의 장애 상황 테스트
    • 요약
    • 질문

  • 10장. 스프링 클라우드 게이트웨이를 에지 서버로 사용
    • 기술 요구 사항
    • 시스템 환경에 에지 서버 추가
    • 스프링 클라우드 게이트웨이 설정
      • 복합 상태 점검 추가
      • 스프링 클라우드 게이트웨이 구성
    • 에지 서버 테스트
      • 도커 엔진 외부로 공개되는 항목 확인
      • 라우팅 규칙 테스트
    • 요약
    • 질문

  • 11장. API 접근 보안
    • 기술 요구 사항
    • OAuth 2.0 및 OpenID Connect 소개
      • OAuth 2.0 소개
      • OpenID Connect 소개
    • 시스템 환경 보안
    • 시스템 환경에 권한 부여 서버 추가
    • HTTPS를 사용한 외부 통신 보호
      • 런타임에 자체 서명 인증서 교체
    • 검색 서비스 접근 보안
      • 유레카 서버 변경
      • 유레카 클라이언트 변경
      • 보안 유레카 서버 테스트
    • OAuth 2.0과 OpenID Connect를 사용한 API 접근 인증 및
    • 권한 부여
      • 에지 서버와 product-composite 서비스 변경
      • product-composite 서비스 변경
      • 테스트 스크립트 변경
    • 로컬 권한 부여 서버를 사용한 테스트
      • 자동 테스트 빌드 및 실행
      • 접근 토큰 획득
      • 접근 토큰을 사용해 보안 API 호출
    • Auth0를 OpenID Connect 공급자로 사용한 테스트
      • Auth0 사용자 계정과 OAuth 2.0 클라이언트 설정
      • Auth0를 OpenID 공급자로 사용하는 데 필요한 변경 사항 적용
      • Auth0를 OpenID Connect 공급자로 사용해 테스트 스크립트 실행
      • 암호 승인 흐름을 사용해 접근 토큰 획득
      • 묵시적 승인 흐름을 사용해 접근 토큰 획득
      • 권한 코드 승인 흐름을 사용해 접근 토큰 획득
      • Auth0 접근 토큰을 사용해 보호 API 호출
      • 사용자에 대한 추가 정보 획득
    • 요약
    • 질문

  • 12장. 구성 중앙화
    • 기술 요구 사항
    • 스프링 클라우드 컨피그 서버 소개
      • 구성 저장소의 저장 유형 선택
      • 클라이언트가 먼저 접속할 서버 결정
      • 구성 보안
      • 구성 서버 API 소개
    • 구성 서버 설정
      • 에지 서버에 라우팅 규칙 설정
      • 도커 환경을 위한 구성 서버 설정
    • 구성 서버의 클라이언트 설정
      • 연결 정보 설정
      • 파티셔닝 구성을 도커 컴포즈 파일에서 구성 저장소로 이동
    • 구성 저장소 구조화
    • 스프링 클라우드 컨피그 서버 사용
      • 빌드 및 자동화 테스트 실행
      • 구성 서버 API로 구성 조회
      • 민감한 정보의 암호화 및 해독
    • 요약
    • 질문

  • 13장. Resilience4j를 사용한 탄력성 개선
    • 기술 요구 사항
    • Resilience4j의 서킷 브레이커와 재시도 메커니즘 소개
      • 서킷 브레이커 소개
      • 재시도 메커니즘 소개
    • 소스 코드에 서킷 브레이커 및 재시도 메커니즘 추가
      • 프로그래밍 방식으로 지연 및 무작위 오류 추가
      • 서킷 브레이커 추가
      • 서킷 브레이커 및 시간 초과 로직 추가
      • 재시도 메커니즘 추가
      • 자동 테스트 추가
    • 서킷 브레이커 및 재시도 메커니즘 테스트
      • 빌드 및 자동화 테스트 실행
      • 정상적인 요청만 유입될 때 서킷이 닫혀 있는지 확인
      • 문제가 발생했을 때 서킷이 열리는지 확인
      • 서킷 브레이커 다시 닫기
      • 무작위 오류로 재시도 메커니즘 테스트
    • 요약
    • 질문

  • 14장. 분산 추적
    • 기술 요구 사항
    • 스프링 클라우드 슬루스와 집킨을 사용한 분산 추적
    • 소스 코드에 분산 추적 추가
      • 빌드 파일에 의존성 추가
      • 스프링 클라우드 슬루스 및 집킨에 대한 구성 추가
      • 도커 컴포즈 파일에 집킨 추가
    • 분산 추적 수행
      • RabbitMQ를 대기열 관리자로 사용해 시스템 환경 시작
      • 정상적인 API 요청 전송
      • 비정상적인 API 요청 전송
      • 비동기 처리를 유발하는 API 요청 전송
      • RabbitMQ를 통해 집킨으로 전달된 추적 정보 모니터링
      • 카프카를 메시지 브로커로 사용
    • 요약
    • 질문

  • 3부. 쿠버네티스를 사용한 경량 마이크로서비스 개발
  • 15장. 쿠버네티스 소개
    • 기술 요구 사항
    • 쿠버네티스 개념 소개
    • 쿠버네티스 API 객체 소개
    • 쿠버네티스 런타임 컴포넌트 소개
    • 미니큐브를 사용해 쿠버네티스 클러스터 생성
      • 미니큐브 프로필 사용
      • 쿠버네티스의 CLI 도구인 kubectl 사용
      • kubectl 콘텍스트 사용
      • 쿠버네티스 클러스터 생성
    • 샘플 디플로이먼트 생성
    • 쿠버네티스 클러스터 관리
      • 쿠버네티스 클러스터 일시 정지 및 시작
      • 쿠버네티스 클러스터 종료
    • 요약
    • 질문

  • 16장. 쿠버네티스에 마이크로서비스 배포
    • 기술 요구 사항
    • 넷플릭스 유레카를 쿠버네티스 서비스로 대체
    • Kustomize 소개
      • 베이스 폴더에 공통 정의 설정
    • 개발 및 테스트 환경을 위한 쿠버네티스 배포
      • 도커 이미지 빌드
      • 쿠버네티스에 배포
      • 쿠버네티스 환경에 맞게 테스트 스크립트 수정
      • 디플로이먼트 테스트
    • 준비 및 상용 환경을 위한 쿠버네티스 배포
      • 소스 코드 수정
      • 쿠버네티스에 배포
    • 롤링 업그레이드 수행
      • 롤링 업그레이드 준비
      • product 서비스를 v1에서 v2로 업그레이드
    • 실패한 디플로이먼트 롤백
      • 정리
    • 요약
    • 질문

  • 17장. 쿠버네티스로 기존 인프라 대체
    • 기술 요구 사항
    • 스프링 클라우드 컨피그 서버 대체
      • 스프링 클라우드 컨피그 서버를 대체하기 위한 소스 코드 변경
    • 스프링 클라우드 게이트웨이 대체
      • 스프링 클라우드 게이트웨이를 대체하기 위한 소스 코드 변경
    • 쿠버네티스 컨피그 맵, 시크릿, 인그레스 리소스를 사용한 테스트
      • 배포 스크립트 분석
      • 배포 및 테스트 커맨드 실행
    • 인증서 프로비저닝 자동화
      • Cert Manager 배포 및 Let’s Encrypt 발급자 정의
      • ngrok으로 HTTP 터널 생성
      • Cert Manager와 Let’s Encrypt를 사용한 인증서 프로비저닝
      • 정리
    • 쿠버네티스 없이도 마이크로서비스가 작동하는지 확인
      • 도커 컴포즈 소스 코드 수정
      • 도커 컴포즈로 테스트
    • 요약
    • 질문

  • 18장. 서비스 메시를 사용해 관찰 가능성 및 관리 편의성 개선
    • 기술 요구 사항
    • 이스티오를 이용한 서비스 메시 소개
      • 기존 마이크로서비스에 이스티오 프록시 삽입
      • 이스티오의 API 객체 소개
      • 이스티오의 런타임 컴포넌트 소개
      • 마이크로서비스 환경의 변경 사항
    • 쿠버네티스 클러스터에 이스티오 배포
      • 이스티오 서비스에 대한 접근 설정
    • 서비스 메시 생성
      • 소스 코드 변경
      • 커맨드를 실행해 서비스 메시 생성
    • 서비스 메시 관찰
    • 서비스 메시 보안
      • HTTPS와 인증서로 외부 엔드포인트 보호
      • OAuth 2.0/OIDC 접근 토큰을 사용한 외부 요청 인증
      • 상호 인증을 사용한 내부 통신 보호
    • 서비스 메시의 탄력성 확보
      • 결함을 삽입해 탄력성 테스트
      • 지연을 삽입해 탄력성 테스트
    • 비가동 시간 없이 배포 수행
      • 소스 코드 변경
      • v1 및 v2 버전의 마이크로서비스 배포
      • 모든 트래픽이 v1 버전의 마이크로서비스로 전달되는지 확인
      • 카나리아 테스트 실행
      • 블루/그린 테스트 실행
    • 도커 컴포즈로 테스트 실행
    • 요약
    • 질문

  • 19장. EFK 스택을 사용한 로깅 중앙화
    • 기술 요구 사항
    • 플루언티드 구성
      • 플루언티드 소개
      • 플루언티드 구성
    • 쿠버네티스에 EFK 스택 배포
      • 마이크로서비스 빌드 및 배포
      • 일래스틱서치와 키바나 배포
      • 플루언티드 배포
    • EFK 스택 실습
      • 키바나 초기화
      • 로그 레코드 분석
      • 마이크로서비스의 로그 레코드 검색
      • 근본 원인 분석 수행
    • 요약
    • 질문

  • 20장. 마이크로서비스 모니터링
    • 기술 요구 사항
    • 프로메테우스와 그라파나를 사용한 성능 모니터링
    • 애플리케이션 메트릭 수집을 위한 소스 코드 변경
    • 마이크로서비스 빌드 및 배포
    • 그라파나 대시보드를 사용한 마이크로서비스 모니터링
      • 테스트용 로컬 메일 서버 설치
      • 부하 테스트 실행
      • 키알리의 그라파나 대시보드
      • 기존 그라파나 대시보드 가져오기
      • 사용자 정의 그라파나 대시보드 개발
    • 그라파나 경고 설정
      • 메일 기반 알림 채널 정의
      • 서킷 브레이커에 경고 설정
      • 서킷 브레이커 경고 테스트
    • 요약
    • 질문

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

[p.51 : 8행]

1. 네트워크는 안전하다.

1. 네트워크는 안정적이다.