마스터링 스프링 클라우드

스프링 클라우드를 활용한 마이크로서비스 아키텍처 기반 클라우드 네이티브 시스템 구축

분산 시스템에서 서비스를 개발, 테스트, 보안 강화, 배포하는 방법을 배우고 효과적으로 사용하는 방법을 배우자!

클라우드에서 애플리케이션을 개발하고 배포하고 운영하는 것은 로컬 애플리케이션을 개발하는 것만큼 쉬워야 한다. 이는 모든 클라우드 플랫폼과 라이브러리, 도구를 아우르는 원리다. 오픈소스 라이브러리인 스프링 클라우드는 클라우드를 위한 JVM 애플리케이션 개발을 쉽게 만들어 준다. 이 책은 스프링 클라우드를 소개하고 애플리케이션 개발자의 관점에서 그 기능에 숙달하도록 돕는다.

《마스터링 스프링 클라우드》에서는 스프링에서의 마이크로서비스와 스프링 클라우드에서 제공하는 기능을 소개하는 것으로 시작해, 스프링 클라우드 서버를 구성하고 서비스 등록과 디스커버리를 위한 유레카 서버를 실행하는 방법, 부하 분산과 서킷 브레이킹, 페인(Feign) 클라이언트의 모든 기능을 사용하는 기술을 배운다. 고급 주제로 넘어가서 스프링 클라우드에서 분산 추적 솔루션을 구현하고, 메시지 기반 마이크로서비스 아키텍처를 구축하는 것을 알아본다. 나아가 스프링 클라우드를 이용한 테스트와 보안 기술을 마스터하고 도커 컨테이너로 애플리케이션을 실행하는 방법을 설명한다.

★ 이 책에서 배우는 내용 ★

  • 스프링 클라우드의 모든 기능에 대한 개념
  • 스프링 클라우드 넷플릭스 OSS를 활용한 마이크로서비스 개발
  • 메시지 기반 아키텍처로 설계된 동기화된 마이크로서비스 API 개발
  • 분산 추적, 보안, 컨트렉트 테스팅과 같은 고급 주제 탐색
  • 운영 환경에 대한 애플리케이션 배포 및 관리

★ 핵심 특징 ★

  • 마이크로서비스 시스템에서 서비스 의존성을 엮기 위해 스프링 클라우드가 제공하는 풍부한 대안 탐색
  • 스프링 클라우드 넷플릭스 OSS를 활용한 마이크로서비스 제작
  • 스프링 클라우드를 이용한 클라우드-네이티브 데이터 설계

피요트르 민코프스키 (Piotr Minkowski)

피요트르 민코프스키는 금융과 통신 분야에서 개발자와 아키텍트로 10년 이상의 경력을 쌓았다. 그는 자바를 비롯한 관련 기술과 도구, 프레임워크 전문가다. 현재 폴란드의 모바일 운영회사인 Play에서 정보통신 시스템 아키텍트로 일한다. 아울러 일체형 애플리케이션/SOA를 마이크로서비스 기반 아키텍처로 전환하는 것과 완전한 지속 통합 및 전달 환경을 구축하는 것을 돕고 있다. 또한 개발과 관련된 J2EE와 프레임워크에 관해 컨설팅하고 CI/CD같은 소프트웨어 라이프사이클 전반 기술을 실무에 적용하고 있다. 이러한 경험과 실무 노하우는 그가 직접 운영 중인 블로그(https://piotrminkowski.wordpress.com/)에서 공유 중이다.

김민석

IT 기업에서 개발자로 시작해 소프트웨어 아키텍트, 엔지니어로 17년 이상 일했다. 다수의 SI 프로젝트에서 소프트웨어 생명주기와 관련된 개발 방법론과 소프트웨어 아키텍팅 기법을 적용했고 소프트웨어 품질 개선을 위한 시스템 테스트 자동화, 시스템 성능 테스팅을 수행했다. 또한 인터넷 포털 기업에서 대규모 분산 캐시 시스템을 비즈니스에 적용하는 것을 도왔으며 빅데이터 전문 기업에서 대규모 데이터를 다루는 시스템을 만들기도 했다. 현재는 피보탈(Pivotal)에서 플랫폼 아키텍트(Platform Architect)로 근무하며 고객이 클라우드를 잘 활용해 비즈니스 가치를 얻을 수 있도록 돕고 있다.

  • ▣ 01장: 마이크로서비스 소개
    • 마이크로서비스의 장점
    • 스프링 프레임워크로 마이크로서비스 만들기
    • 클라우드 네이티브 개발
    • 마이크로서비스 아키텍처 배우기
    • 서비스 디스커버리의 필요성 이해하기
    • 서비스 간 통신
    • 장애와 서킷 브레이커
    • 요약
    •  
  • ▣ 02장: 마이크로서비스를 위한 스프링
    • 스프링 부트 소개
    • 스프링 부트를 이용해 애플리케이션 개발하기
    • 컨피규레이션 파일 사용자 정의하기
    • RESTful 웹서비스 생성하기
    • API 문서화
    • 스웨거 2를 스프링 부트와 같이 사용하기
    • 스웨거 UI를 통한 API 테스트
    • 스프링 부트 액추에이터의 기능
    • 애플리케이션 정보
    • 상태 정보
    • 매트릭스
    • 개발자 도구
    • 데이터베이스와 애플리케이션의 통합
    • 예제 애플리케이션 빌드하기
    • 애플리케이션 실행하기
    • 요약
    •  
  • ▣ 03장: 스프링 클라우드 개요
    • 기본부터 시작하기
      • 넷플릭스(Netflix) OSS
    • 디스커버리와 분산 컨피규레이션
      • 또 다른 대안 - 컨설
      • 아파치 주키퍼
      • 기타 프로젝트
    • 슬루스를 사용한 분산 추적
    • 메시징과 통합
      • 클라우드 플랫폼 지원
    • 다른 유용한 라이브러리
      • 보안
      • 테스트 자동화
      • 클러스터 기능
    • 프로젝트 개요
    • 릴리즈 트레인(release trains)
    • 요약
    •  
  • ▣ 04장: 서비스 디스커버리
    • 서버 측에서 유레카 서버 실행하기
    • 클라이언트 측에서 유레카 활성화하기
    • 종료 시 등록 해제
    • 프로그램 방식으로 디스커버리 클라이언트 사용하기
    • 고급 컨피규레이션 설정
    • 레지스트리 갱신하기
    • 인스턴스 식별자 변경하기
    • IP 주소 우선하기
    • 응답 캐시
    • 클라이언트와 서버 간의 보안 통신 사용하기
    • 안전한 서비스 등록하기
    • 유레카 API
    • 복제와 고가용성
    • 예제 솔루션의 아키텍처
    • 예제 애플리케이션 개발하기
    • 장애 조치
    • 존(Zones)
    • 하나의 서버를 사용하는 존
    • 예제 애플리케이션 개발하기
    • 요약
    •  
  • ▣ 05장: 스프링 클라우드 컨피그를 사용한 분산 컨피규레이션
    • HTTP API 자원의 소개
      • 네이티브 프로파일 지원
    • 서버 측 애플리케이션 개발하기
    • 클라이언트 측 애플리케이션 개발하기
    • 유레카 서버 추가하기
    • 클라이언트 측에 부트스트랩 접근 방식 사용
      • 컨피그 서버 디스커버리
    • 백엔드 저장소 타입
      • 파일 시스템 백엔드
      • 깃 백엔드
      • 볼트 백엔드
    • 추가 기능
      • 시작 시 실패와 재시도
      • 클라이언트 안전하게 하기
    • 자동으로 컨피규레이션 다시 읽기
      • 솔루션 아키텍처
      • @RefreshScope를 사용해 컨피규레이션 다시 읽기
      • 메시지 브로커로부터 이벤트 받기
      • 컨피그 서버에서 저장소 변경 모니터링하기
    • 요약 109
    •  
  • ▣ 6장: 마이크로서비스 간의 커뮤니케이션
    • 다양한 커뮤니케이션 스타일
    • 스프링 클라우드를 사용한 동기식 통신
    • 리본을 사용한 부하 분산
      • 리본 클라이언트를 사용해 마이크로서비스 간 커뮤니케이션하기
    • 서비스 디스커버리와 함께 RestTemplate 사용하기
      • 예제 애플리케이션 개발하기
    • 페인(Feign) 클라이언트 사용하기
      • 여러 존의 지원
      • 애플리케이션에서 페인 사용하기
      • 상속 지원
    • 수동으로 클라이언트 생성하기
      • 사용자 정의 클라이언트
    • 요약
    •  
  • ▣ 7장: 고급 부하 분산 및 서킷 브레이커
    • 부하 분산 룰
      • WeightedResponseTime 룰
    • 리본 클라이언트 사용자 정의하기
    • 히스트릭스를 사용하는 서킷 브레이커 패턴
      • 히스트릭스를 사용하는 애플리케이션 개발
      • 서킷 브레이커 차단하기
    • 대기 시간과 장애 내성 모니터링하기
      • 히스트릭스 메트릭 스트림 노출하기
      • 히스트릭스 대시보드
    • 장애와 페인을 사용한 서킷 브레이커 패턴
      • 리본을 사용해 연결 재시도하기
      • 페인을 지원하는 히스트릭스
    • 요약
    •  
  • ▣ 08장: API 게이트웨이를 사용한 라우팅과 필터링
    • 스프링 클라우드 넷플릭스 주울 사용하기
      • 게이트웨이 애플리케이션 개발하기
      • 서비스 디스커버리와 연동하기
      • 라우트 컨피규레이션 사용자 정의하기
      • 리본 클라이언트를 사용한 라우트 정의
      • 종단점 관리
      • 히스트릭스 폴백 제공하기
      • 주울 필터
    • 스프링 클라우드 게이트웨이 사용하기
      • 프로젝트에 스프링 클라우드 게이트웨이 사용하기
      • 내장된 조건자와 필터
      • 마이크로서비스를 위한 게이트웨이
      • 서비스 디스커버리와 통합하기
    • 요약
    •  
  • ▣ 09장: 분산 로깅과 추적
    • 마이크로서비스를 위한 로깅의 모범 사례
    • 스프링 부트를 사용한 로깅
    • ELK 스택을 사용한 통합 로그 수집
      • 머신에 ELK 스택 컨피규레이션하기
      • 애플리케이션과 ELK 스택 통합하기
    • 스프링 클라우드 슬루스
      • 슬루스와 애플리케이션 통합하기
      • 키바나를 사용해 이벤트 찾기
      • 집킨과 슬루스 통합하기
    • 요약
    •  
  • ▣ 10장: 추가 컨피규레이션 및 디스커버리 기능
    • 스프링 클라우드 컨설 사용하기
      • 컨설 에이전트 실행하기
      • 클라이언트 측에 통합하기
      • 서비스 디스커버리
      • 분산 컨피규레이션
    • 스프링 클라우드 주키퍼 사용하기
      • 주키퍼 실행하기
      • 서비스 디스커버리
      • 분산 컨피규레이션
    • 요약
    •  
  • ▣ 11장: 메시지 주도 마이크로서비스
    • 스프링 클라우드 스트림 배우기
    • 메시징 시스템 구축하기
      • 스프링 클라우드 스트림 사용하기
      • 채널을 선언하고 바인딩하기
      • 래빗엠큐 브로커를 사용해 사용자 정의 연결 설정하기
      • 다른 스프링 클라우드 프로젝트와 통합하기
    • 게시/구독 모델
      • 예제 시스템 실행하기
      • 확장 및 그루핑
    • 컨피규레이션 옵션
      • 스프링 클라우드 스트림 속성
      • 속성 바인드하기
      • 컨슈머
    • 고급 프로그래밍 모델
      • 메시지 생성하기
    • 변환(transformation)
      • 조건에 따라 메시지 소비하기
    • 아파치 카프카 사용하기
      • 카프카 실행하기
      • 애플리케이션을 맞춤형으로 설정하기
      • 카프카 스트림 API 지원
      • 컨피규레이션 속성
    • 다양한 바인더
    • 요약
    •  
  • ▣ 12장: API 보안 강화하기
    • 스프링 부트에서 HTTPS 사용하기
    • 디스커버리 보안 강화
      • 안전한 애플리케이션 등록하기
      • HTTPS상에서 유레카 서비스하기
    • 컨피규레이션 서버 보안 강화
      • 암호화와 복호화
      • 클라이언트와 서버를 위한 인증 구성하기
    • OAuth2로 권한 부여
      • OAuth2 소개
      • 권한 부여 서버 구축하기
      • 클라이언트 컨피규레이션
      • JDBC 백엔드 저장소 사용하기
      • 서비스 간 권한 부여
      • API 게이트웨이에서 SSO 사용하기
    • 요약
    •  
  • ▣ 13장: 자바 마이크로서비스 테스팅
    • 테스팅 전략
    • 스프링 부트 애플리케이션 테스팅
      • 예제 애플리케이션 개발하기
      • 데이터베이스와 통합
    • 단위 테스트
    • 컴포넌트 테스트
      • 메모리 기반 데이터베이스를 사용해 테스트 실행하기
      • HTTP 클라이언트와 서비스 디스커버리 다루기
      • 예제 테스트 구현하기
    • 통합 테스트
      • 테스트 분류하기
      • HTTP 트래픽 포착하기
    • 컨트랙트 테스트
      • 팩트 사용하기
      • 스프링 클라우드 컨트랙트 사용하기
    • 성능 테스트
    • 요약
    •  
  • ▣ 14장: 도커 지원
    • 도커 소개
    • 도커 설치하기
    • 자주 사용하는 도커 명령
      • 컨테이너 시작 및 중지하기
      • 컨테이너 목록 조회 및 제거하기
      • 이미지 당겨오기 및 올리기
      • 이미지 빌드하기
      • 네트워킹
    • 마이크로서비스의 도커 이미지 생성하기
      • 도커 파일
      • 컨테이너화된 마이크로서비스 실행하기
      • 메이븐 플러그인을 사용해 이미지 빌드하기
      • 고급 도커 이미지
    • 지속적인 배포
      • 도커에 젠킨스 통합하기
      • 파이프라인 구축하기
    • 쿠버네티스와 함께 사용하기
      • 개념과 구성 요소
      • 미니큐브를 통해 로컬에 쿠버네티스 실행하기
      • 애플리케이션 배포하기
      • 클러스터 관리하기
    • 요약
    •  
  • ▣ 15장: 클라우드 플랫폼상의 스프링 마이크로서비스
    • 피보탈 클라우드 파운드리
      • 사용 모델
      • 애플리케이션 준비
      • 히로쿠(Heroku) 플랫폼
      • 애플리케이션 준비하기
      • 배포 테스트하기
    • 요약