이전에 진행했던 스프링 부트를 활용한 마이크로 서비스 개발
책에 이어서 이번에는
스프링으로 하는 마이크로서비스 구축
(매그너스 라슨) 으로 MSA 스터디를 해보려고한다.
이번 책은 이전보다 훨씬 두껍고 내용도 많아서 첫걸음 떼기 어렵지만 욕심부리지 않고 진행해보려 한다.
스프링부트와 스프링 클라우드를 사용해 상용 마이크로서비스를 구축한느 방법을 설명해준 책이다.
주로 spring boot, spring cloud, docker, kubernetes, Istio, EFK stack, Prometheus, Grafana 같은 오픈 소스 도구들을 주로 다룬다.
쿠버네티스를 컨테이너 오케스트레이터로 사용하고 이스티오를 서비스 메시로 사용해 기존 일체형 애플리케이션을 마이크로서비스로 분할하고 온프레미스나 클라우드로 배포하는 방법을 배우려는 자바, 스프링 개발자와 아키텍트를 위한 책이라고 소개 되어있다.
(과연 내가 해도 되는걸까.. 싶긴 하지만 욕심내지 말고 지식을 흡수하자!)
책은 1부
1부 스프링부트를 사용한 마이크로서비스 개발
2부 스프링 클라우드를 활용한 마이크로서비스 관리
3부 쿠버네티스를 사용한 경량 마이크로서비스 개발
로 총 20장으로 이루어져있고 자세한 목차는 아래를 보면 된다.
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장. 마이크로서비스 모니터링
기술 요구 사항
프로메테우스와 그라파나를 사용한 성능 모니터링
애플리케이션 메트릭 수집을 위한 소스 코드 변경
마이크로서비스 빌드 및 배포
그라파나 대시보드를 사용한 마이크로서비스 모니터링
__테스트용 로컬 메일 서버 설치
__부하 테스트 실행
__키알리의 그라파나 대시보드
__기존 그라파나 대시보드 가져오기
__사용자 정의 그라파나 대시보드 개발
그라파나 경고 설정
__메일 기반 알림 채널 정의
__서킷 브레이커에 경고 설정
__서킷 브레이커 경고 테스트
요약
질문
스터디의 목표는 마이크로서비스를 이용한 애플리케이션을 실습으로 한번 더 경험해보고, 이에 관련된 이론들을 눈으로 한번 봐서 나중에 프로젝트에 적용할만한 아이디어를 얻는 것이다.
최대한 내가 이해한 내용과 내가 중요하다고 생각되는 부분들을 중점적으로 진행하겠다.
저자의 github 주소는 https://github.com/PacktPublishing/Hands-On-Microservices-with-Spring-Boot-and-Spring-Cloud 이다.
이번 스터디도 파이팅!