본문 바로가기

book

클라우드 네이티브 스프링 인 액션

 

책은 매우 두껍습니다. 

이 책을 처음볼때 주안점은 기존 Spring 책과 무엇이 다른가?

어떤 독자 분들이 보시면, 도움되는 내용이 있는가 살펴봐야 합니다.

 

책에서 소개되는 효과적인 학습 방법으로 소개되는 flow는 아래와 같습니다.

가사의 온라인 서점 시스템을 개발하는 과정을 처음부터 진행하는 방식으로 구성되어 있습니다.

 

 

 

Spring을 통해서 서비스 하기 위한 거의 모든 것이 망라되어 있는 AllInOne같은 책이라고 생각이 됩니다.

책이 내용에 대해서 언급되어 있는, 장표를 추가합니다.

저자분도 실제 업무에서 사용이 가능한 기술적인 내용에 주안점을 두고 집필하셨다고 합니다.

 

 

 

■ 책이 매우 친절합니다.

· 처음에 책을 살펴보면서, 조금 놀란 부분은 책이 무조건 어려운 내용으로만 되어 있을것 같았는데, 전혀 그렇지 않았습니다. 

분명 선수 지식이 필요한 부분은 있지만, 매우 상세히 내용에 대해서 설명하고, 무엇가 하나하나 이론에 기반하여서 

어떠한 이유로 이 기술이 사용되는지 공감대를 형성하는 구성으로 되어 있어서 책은 두껍지만, 하나하나 필요한 부분 보아도

충분히 도움될수 있게 구성이 되어 있습니다.

 

아래 그림처럼, 빌드 설정에 대한 설명을 보면서 매우 상세하게 내용 구성이 되어 있는 것을 바로 알수 있었습니다.

 

 

· 책의 두께를 보고, 기본지식이 있다고 관련 부분에 대한 설명이 Skip되는 부분이 있을수도 있다고 생각을 했는데, 

전혀 그렇게 느껴지지 않았고 다른 책들보다 더 친절하다는 생각이 들었습니다.

■ 클라우드 네이티브란?

· 처음 해당 용어에 대해서 어색한 부분이 있을수 있는데, 저자분은 명확히 어떠한 이유로 이 단어가 나왔고 기존의 서비스 설계에서 차이점이 무엇인지 설명합니다.

· 이 용어는 2010년에 폴 프리맨틀이라는 분이 블로그에 올려서 처음 언급되었는데, 그때 당시에 MSA, 도커, 데브옵스 쿠버네티스, 스프링부터 같은 개념과 기술이 아직 존재하지 않았던 시가리고 합니다. (이 부분이 많이 새롭고 의아했습니다.)

· 가장 큰 개념 및 설명하려고 하는 의도는 기존에 클라우드가 아닌 기존 애플리케이션을 클라우드에 옮기는 것은 클라우드 네이티브가 아니라는 개념입니다.

· 개념도

 

이렇게 많은 구성요소들을 고려해야 최적으 클라우드 네이티브 구성을 할수 있는 부분은 매우 독자 입장에서 체크포인트를 제공해주는 부분이라서 평소 생각하지 않은 사항들을 잘 살펴볼수 있습니다.

·CNCF재단 : 클라우드 네이티브 컴퓨팅 재단이며, 쿠버네티스 등 클라우드 오픈소스를 학습할때 많이 언급됩니다.  

원래 쿠퍼네티스는 구글에서 만든 오픈소스이지만, 현재 CNCF재단의 오픈소스로 클라우드 생태계를 발전하기 위해서 관리되고 있다고 알고 있습니다.

 

· 보통 ks8환경 구축시 많이, 적용하시는 구성 및 12가지 요소에 대해서 설명되어집니다.

 

· 

 

■ 클라우드 네이티브 개발을 해보자

· 이제 본격적으로 개발을 하게 될때, 아래와 같은 항목이 설명되어 집니다.

- 클라우드 네이티브 프로젝트의 부트스트래핑

하나의 코드 베이스, 하나의 애플리케이션으로 관리를 해야 합니다.
그래들, 메이븐을 이용해서 래퍼 스크립드로 의존성 관리를 진행합니다.

 

- 임베디드 서버와 톰캣을 사용한 작업

- 스프링 MVC를 사용한 RESTful 애플리케이션 구축

- 스프링 테스트를 사용한 RESTful 애플리케이션 구축

@SpringBootTest
@WebMvcTest
@JsonTest

- 깃허브 액션을 사용한 빌드 및 테스트 자동화

 

· 4장. 외부화 설정 관리

여러대의 서버들의 유연하게 동작을 잘 동작하기 위해서는 configuration의 관리 및 사용법이 매우 중요합니다.

일반적인 Spring 관련 설정 이외의 고려해야 하는 사항은 무엇일지 살펴봅니다.

 

 

일반적인 Spring에 대한 설정을 파악하기에도 아주 좋은 내용으로 구성되어 있습니다.

속성 소스이 우선순위 목록들 (@TestPropertySource, System.getenv()등등...)

설정 데이터 파일은 더 세부적인 우선 순위들이 있습니다.

- jar외부에 패키칭, 내부에 패키징 application.yml, application-{profile}.properties등등에 대해서 동작 원리를 알지 못하면

다양한 서버에 배포되는 경우, 의도하지 않은 flow대로 흐름이 진행될수 있습니다.

 

 

· 5장. 클라우드에서 데이터 저장과 관리

이 책에서는 PostgreSQL을 컨테이너로 실행을 해서 실습을 합니다.

Spring Data JDBC아니면, Spring Data JPA 어떤것을 사용해야 좋을지 고민하는 부분에 대해서 p.187에서 설명을 하는데, 일반적인 내용보다 더 이해가 좋았고, 최종적으로 이 책에서는 클라우드 네이티브 애플리케이션과 잘 맞고 가지고 있는 장점이 명확해서 JDBC를 이용해서 실습을 진행합니다.

 

실습에 전혀 문제가 없도록 각종 설정사항들이 잘 설명되어져 있습니다.

이러한 설명이 내용이 평소에 관습처럼, 또는 크게 의미를 가지지 않았던 항목의 사항이 언급되어서, 일반적인 spring을 공부하는 독자분이라고 해도 큰 도움을 받을수 있을 것 같습니다.

 

 - JDBC 감사 활성화 설정에 대한 부분

@CreateBy, @CreateDate, @LastModifiedBy, @LastModifiedDate에 대한 부분도 좋았습니다.

 - 스프링 및 테스트 컨테이너로 데이터 지속성 테스트 하기

 - 플라이웨이를 통한 프로덕션 환경에서의 데이터베이스 관리

  : 자바 생태계에서 데이터베이스 변경 사항의 추적, 버전 관리 및 배포를 위해서 가장 많이 사용하는 2가지 종류  (플라이웨어, 리퀴베이스)가 있습니다.

 

· 6장. 스프링 부터 컨테이너화

 - 도커를 활용해서 컨테이너 이미지로 작업하고, 패키징, 도커 컴포즈를 사용한 컨테이너 관리,  깃허브 액션을 사용한 이미지 빌드 및 푸시 자동화를 통해서 이제 클라우드 네이티브 구성을 쉽게 관련 소스를 모듈화 하는 방법이 소개됩니다. 

 - 도커를 한번이라도 사용해보시거나, 경험해보셨으면 조금더 쉽게 접근 가능하지만 그래도 처음부터 어떠한 동작방식으로 사용되는지 책을 통해서도 이해하실수 있는 내용으로 구성되어 있습니다.

 

· 7장. 스프링 부트를 위한 쿠버네티스 기초

 - 이제 실제 이론적으로 필요한 마지막 기술요소인 ks8에 대해서 다룹니다.

항목)

 - 도커에서 쿠버네티스로 이동

 - 스프링 부트 애플리케이션을 쿠버네티스에 배포

 - 서비스 검색 및 부하 분산의 이해

 - 확정성 및 일회용 애플리케이션 구축

 - 로컬 쿠버네티스 개발 워크플로 구축

 - 깃허브 액션으로 쿠버네티스 매니페스트 검증

파드, 틸드 사용, 배포 파이프라인 구성등 실제 크게크게 시스템 구성 및 로컬 개발환경을 하나하나 구축해 나갑니다.

 

이렇게 여러기술요소를 하나의 흐름대로 깊이있게 하나의 흐름대로 실습 및 이론적인 부분을 설명하는 책은 잘 못본것 같은데,

매우 깊은 인상이 남았습니다.  매우 흥미롭게 실습까지 진행할 수 있는 구성으로 되어 있습니다.

 

■ 클라우드 네이티브 분산 시스템

8장 부터는 실제적으로 일반적인 서비스 개발과 다른 분산시스템 구성을 위한 목차로 구성됩니다.

 

· 리액터와 스프링의 비동기 및 비차단 아키텍처를 활용합니다.

 

리액터를 사용할때, map, flatMap에 대한 선택에 가이드를 제공합니다.

스프링 웹플럭스로 REST API를 사용해서 주문서비스 실습을 연습합니다.

오류가 발생시, 재시도, 롤백, 오류처리, 타임아웃에 대한 이슈가 발생했을때의 처리 전략을 클라우드 구성시에 필수적인 부분인데

잘 설명되어 있습니다.

@DataR2dbcTest, @WebFluxTest등을 통한 테스트케이스~ 진행

 

· API 게이트웨이와 서킷 브레이커

이제 조금 다른 아키텍처 구성이 필요한 시점이고 그것에 대한 내용이 언급됩니다.

기존에 없었던 새로운 용어들과 개념이 들어갑니다. 

스프링클라우드 서킷 브레이커 및 레질리언스J로 서킷 브레이커 설정

레디스를 사용한 사용율 제한기 정의, 스프링 세센 데이터 레디스를 활용한 분산 세션관리

쿠퍼네티스 인그레스로 애플리케이션 트래픽 라우팅 설정 등

스프링 리액티브 스택을 토대로, API게이트웨이를 구현합니다. API게이트웨이는 마이크로서비스와 같은 분산 아키텍처에서

클라이언트가 직접 내부 API를 연결하지 않도록 하기 위해 일반적으로 사용하는 패턴이다.

 

· 10장에서는 이벤트 중심 애플리케이션과 함수라는 부분인데,

이벤트 처리르 위해서 여러 접근 방법을 제공합니다. 

래빗MQ를 이용한 메세지큐 방식 및 스프링 크라우드 스트림을 이용한 이벤트 처리, 생성, 소비등을 다룹니다.

 

· 11장 , 12장에서는 보안.인증과 SPA에 대해서 다룹니다.

일반적인 스프링 보안 및 키클룩을 이용한 사용자 계정 관리, 오픈ID, JWT을 통한 방식이 소개되는데

JWT는 많이 사용하고 계시지만 다른 개념은 어떠한 방식에 차이점이 있고, 적용하기 위해서는 

무엇을 해야 하는지 소개되어져서, 업무에 활용범위가 더 넓어질것 같습니다.

 

책에 앞에서도 소개했던, 저자분이 실제 업무에서도 도움될수 있게 구성하신다는 의미가 책의 전반적으로 일치하신다는

생각이 들었고, 번역도 매우 어색하지 않고 기술적인 부분이 잘 소개되도록 설명되어 집니다.

스프링 보안, OAuth2를 활용한 API보호, 권한 부여등은 일반적인 Spring을 활용한 Application에서도

필요한 부분이 활용가능합니다.

 

· 마지막 4파트에서는 구성을 하였을때, 실제 운영에 필요한 모니터링, 설정, 배포등에 대해서 다룹니다.

목자를 보시면, 어떠한 기술들이 언급되어 있는지 파악이 용이하여서 가져와 보았습니다.


PART IV 프로덕션에서의 클라우드 네이티브

CHAPTER 13 관측 가능성 및 모니터링 
13.1 스프링 부트, 로키 및 플루언트 비트를 사용한 로깅
13.2 스프링 부트 액추에이터와 쿠버네티스를 사용한 상태 프로브
13.3 스프링 부트 액추에이터, 프로메테우스, 그라파나를 통한 메트릭 및 모니터링
13.4 오픈텔레메트리 및 템포를 사용한 분산 추적 
13.5 스프링 부트 액추에이터를 통한 애플리케이션 관리 및 모니터링 

CHAPTER 14 설정과 시크릿 관리 
14.1 쿠버네티스에서 애플리케이션 설정하기 
14.2 쿠버네티스에서 컨피그맵과 시크릿 사용 
14.3 커스터마이즈를 통한 설정 관리

CHAPTER 15 지속적 전달과 깃옵스 
15.1 배포 파이프라인: 수락 단계
15.2 프로덕션을 위한 스프링 부트 설정 
15.3 배포 파이프라인: 프로덕션 단계 
15.4 깃옵스를 사용한 지속적 배포 


CHAPTER 16 서버리스, 그랄VM 및 케이네이티브 
16.1 스프링 네이티브 및 그랄VM을 사용한 네이티브 이미지 
16.2 스프링 클라우드 함수를 사용한 서버리스 애플리케이션 
16.3 케이네이티브를 통한 서버리스 애플리케이션 배포 

 

클라우드 환경에서의 모니터링을 및 특화된 기술도 있고, 일반적으로 사용이 가능한 기술도 있습니다.

들어본 기술도 있고, 처음 이 책을 통해서 접한 기술도 있습니다.

이러한 부분들이 모두 담당하는 서비스에 바로 부분적으로 학습하고 시도해볼만한 기술들이 잘 소개되어 지고

실습을 진행할수 있게 구성되어서 매우 좋았습니다.

 

 

■ 대상 독자분

· 클라우드 네이티브에 관심은 있으시지만, 정의 및 개념에 대해서 학습을 하고 싶으신 분

· 스프링의 전제적은 서비스를 경험하고 다양한 기술을 조합해서 사용해보고 싶으신 분

· 이책이 비싸다고 느껴지는분(실제 이책의 내용은 금액보더 더 큰 지식을 제공하는것 같습니다.)

 

 

 

 

 

 

'book' 카테고리의 다른 글

그림으로 배우는 스프링 6 입문  (0) 2024.04.13
초자동화 시대가 온다  (0) 2024.04.07
한 권으로 끝내는 이미지 생성 AI with 미드저니  (0) 2024.03.17
You Don’t Know JS Yet  (0) 2024.02.18
Release의 모든 것  (0) 2023.12.22