그림으로 쉽게 배우는 HTML+CSS+자바스크립트
27,000원
초급
도서 소개
단계별로 배우는 견고하고 확장성 있는 마이크로서비스 구축과 배포!
이 책에서는 실용적인 접근 방식을 채택해 간단한 마이크로서비스부터 시작해 복잡한 분산 애플리케이션을 구축하는 과정을 단계적으로 진행한다. 그 과정에서 마이크로서비스 구축에 필수적인 기능들을 학습하고 쿠버네티스와 이스티오를 이용해 마이크로서비스를 배포하는 방법을 익힐 수 있다.
4차 개정판인 이 책에서는 자바 24, 스프링 부트 3.5, 스프링 클라우드 2025를 사용한다. 코드 예제가 전체적으로 업데이트됐으며, 사용 중단된 API는 대체되어 최신 정보를 제공한다. 스프링의 AOT 모듈, 관찰 가능성, 분산 추적, 쿠버네티스 패키징을 위한 헬름에 대한 지식을 배울 수 있다.
실습에서는 도커 컴포즈를 사용해 데이터베이스 및 메시징 서비스와 함께 마이크로서비스를 실행하는 것으로 시작해 이스티오를 사용해 쿠버네티스에 마이크로서비스를 배포한다. 또한 데이터 영속성, 복원력, 반응형 마이크로서비스, OpenAPI를 활용한 API 문서화를 비롯해 넷플릭스 유레카를 활용한 서비스 디스커버리, 스프링 클라우드 게이트웨이를 활용한 에지 서버 구축, 프로메테우스, 그라나파, EFK 스택을 활용한 모니터링을 배운다.
이 책을 마치고 나면 스프링 부트와 스프링 클라우드를 활용해 견고하고 확장성 있는 마이크로서비스를 구축할 수 있을 것이다.
★ 이 책에서 다루는 내용 ★
- 스프링 부트를 활용한 반응형 마이크로서비스 구축
- 스프링 클라우드를 활용한 탄력적이고 확장 가능한 마이크로서비스 개발
- OAuth 및 스프링 시큐리티를 활용한 API 보호
- 도커를 이용한 개발, 테스트, 생산 환경 간의 격차 해소
- 쿠버네티스를 이용한 마이크로서비스 배포 및 관리
- 이스티오를 적용해 보안, 관찰 가능성, 트래픽 관리를 개선
- JUnit, 테스트 컨테이너, 그레이들, bash를 이용한 마이크로서비스 테스트 자동화
- 스프링 AOT 및 GraalVM을 이용한 마이크로서비스의 네이티브 컴파일
- 마이크로미터 트레이싱을 활용한 분산 추적
도서 소개

저자 소개
마그누스 라르손 (Magnus Larsson)
1986년부터 IT 업계의 베테랑으로 활동해왔으며, 볼보, 에릭슨, 아스트라제네카 등 스웨덴의 주요 기업에서 컨설팅을 담당했다. 과거에는 분산 시스템 구축에 어려움이 많았지만 오늘날에는 스프링 클라우드, 쿠버네티스, 이스티오 같은 오픈소스 도구들이 효과적인 해결책을 제공한다. 지난 10년 동안 마그누스는 고객이 이러한 도구를 사용할 수 있도록 지원해 왔으며, 프레젠테이션과 블로그를 통해 인사이트를 공유해 왔다.
역자 소개
트랜스메이트
다양한 IT 기술과 실용적인 주제에 관심 있는 사람들이 함께하는 번역가 모임이다. 시시각각 변화하는 IT 분야에 발맞춰 정확하게 이해하고 편안하게 읽을 수 있는 기술서로 거듭날 수 있게 노력하고 있다.
목차
- [1부] 스프링 부트를 활용해 마이크로서비스 개발 시작하기
- ▣ 01장: 마이크로서비스 소개
- 기술적 요구사항
- 마이크로서비스와의 만남
- __자율적인 소프트웨어 컴포넌트의 이점
- __자율적인 소프트웨어 컴포넌트의 문제
- __마이크로서비스 시작하기
- __예제 마이크로서비스 환경
- 마이크로서비스 정의
- 마이크로서비스의 문제
- 마이크로서비스 디자인 패턴
- __서비스 디스커버리
- __에지 서버
- __반응형 마이크로서비스
- __중앙 집중식 구성
- __중앙 집중식 로그 분석
- __분산 추적
- __서킷 브레이커
- __제어 루프
- __중앙 집중식 모니터링과 알람
- 소프트웨어 지원 도구
- 기타 중요한 고려 사항
- 정리
- ▣ 02장: 스프링 부트 소개
- 기술적 요구사항
- 스프링 부트
- __‘구성보다 관습’과 팻 JAR 파일
- __스프링 부트 애플리케이션 설정을 위한 코드 예제
- __스프링 부트 3.0 ~ 3.5의 새로운 기능
- __스프링 부트 2 애플리케이션의 마이그레이션
- 스프링 웹플럭스
- __REST 서비스 구축을 위한 코드 예제
- __springdoc-openapi
- 스프링 데이터
- __엔티티
- __리포지터리
- 스프링 클라우드 스트림
- __메시지 전송과 수신을 위한 코드 예제
- 도커
- 정리
- 문제
- ▣ 03장: 협력하는 마이크로서비스 만들기
- 기술적 요구사항
- 마이크로서비스 환경 소개
- 마이크로서비스에서 처리하는 정보
- __제품 서비스
- __리뷰 서비스
- __추천 서비스
- __제품 복합 서비스
- __인프라 관련 정보
- __임시로 서비스 디스커버리 대체하기
- 기본 골격 마이크로서비스 생성
- __스프링 이니셜라이저를 활용한 기본 골격 코드 생성
- __그레이들에서 멀티 프로젝트 빌드 설정
- RESTful API 추가
- __API와 유틸리티 프로젝트 추가
- __API 구현
- 복합 마이크로서비스 추가
- __API 클래스
- __프로퍼티
- __통합 컴포넌트
- __복합 API 구현
- 오류 처리 추가
- __전역 REST 컨트롤러 예외 핸들러
- __API 구현에서의 오류 처리
- __API 클라이언트에서의 오류 처리
- API 수동 테스트
- 격리된 환경의 자동화된 마이크로서비스 테스트 추가
- 마이크로서비스 환경에 대한 반자동화된 테스트 추가
- __테스트 스크립트 실행
- 정리
- 문제
- ▣ 04장: 도커를 활용한 마이크로서비스 배포
- 기술적 요구사항
- 도커 소개
- __첫 번째 도커 명령 실행
- 도커에서 자바 실행하기
- __사용 가능한 CPU 제한하기
- __사용 가능한 메모리 제한하기
- 단일 마이크로서비스에 도커 사용
- __소스코드의 변경 사항
- __도커 이미지 빌드
- __서비스 구동
- __컨테이너를 분리 모드로 실행
- 도커 컴포즈를 활용한 마이크로서비스 환경 관리
- __소스코드의 변경 사항
- __마이크로서비스 환경 구동
- 협력 마이크로서비스의 테스트 자동화
- __테스트 실행 문제 해결
- 정리
- 문제
- ▣ 05장: OpenAPI를 활용한 API 문서화
- 기술적 요구사항
- springdoc-openapi 사용법 소개
- 소스코드에 springdoc-openapi 추가
- __그레이들 빌드 파일에 의존성 추가
- __ProductCompositeService에 OpenAPI 구성 및 일반 API 문서 추가
- __ProductCompositeService 인터페이스에 API 관련 문서 추가
- 마이크로서비스 환경 빌드 및 구동
- OpenAPI 문서 테스트
- 정리
- 문제
- ▣ 06장: 영속성 추가
- 기술적 요구사항
- 이번 장의 목표
- 핵심 마이크로서비스에 영속성 계층 추가
- __의존성 추가
- __엔티티 클래스를 활용한 데이터 저장
- __스프링 데이터에서 리포지터리 정의하기
- 영속성에 중점을 둔 자동화된 테스트 작성
- __Testcontainers 사용
- __영속성 테스트 작성
- 서비스 계층에서 영속성 계층 사용
- __데이터베이스 연결 URL 로깅
- __새 API 추가
- __서비스 계층에서 영속성 계층 호출
- __자바 빈 매퍼 선언
- __서비스 테스트 업데이트
- 복합 서비스 API 확장
- __복합 서비스 API에 새 연산 추가
- __통합 계층에 메서드를 추가
- __새로운 복합 API 연산 구현
- __복합 서비스 테스트 업데이트
- 도커 컴포즈 환경에 데이터베이스 추가
- __도커 컴포즈 구성
- __데이터베이스 연결 구성
- __MongoDB와 MySQL CLI 도구
- 새로운 API와 영속성 계층에 대한 수동 테스트
- 마이크로서비스 환경의 자동화된 테스트 업데이트
- 정리
- 문제
- ▣ 07장: 반응형 마이크로서비스 개발
- 기술적 요구사항
- 논블로킹 동기 API와 이벤트 기반 비동기 서비스 중에서 선택하기
- 논블로킹 동기 RESTful API 개발
- __프로젝트 리액터 소개
- __스프링 데이터 MongoDB를 활용한 논블로킹 영속성
- __핵심 서비스의 논블로킹 RESTful API
- __복합 서비스의 논블로킹 RESTful API
- 이벤트 기반 비동기 서비스 개발
- __메시징 관련 문제 처리
- __토픽과 이벤트 정의
- __그레이들 빌드 파일 변경
- __핵심 서비스에서 이벤트 소비하기
- __복합 서비스에서 이벤트 게시하기
- 반응형 마이크로서비스 환경에 대한 수동 테스트 실행
- __이벤트 저장
- __상태 API 추가
- __파티션을 사용하지 않고 RabbitMQ 사용하기
- __파티션과 함께 RabbitMQ 사용하기
- __토픽당 두 개의 파티션과 함께 카프카 사용하기
- 반응형 마이크로서비스 환경에 대한 자동화된 테스트 실행
- 정리
- 문제
- [2부] 스프링 클라우드를 활용한 마이크로서비스 관리
- ▣ 08장: 스프링 클라우드 소개
- 기술적 요구사항
- 스프링 클라우드의 진화
- 서비스 디스커버리를 위한 넷플릭스 유레카 활용
- 스프링 클라우드 게이트웨이를 에지 서버로 사용하기
- 중앙 집중식 구성을 위한 스프링 클라우드 컨피그 활용
- 복원력 향상을 위한 Resilience4j 활용
- __Resilience4j의 서킷 브레이커 예제
- 분산 추적을 위한 마이크로미터 트레이싱과 집킨 활용
- 정리
- 문제
- 기술적 요구사항
- ▣ 09장: 넷플릭스 유레카를 활용한 서비스 디스커버리
- 서비스 디스커버리 소개
- __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 호출
- __OAuth 2.0으로 스웨거 UI 테스트
- 외부 OpenID Connect 제공자를 이용한 테스트
- __Auth0에서 계정 설정 및 구성
- __Auth0을 OpenID 제공자로 사용하는 데 필요한 변경 사항
- __Auth0을 OpenID Connect 제공자로 사용해 테스트 스크립트 실행하기
- __클라이언트 자격 증명 승인 흐름을 이용한 접근 토큰 획득
- __인가 코드 승인 흐름을 이용한 접근 토큰 획득
- __Auth0 접근 토큰을 이용한 보호된 API 호출
- __사용자의 상세 정보 조회
- 정리
- 문제
- ▣ 12장: 중앙 집중식 구성
- 기술적 요구사항
- 스프링 클라우드 컨피그 서버 소개
- __구성 저장소의 스토리지 유형
- __초기 클라이언트 연결 결정
- __구성 보안 설정
- __컨피그 서버 API 소개
- 컨피그 서버 설정
- __에지 서버에서 라우팅 규칙 설정
- __도커 사용을 위한 컨피그 서버 구성
- 컨피그 서버의 클라이언트 구성
- __연결 정보 구성
- 구성 저장소 구조화
- 스프링 클라우드 컨피그 서버 테스트
- __빌드 및 자동화 테스트 실행
- __컨피그 서버 API를 이용한 구성 조회
- __민감한 정보의 암호화와 복호화
- 정리
- 문제
- ▣ 13장: Resilience4j를 활용한 복원력 개선
- 기술적 요구사항
- Resilience4j 복원 메커니즘 소개
- __서킷 브레이커 소개
- __시간 제한 소개
- __재시도 메커니즘 소개
- 복원 메커니즘 추가
- __프로그래밍 가능한 처리 지연 및 무작위 오류 추가
- __서킷 브레이커와 시간 제한 추가
- __재시도 메커니즘 추가
- __자동화된 테스트 추가
- 서킷 브레이커와 재시도 메커니즘 테스트
- __빌드 및 자동화된 테스트 실행
- __정상 작동 중 회로가 닫혀 있는지 확인
- __문제 발생 시 서킷 브레이커를 강제로 열기
- __서킷 브레이커 다시 닫기
- __무작위 오류로 인한 재시도 테스트
- 정리
- 문제
- ▣ 14장: 분산 추적
- 기술적 요구사항
- 마이크로미터 트레이싱과 집킨을 활용한 분산 추적 소개
- 분산 추적 추가
- __빌드 파일에 의존성 추가
- __마이크로미터 트레이싱과 집킨에 대한 구성 추가
- __도커 컴포즈 파일에 집킨 추가하기
- __반응형 클라이언트에 대한 지원 문제 해결
- __사용자 정의 스팬 및 기존 스팬에 사용자 정의 태그 추가
- 분산 추적 실습
- __시스템 환경 구동
- __성공적인 API 요청 보내기
- __실패하는 API 요청 보내기
- __비동기 처리를 트리거하는 API 요청 보내기
- 정리
- 문제
- [03부] 쿠버네티스를 활용한 경량 마이크로서비스 개발
- ▣ 15장: 쿠버네티스 소개
- 기술적 요구사항
- 쿠버네티스 개념 소개
- 쿠버네티스 API 오브젝트 소개
- 쿠버네티스 런타임 컴포넌트 소개
- 미니큐브를 이용한 쿠버네티스 클러스터 생성
- __미니큐브 프로파일 활용하기
- __kubectl 활용하기
- __kubectl 컨텍스트 다루기
- __쿠버네티스 클러스터 생성
- 예시 디플로이먼트 실습
- 로컬 쿠버네티스 클러스터 관리
- __쿠버네티스 클러스터 중단 및 재개
- __쿠버네티스 클러스터 종료
- 정리
- 문제
- ▣ 16장: 쿠버네티스에 마이크로서비스 배포
- 기술적 요구사항
- 넷플릭스 유레카를 쿠버네티스 서비스로 대체
- 쿠버네티스 활용법 소개
- 우아한 종료와 라이브니스 및 준비 상태 프로브에
- 스프링 부트 기능 활용
- 헬름 소개
- __헬름 명령 실행
- __헬름 차트의 내부 구조
- __헬름 템플릿과 값
- __공통 라이브러리 차트
- __컴포넌트 차트
- __환경 차트
- 개발 및 테스트를 위해 쿠버네티스에 배포하기
- __도커 이미지 빌드
- __헬름 차트 의존성 해결
- __쿠버네티스에 배포하기
- __쿠버네티스와 함께 사용하기 위한 테스트 스크립트 변경
- __디플로이먼트 테스트
- 스테이징 및 프로덕션을 위해 쿠버네티스에 배포하기
- __소스코드의 변경 사항
- __쿠버네티스에 배포하기
- __리소스 정리
- 정리
- 문제
- ▣ 17장: 시스템 환경을 단순화하기 위한 쿠버네티스 기능구현
- 기술적 요구사항
- 스프링 클라우드 컨피그 서버 대체하기
- __스프링 클라우드 컨피그 서버를 대체하는 데 필요한 변경 사항
- 스프링 클라우드 게이트웨이 대체하기
- __스프링 클라우드 게이트웨이를 대체하는 데 필요한 변경 사항
- 인증서 프로비저닝 자동화
- 쿠버네티스 컨피그맵, 시크릿, 인그레스, cert-manager를 활용한 테스트
- __인증서 교체
- __스테이징 및 프로덕션을 위한 쿠버네티스 배포
- 쿠버네티스 없이도 마이크로서비스가 작동하는지 확인
- __도커 컴포즈 파일의 변경 사항
- __도커 컴포즈를 이용한 테스트
- 정리
- 문제
- ▣ 18장: 서비스 메시를 활용한 관찰 가능성과 관리 개선
- 기술적 요구사항
- 이스티오를 활용한 서비스 메시 소개
- __이스티오 소개
- __마이크로서비스에 이스티오 프락시 주입
- __이스티오 API 오브젝트 소개
- 마이크로서비스 환경 단순화
- __쿠버네티스 인그레스 컨트롤러를 이스티오 인그레스 게이트웨이로 대체
- __집킨 서버를 이스티오의 예거 컴포넌트로 대체
- 쿠버네티스 클러스터에 이스티오 배포
- __이스티오 서비스에 대한 접근 설정
- 서비스 메시 생성
- __소스코드 변경
- __서비스 메시를 생성하는 명령 실행
- __추적 및 스팬 ID 전파 로깅
- 서비스 메시 관찰
- 서비스 메시 보안
- __HTTPS 및 인증서를 이용한 외부 엔드포인트 보호
- __OAuth 2.0/OIDC 접근 토큰을 사용해 외부 요청 인증
- __상호 인증(mTLS)을 이용한 내부 통신 보호
- 서비스 메시가 복원력 있는지 확인하기
- __결함을 주입해 복원력 테스트하기
- __처리 지연을 주입해 복원력 테스트하기
- 무중단 업데이트
- __소스코드 변경
- __마이크로서비스의 v1 버전과 v2 버전 배포 및 v1 버전으로의 라우팅
- __모든 트래픽이 처음에 마이크로서비스의 v1 버전으로 라우팅되는지 확인
- __카나리아 테스트 실행
- __블루-그린 배포 실행
- 도커 컴포즈를 이용한 테스트 실행
- 정리
- 문제
- ▣ 19장: EFK 스택을 활용한 중앙 집중식 로깅
- 기술적 요구사항
- 플루언트디 소개
- __플루언트디 개요
- __플루언트디 구성
- 쿠버네티스에 EFK 스택 배포
- __마이크로서비스 빌드와 배포
- __엘라스틱서치와 키바나 배포
- __플루언트디 배포
- EFK 스택 사용해보기
- __키바나 초기화
- __로그 레코드 분석
- __마이크로서비스의 로그 레코드 검색
- __근본 원인 분석 수행
- 정리
- 문제
- ▣ 20장: 마이크로서비스 모니터링
- 기술적 요구사항
- 프로메테우스와 그라파나를 활용한 성능 모니터링
- 애플리케이션 메트릭을 수집하기 위한 소스코드 변경
- 마이크로서비스 빌드와 배포
- 그라파나 대시보드를 이용한 마이크로서비스 모니터링
- __테스트용 로컬 메일 서버 설치
- __그라파나 구성
- __로드 테스트
- __키알리의 기본 대시보드 사용하기
- __기존 그라파나 대시보드 가져오기
- __나만의 그라파나 대시보드 만들기
- __새 대시보드 테스트
- 그라파나 대시보드 내보내기와 가져오기
- 그라파나에서 알람 설정
- __메일 기반 연락 지점 구성
- __기본 알림 정책 구성
- __서킷 브레이커에 대한 알람 설정
- __서킷 브레이커 알람 테스트
- 정리
- 문제
- 기술적 요구사항
- ▣ 21장: macOS용 설치 안내
- 필요한 도구 설치
- __SDKMan, 자바, 스프링 부트 CLI 설치
- __홈브루 설치
- __홈브루를 이용한 도구 설치
- __홈브루 없이 도구 설치
- __설치 후 작업
- __설치 확인
- 소스코드 다운로드
- __IDE 사용
- __코드 구조
- 정리
- 기술적 요구사항
- ▣ 22장: WSL 2와 우분투가 탑재된 마이크로소프트 윈도우용 설치 안내
- 필요한 도구 설치
- __윈도우에 도구 설치
- __WSL 2의 리눅스 서버에 도구 설치
- 소스코드 다운로드
- __코드 구조
- 정리
- ▣ 23장: 자바 마이크로서비스의 네이티브 컴파일
- 기술적 요구사항
- 자바 소스코드를 네이티브 컴파일해야 하는 경우
- GraalVM 프로젝트 소개
- 스프링 AOT 엔진 소개
- 네이티브 컴파일과 관련된 문제 해결
- 소스코드의 변경 사항
- __그레이들 빌드 파일 업데이트
- __도달 가능성 메타데이터 및 사용자 지정 힌트 제공
- __application.yml 파일에서 빌드 시점에 스프링 빈 활성화
- __업데이트된 런타임 속성
- __GraalVM 네이티브 이미지 트레이싱 에이전트 구성
- __test-em-all.bash 검증 스크립트의 업데이트
- 네이티브 이미지의 테스트와 컴파일
- __트레이싱 에이전트 실행
- __네이티브 테스트 실행
- __현재 OS용 네이티브 이미지 생성
- __네이티브 이미지를 도커 이미지로 생성
- 도커 컴포즈를 이용한 테스트
- __AOT 모드를 비활성화한 상태에서 자바 VM 기반 마이크로서비스 테스트
- __AOT 모드를 활성화한 상태에서 자바 VM 기반 마이크로서비스 테스트
- __네이티브 컴파일된 마이크로서비스 테스트
- 쿠버네티스를 이용한 테스트
- 정리
- 문제