클라우드 네이티브 스프링 인 액션 (스프링 부트와 도커, 쿠버네티스로 애플리케이션 구축하기)

클라우드 네이티브 스프링 인 액션 (스프링 부트와 도커, 쿠버네티스로 애플리케이션 구축하기)

$53.97
Description
클라우드 환경에 스프링 애플리케이션을 구축하는 효과적인 방법
클라우드 기술이 발달하면서 많은 애플리케이션이 클라우드에서 서비스되고 있다. 이 책에서는 가상의 온라인 서점 시스템을 개발하며 클라우드 환경에 애플리케이션을 어떻게 구축하는지 상세히 설명한다. 스프링으로 클라우드 네이티브 앱을 빌드 및 테스트하고, 도커로 컨테이너화하며, 쿠버네티스로 퍼블릭 클라우드에 배포하는 방법을 배운다. 클라우드 네이티브 환경과 개발 원칙에 대한 이해부터 시작하여 모범 사례와 디자인 패턴을 학습하고, 잘 알려지지 않은 팁과 요령을 배워 문제없이 클라우드 네이티브 개발을 진행하도록 돕는다. 나아가 보안, 복원력, 확장성 처리에 대해 이해하고 지속적 배포와 깃옵스까지 실습해본다. 점점 더 복잡해지는 클라우드 환경을 탐색하는 데 완벽한 입문서가 될 것이다.
저자

토마스 비탈레

(Thomas Vitale)
복원력 있고 안전한 클라우드 네이티브 엔터프라이즈 애플리케이션 구축을 전문으로 하는 소프트웨어 엔지니어이자 아키텍트다. 덴마크의 Systematic에서 소프트웨어 설루션의 설계 및 개발을 담당하고 있으며, 개발자 경험과 보안에 중점을 두고 클라우드 네이티브 환경을 위한 플랫폼 및 애플리케이션 현대화 작업을 해왔다. 주요 관심사 및 전문 분야는 자바, 스프링 부트, 쿠버네티스, 케이네이티브 및 클라우드 네이티브 기술 전반이다. 지속적 전달 관행을 지지하며 함께 협력하는 협업 문화를 통해 사용자, 고객, 비즈니스에 가치를 제공할 수 있다고 믿고 있으며, 스프링 보안 및 스프링 클라우드와 같은 오픈소스 프로젝트에 기여하고 커뮤니티에서 지식을 나누는 것도 좋아한다.

목차

옮긴이 머리말 xv
베타리더 후기 xviii
추천 서문(조시 롱) xx
머리말 xxii
감사의 글 xxiv
이 책에 대하여 xxvi
표지에 대하여 xxxii

PART I 클라우드 네이티브 개요
CHAPTER 1 클라우드 네이티브 소개 3
1.1 클라우드 네이티브란 무엇인가? 5
__1.1.1 클라우드 네이티브에서의 세 가지 P 5
1.2 클라우드와 클라우드 컴퓨팅 모델 6
__1.2.1 서비스형 인프라스트럭처 9 / 1.2.2 서비스형 컨테이너 9 / 1.2.3 서비스형 플랫폼 10 / 1.2.4 서비스형 함수 10 / 1.2.5 서비스형 소프트웨어 11
1.3 클라우드 네이티브 애플리케이션의 특성 11
__1.3.1 확장성 12 / 1.3.2 느슨한 결합 13 / 1.3.3 복원력 15 / 1.3.4 관측 가능성 16 / 1.3.5 관리 용이성 17
1.4 클라우드 네이티브를 지원하는 문화 및 관행 18
__1.4.1 자동화 19 / 1.4.2 지속적 전달 21 / 1.4.3 데브옵스 22
1.5 클라우드가 최선의 선택인가? 24
__1.5.1 속도 25 / 1.5.2 복원력 26 / 1.5.3 확장성 27 / 1.5.4 비용 27
1.6 클라우드 네이티브 구성 28
__1.6.1 컨테이너 29 / 1.6.2 오케스트레이션 32 / 1.6.3 서버리스 33
1.7 클라우드 네이티브 애플리케이션을 위한 아키텍처 35
__1.7.1 다중 계층에서 마이크로서비스 아키텍처까지 그리고 그 이후 36 / 1.7.2 클라우드 네이티브 애플리케이션을 위한 서비스 기반 아키텍처 38
요약 40

CHAPTER 2 클라우드 네이티브 패턴 및 기술 42
2.1 클라우드 네이티브 개발 원칙: 12요소와 확장 43
__2.1.1 하나의 코드베이스, 하나의 애플리케이션 44 / 2.1.2 API 우선 44 / 2.1.3 의존성 관리 44 / 2.1.4 설계, 빌드, 릴리스, 실행 45 / 2.1.5 설정, 크리덴셜 및 코드 45 / 2.1.6 로그 46 / 2.1.7 일회성 46 / 2.1.8 지원 서비스 47 / 2.1.9 환경 동일성 47 / 2.1.10 관리 프로세스 47 / 2.1.11 포트 바인딩 48 / 2.1.12 상태를 갖지 않는 프로세스 48 / 2.1.13 동시성 49 / 2.1.14 원격 측정 49 / 2.1.15 인증 및 승인 49
2.2 스프링을 사용한 클라우드 네이티브 애플리케이션 구축 50
__2.2.1 스프링 개요 50 / 2.2.2 스프링 부트 애플리케이션 구축 51
2.3 도커를 통한 애플리케이션 컨테이너화 62
__2.3.1 도커 소개: 이미지 및 컨테이너 63 / 2.3.2 컨테이너를 통한 스프링 애플리케이션의 실행 66
2.4 쿠버네티스로 컨테이너 관리 68
__2.4.1 쿠버네티스 소개: 배포, 파드, 서비스 69 / 2.4.2 쿠버네티스에서 스프링 애플리케이션 실행 71
2.5 폴라 북숍: 클라우드 네이티브 애플리케이션 75
__2.5.1 시스템 요구 사항 이해 75 / 2.5.2 프로젝트에서 사용되는 패턴과 기술 78
요약 82

PART II 클라우드 네이티브 개발
CHAPTER 3 클라우드 네이티브 개발 시작 87
3.1 클라우드 네이티브 프로젝트 부트스트래핑 88
__3.1.1 하나의 코드베이스, 하나의 애플리케이션 88 / 3.1.2 그래들과 메이븐의 의존성 관리 90
3.2 임베디드 서버로 작업 92
__3.2.1 실행 가능한 JAR 및 임베디드 서버 93 / 3.2.2 요청당 스레드 모델 이해 95 / 3.2.3 내장 톰캣 설정 97
3.3 스프링 MVC를 이용한 RESTful 애플리케이션 구축 100
__3.3.1 REST API를 먼저, 비즈니스 로직은 그다음 100 / 3.3.2 스프링 MVC를 이용한 REST API 구현 106 / 3.3.3 데이터 유효성 검사 및 오류 처리 109 / 3.3.4 미래 요구 사항을 위해 진화하는 API 114
3.4 스프링 RESTful 애플리케이션 테스트 115
__3.4.1 JUnit 5를 이용한 단위 테스트 117 / 3.4.2 @SpringBootTest를 통한 통합 테스트 119 / 3.4.3 @WebMvcTest를 사용한 REST 컨트롤러의 테스트 122 / 3.4.4 @JsonTest를 사용한 JSON 직렬화 테스트 124
3.5 배포 파이프라인: 빌드 및 테스트 126
__3.5.1 배포 파이프라인의 커밋 단계 이해 127 / 3.5.2 깃허브 액션을 이용한 커밋 단계 구현 129
요약 133

CHAPTER 4 외부화 설정 관리 136
4.1 스프링 설정 : 속성과 프로파일 139
__4.1.1 속성: 설정을 위한 키-값 쌍 140 / 4.1.2 프로파일: 기능 플래그와 설정 그룹 146
4.2 외부화된 구성: 하나의 빌드, 여러 설정 150
__4.2.1 커맨드라인 인수를 통한 애플리케이션 설정 152 / 4.2.2 JVM 시스템 속성을 통해 애플리케이션 구성 152 / 4.2.3 환경 변수를 통해 애플리케이션 구성 153
4.3 스프링 클라우드 컨피그 서버로 중앙식 설정 관리하기 155
__4.3.1 깃을 통한 설정 데이터 저장 158 / 4.3.2 설정 서버 구성 160 / 4.3.3 복원력 높은 설정 서버 생성 164 / 4.3.4 설정 서버 REST API 이해 166
4.4 스프링 클라우드 컨피그 클라이언트로 설정 서버 사용 168
__4.4.1 설정 클라이언트 구축 168 / 4.4.2 내결함성이 높은 설정 클라이언트의 구축 171 / 4.4.3 런타임 시 설정 새로고침 173
요약 176

CHAPTER 5 클라우드에서 데이터 저장과 관리 178
5.1 클라우드 네이티브 시스템을 위한 데이터베이스 179
__5.1.1 클라우드에서의 데이터 서비스 180 / 5.1.2 PostgreSQL을 컨테이너로 실행 183
5.2 스프링 데이터에 대한 데이터 지속성 JDBC 185
__5.2.1 JDBC로 데이터베이스에 연결 187 / 5.2.1 스프링 데이터를 통한 지속성 엔티티 정의 190 / 5.2.3 JDBC 감사 활성화와 설정 195 / 5.2.4 스프링 데이터의 데이터 리포지터리 198
5.3 스프링 및 테스트컨테이너로 데이터 지속성 테스트하기 202
__5.3.1 PostgreSQL을 위한 테스트컨테이너 설정 203 / 5.3.2 @DataJdbcTest 및 테스트컨테이너를 통한 데이터 지속성 테스트 205 / 5.3.3 @SpringBootTest 및 테스트컨테이너를 이용한 통합 테스트 206
5.4 플라이웨이를 통한 프로덕션 환경에서의 데이터베이스 관리 207
__5.4.1 플라이웨이 이해: 데이터베이스 버전 관리 208 / 5.4.2 플라이웨이를 이용한 데이터베이스 스키마 초기화 210 / 5.4.3 플라이웨이를 이용한 데이터베이스 진화 211
요약 213

CHAPTER 6 스프링 부트 컨테이너화 215
6.1 도커에서 컨테이너 이미지로 작업하기 216
__6.1.1 컨테이너 이미지 이해 217 / 6.1.2 도커파일을 통한 이미지 생성 218 / 6.1.3 깃허브 컨테이너 저장소로 이미지 저장 222
6.2 스프링 부트 애플리케이션을 컨테이너 이미지로 패키지 226
__6.2.1 스프링 부트의 컨테이너화를 위한 준비 226 / 6.2.2 도커파일로 스프링 부트 컨테이너화 229 / 6.2.3 프로덕션을 위한 컨테이너 이미지 빌드 231 / 6.2.4 클라우드 네이티브 빌드팩을 이용한 스프링 부트 컨테이너화 237
6.3 도커 컴포즈를 통한 스프링 부트 컨테이너의 관리 242
__6.3.1 도커 컴포즈를 통한 컨테이너 라이프사이클 관리 243 / 6.3.2 스프링 부트 컨테이너 디버깅 244
6.4 배포 파이프라인: 패키지 및 등록 247
__6.4.1 커밋 단계에서 릴리스 후보 빌드 248 / 6.4.2 깃허브 액션을 통한 컨테이너 이미지 등록 249
요약 254

CHAPTER 7 스프링 부트를 위한 쿠버네티스 기초 256
7.1 도커에서 쿠버네티스로의 이동 257
__7.1.1 로컬 쿠버네티스 클러스터 259 / 7.1.2 로컬 클러스터에서 데이터 서비스 관리 261
7.2 스프링 부트를 위한 쿠버네티스 배포 263
__7.2.1 컨테이너에서 파드로 263 / 7.2.2 배포를 통한 파드 제어 264 / 7.2.3 스프링 부트 애플리케이션을 위한 배포 객체 생성 265
7.3 서비스 검색 및 부하 분산 271
__7.3.1 서비스 검색 및 부하 분산의 이해 271 / 7.3.2 클라이언트 측 서비스 검색 및 부하 분산 272 / 7.3.3 서버 측 서비스 검색 및 부하 분산 274 / 7.3.4 쿠버네티스 서비스를 통한 스프링 부트 애플리케이션 노출 276
7.4 확장성과 일회성 279
__7.4.1 일회성을 위한 조건: 빠른 시작 280 / 7.4.2 일회성을 위한 조건: 우아한 종료 280 / 7.4.3 스프링 부트 애플리케이션 확장 283
7.5 틸트를 사용한 로컬 쿠버네티스 개발 286
__7.5.1 틸트를 사용한 내부 개발 루프 286 / 7.5.2 옥탄트를 사용한 쿠버네티스 워크로드 시각화 289
7.6 배포 파이프라인: 쿠버네티스 매니페스트 유효성 검사 292
__7.6.1 커밋 단계에서 쿠버네티스 매니페스트 검증 292 / 7.6.2 깃허브 액션을 통한 쿠버네티스 매니페스트 유효성 검사 자동화 294
요약 295

PART III 클라우드 네이티브 분산 시스템
CHAPTER 8 리액티브 스프링: 복원력과 확장성 299
8.1 리액터와 스프링의 비동기 및 비차단 아키텍처 301
__8.

출판사 서평

온라인 서점 시스템을 만들며 배우는 클라우드 네이티브 개발

클라우드 네이티브 방식을 이용하면 소프트웨어를 신속하게 제공하고, 필요에 따라 동적으로 확장하며, 비용을 최적화하면서 항상 사용 가능하게 유지할 수 있다. 개발자가 최상의 결과를 얻기 위해 고려해야 할 ‘15요소 방법론’을 기초로 클라우드 네이티브 애플리케이션을 개발하고 운영하는 거의 모든 방법을 이 책에 담았다. 스프링 부트와 쿠버네티스를 사용해 클라우드 네이티브 애플리케이션을 설계부터 빌드, 배포까지 모두 배울 수 있는 유익한 도서다.

‘폴라 북숍’이라는 가상의 온라인 서점 시스템을 개발하면서 스프링 및 자바 생태계에서 제공하는 라이브러리를 사용해 클라우드 네이티브 애플리케이션을 빌드하고 테스트하는 방법을 설명한다. 아이디어를 떠올리는 것을 시작으로 모든 과정을 단계별로 안내하고 있어 클라우드 네이티브 개발이 어떤 사이클로 이루어지는지 살펴볼 수 있다. 특히 REST API, 데이터 지속성, 리액티브 프로그래밍, API 게이트웨이, 함수, 이벤트 중심 아키텍처, 복원력, 보안, 테스트, 통합 가시성 등의 주제를 깊이 다루며 독자로 하여금 처음부터 끝까지 실습하도록 구성한 것이 장점이다. 끝으로 처음부터 만든 클라우드용 애플리케이션을 컨테이너 이미지로 패키징하고 쿠버네티스와 같은 클라우드 환경에 배포하는 방법까지 설명하며 대단원의 막을 내린다.

저자는 이 책을 구성하고 집필할 때 “예제는 일상 업무와 관련 있고 즉시 적용할 수 있는 실제적인 것이어야 한다”는 점을 원칙으로 삼았다고 밝혔다. 실전과 같은 예제를 차근차근 따라 하면서 현장에서 바로 쓸 수 있는 기술과 아이디어를 얻길 바란다.


주요 내용
● 스프링으로 클라우드 네이티브 패턴 구현
● 클라우드 네이티브 모범 사례 및 디자인 패턴
● 온라인 서점 시스템 개발 실습
● 필수 및 반응형 애플리케이션 빌드 및 테스트
● 보안, 복원력 및 확장성 처리
● 쿠버네티스에서 애플리케이션 구성, 배포 및 통합 가시성
● 지속적 배포 및 깃옵스 도입