스프링 부트 3와 스프링 클라우드를 활용한 마이크로서비스 구축
42,000원
중급
도서 소개
실습을 통해 프로덕션 수준의 API를 설계, 테스트, 보안, 배포 및 유지보수 하는 방법을 배워 애플리케이션의 기능을 향상시켜 보자!
스프링은 자바를 사용해 확장 가능하고 신뢰할 수 있는 웹 애플리케이션을 구축할 때 사용 가능한 강력하고 널리 사용되는 프레임워크이며, 스프링 부트는 스프링 기반 애플리케이션의 설정과 구성을 단순화시켜 주는 인기 소프트웨어이다. 이 책은 웹 개발 시에 참고할 수 있는 스프링 6와 스프링 부트 3에 대한 깊이 있는 가이드로, 현대적이고 견고한 웹 API 및 서비스 구축에 대한 실용적인 지식을 제공한다.
이 책은 RESTful 웹 서비스 기본 지식, 스프링에 대한 개념 이해, API 스펙 설계를 포함한 API 개발에 필수적인 다양한 주제를 다루며 비동기 API 설계, 보안, 사용자 인터페이스 설계, API 테스트, 웹 서비스 배포 등을 설명한다. 나아가 실전 애플리케이션에 필요한 다양한 유형의 API 구축에 참조할 수 있는 실제 수준의 샘플 앱을 제공한다. 이 샘플 앱을 통해 설계 및 사양, 구현, 테스트, 배포를 포함한 전체 API 개발 주기에 대해 이해하게 될 것이다.
이 책에 대한 학습을 마치고 나면, Spring 6와 Spring Boot 3를 사용해 확장 가능하고 유지보수 가능한 현대적인 API를 설계, 개발, 테스트 및 배포하는 방법을 배우게 될 뿐만 아니라 애플리케이션의 보안과 신뢰성을 강화하고 전반적인 기능을 향상시키는 베스트 프랙티스를 익히게 될 것이다.
★ 이 책에서 다루는 내용 ★
- 스프링과 자바를 사용한 엔터프라이즈 수준의 API 생성
- 다양한 케이스에 사용 가능한 REST, gRPC, GraphQL 및 비동기 API의 이해와 구현
- 설계부터 배포까지 실제 웹 API 및 서비스의 개발
- API 사양 및 구현에 대한 베스트 프랙티스 학습
- 인증 및 권한 부여를 통한 안전한 API 설계 및 구현
- 워크플로 및 오케스트레이션 엔진을 사용한 마이크로서비스 기반 솔루션의 개발
- API에 접근하는 사용자 인터페이스의 설계 및 테스트 능력 습득
- 서비스 및 API에 대한 로깅 및 추적 메커니즘 구현
도서 소개

저자 소개
소라브 샤르마 (Sourabh Sharma)
소라브 샤르마는 오라클의 수석 개발 관리자로 업계에서 20년 이상의 경험을 가지고 있다. 그는 자바, 자바스트립트, 오라클 DB를 사용해 온프레미스 및 클라우드 기반 애플리케이션을 설계하는 관리자이자 아키텍트이다. 소라브는 선도적인 기업들과 협력해 엔터프라이즈 제품 및 애플리케이션을 제공했고, 팀을 이끌며 N-tier 및 클라우드 기반 웹 애플리케이션을 개념화, 모델링, 설계 및 개발하는 것에 전문가 수준의 역량을 가지고 있다. 또한, 마이크로서비스 기반 솔루션 개발과 다양한 유형의 워크플로 및 오케스트레이션 엔진 구현도 경험했으며 지속적으로 학습하며 책과 교육을 통해 지식을 공유하고 있다.
역자 소개
김광영
보험회사에서 보험계리인실 업무로 커리어를 시작한 후, IT 회사로 이직해 소프트웨어 개발자, IT 아키텍트, 컨설턴트 등 다양한 역할을 수행하며 디지털 기술의 기반을 다졌다. 제조회사에서는 디지털 사이니지 관련 해외 신사업을 이끌며 글로벌 시장 경험을 쌓았다. 이러한 경험을 바탕으로 현재는 클라우드 컴퓨팅 회사에서 솔루션스 아키텍트(Solutions Architect)로 활동하며, 고객의 디지털 전환과 클라우드 도입 및 활용을 지원하고 있다. 매일 손톱만큼의 노력이 인생을 변화시킨다는 믿음으로 (1.01)365 = 37.78이라는 문구를 좋아한다.
문종민
15년간 시스템 통합 분야에서 소프트웨어 아키텍트로 경력을 쌓았으며, 그중 10여 년은 금융시스템 구축과 코어뱅킹 프레임워크 개발 아키텍트로 활동했다. 현재는 클라우드 컴퓨팅 회사에서 근무하면서 금융 고객들이 클라우드를 통해 혁신하도록 돕고 있다. 끊임없이 변화하는 IT 환경 속에서 새로운 도전을 즐기면서 기술의 본질을 파악하기 위해 애쓰고 있다.
박천구
몇 번의 스타트업 도전에 고배를 마셨고 유료 디지털 미디어 스트리밍 서비스와 클라우드 기반 IoT 플랫폼을 개발했다. 현재는 클라우드 컴퓨팅 회사에서 일하고 있고, 신기술에 관심이 많으며 '기술이 세상을 바꾼다'는 모토를 갖고 살고 있다. 《EJB & WebLogic》을 직접 썼고 《Prototype & Scriptaculous 인 액션》 《프로 웹 2.0 매쉬업》 《프로 스프링 2.5》 《클라우드 컴퓨팅과 SOA 컨버전스: 전사적 도입을 통한 기업의 생존 전략》을 번역했다.
목차
- [1부] RESTful 웹 서비스
- ▣ 01장: RESTful 웹 서비스 기본사항
- 기술 요구 사항
- REST API 소개
- __REST의 역사
- __REST의 기본사항
- 리소스와 URI 다루기
- __URI 구문
- __URL이란
- __URN이란
- HTTP 메소드와 상태 코드 살펴보기
- __POST
- __GET
- __PUT
- __DELETE
- __PATCH
- __HTTP 상태 코드
- HATEOAS이란
- REST API 설계 베스트 프랙티스
- __엔드포인트 경로에서 리소스의 이름을 지정할
- __동사형이 아닌 명사형 단어를 사용
- __엔드포인트 경로에서 컬렉션 리소스의 이름을 지정할 때 복수형을 사용
- __하이퍼미디어 사용(HATEOAS)
- __API 버전 관리
- __중첩된 리소스
- __API 보안
- __문서 유지 관리
- __권장되는 상태 코드 준수
- __캐싱 보장
- __단위시간당 요청량 제한(Rate limit) 유지 관리
- 전자 상거래 앱 소개
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 02장: 스프링의 개념과 REST API
- 기술 요구 사항
- 스프링 패턴과 패러다임 이해하기
- __IoC란
- __DI란
- __AOP란
- IoC 컨테이너 이해하기
- Bean과 그 범위 정의하기
- __@ComponentScan 애노테이션
- __Bean의 범위
- 자바를 사용하여 bean 설정
- __@Import 애노테이션
- __@DependsOn 애노테이션
- DI 코딩 방법
- __생성자로 의존성 정의
- __설정자 메소드로 의존성 정의
- __클래스 프로퍼티를 사용한 의존성 정의
- 애노테이션을 사용하여 bean의 메타데이터 설정
- __@Autowired 사용 방법
- __타입별 일치(Match by type)
- __한정자별 일치(Match by qualifier)
- __이름으로 일치(Match by name)
- __@Primary의 목적은 무엇일까?
- __@Value는 언제 사용할까?
- AOP용 코드 작성
- 스프링 부트를 사용하는 이유
- 서블릿 디스패처의 중요성 이해
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 03장: API 명세 및 구현
- 기술 요구 사항
- OAS로 API 설계
- OAS의 기본 구조 이해
- __OAS의 메타데이터 절
- __OAS의 servers와 tags 절
- OAS의 컴포넌트(components) 절
- OAS의 경로(path) 절
- OAS를 스프링 코드로 변환
- OAS 코드 인터페이스 구현
- 전역 예외 처리기 추가
- API 구현 테스트
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 04장: API를 위한 비즈니스 로직 작성
- 기술 요구 사항
- 서비스 설계 개요
- Repository 컴포넌트 추가
- __@Repository 애노테이션
- __데이터베이스 및 JPA 설정
- __데이터베이스 및 시드 데이터 스크립트
- __엔터티 추가
- __리포지토리 추가
- 서비스 컴포넌트 추가
- 하이퍼미디어 구현
- 서비스와 HATEOAS로 컨트롤러 향상
- API 응답에 ETag 추가
- API 테스트
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 05장: 비동기 API 설계
- 기술 요구 사항
- 리액티브 스트림 이해하기
- __발행자(Publisher)
- __구독자(Subscriber)
- __구독(Subscription)
- __프로세서(Processor)
- 스프링 웹플럭스 살펴보기
- __리액티브 API 이해
- __리액티브 코어
- DispatcherHandler 이해하기
- __컨트롤러
- __함수형 엔드포인트
- 전자 상거래 앱용 리액티브 API 구현
- __리액티브 API용 OpenAPI Codegen 변경
- __build.gradle에 리액티브 의존성 추가
- __예외 처리
- __컨트롤러에 대한 전역 예외 처리
- __API 응답에 하이퍼미디어 링크 추가
- __엔터티 정의
- __리포지토리 추가
- __서비스 추가
- __컨트롤러 구현 추가
- __애플리케이션에 H2 콘솔 추가
- __애플리케이션 설정 추가
- __리액티브 API 테스트
- 요약
- 질문
- 답변
- 추가 읽을거리
- [02부] 보안, UI, 테스트, 배포
- ▣ 06장: 권한부여와 인증을 통해 REST 엔드포인트 보호하기
- 기술 요구 사항
- 스프링 시큐리티 및 JWT를 사용한 인증 구현
- __Gradle에 필요한 의존성 추가하기
- __OAuth 2.0 리소스 서버를 사용한 인증 방법
- __JWT의 구조
- JWT로 REST API에 보안 적용하기
- __새로운 API 추가하기
- __데이터베이스 테이블에 리프레시 토큰 저장하기
- __JWT 관리자 구현하기
- 새로운 API 구현
- __findUserByUsername() 메소드 구현하기
- __REST 컨트롤러 구현
- __웹 기반 보안 설정
- CORS와 CSRF의 구성
- 권한부여(authorization)에 대한 이해
- __역할과 권한
- 보안 관련 테스트하기
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 07장: 사용자 인터페이스 설계하기
- 기술 요구 사항
- React 기초
- __리액트 앱 만들기
- __기본 구조와 파일에 대해 알아보자
- __package.json 파일에 대한 이해
- __React 앱의 부트스트랩
- 리액트 컴포넌트 및 기타 기능에 대해 알아보자
- __JSX에 대해 알아보자
- __리액트 훅에 대해 이해해보자
- __테일윈드(Tailwind)를 사용해 컴포넌트 스타일링하기
- 프로덕션 배포에 불필요한 스타일을 제거하도록 설정
- __리액트에 테일윈드 포함시키기
- 전자상거래 앱 컴포넌트 디자인하기
- Fetch를 이용해 API 호출하기
- __제품 정보를 가져오는 API 클라이언트 작성하기
- __제품 목록 페이지 코딩하기
- 인증 기능 구현하기
- __커스텀 useToken 후크 만들기
- __Login 컴포넌트 작성
- __커스텀 cart context의 구현
- __Cart 컴포넌트 작성하기
- __Order 컴포넌트 작성하기
- __루트(App) 컴포넌트 작성
- __애플리케이션 실행하기
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 08장: API 테스트
- 기술 요구 사항
- API와 코드를 수동으로 테스트하기
- 테스트 자동화
- __단위 테스트
- __AssertJ 어서션을 사용해 테스트하기
- __코드 커버리지
- __통합 테스트하기
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 09장: 웹서비스 배포하기
- 기술 요구 사항
- 컨테이너화란 무엇일까?
- 도커(Docker) 이미지 빌드하기
- __도커란 무엇인가?
- __이미지를 빌드하는 그래들 태스크 실행
- 쿠버네티스에 애플리케이션 배포하기
- 요약
- 질문
- 답변
- 추가 읽을거리
- [03부] gRPC, 로깅, 모니터링
- ▣ 10장: gRPC 시작하기
- 기술 요구 사항
- gRPC 동작방식
- __REST 대 gRPC
- __웹 브라우저와 모바일 앱에서 gRPC 서버를 호출할 수 있을까?
- __gRPC 아키텍처란
- __gRPC가 Protocol Buffer를 사용하는 방법
- 서비스 정의의 이해
- RPC 수명 주기 살펴보기
- __수명 주기에 영향을 주는 이벤트
- __gRPC 서버 및 gRPC 스텁 이해
- 에러 처리와 에러 상태 코드
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 11장: gRPC API 개발 및 테스트
- 기술 요구 사항
- API 작성
- __프로젝트 설정
- __결제 게이트웨이 기능 작성
- gRPC 서버 개발
- __gRPC 서버 구현
- __gRPC 서버 클래스 구현
- __gRPC 서버 테스트
- 에러 처리 구현
- gRPC 클라이언트 개발
- __gRPC 클라이언트 구현
- __gRPC 서비스 테스트
- 마이크로서비스란?
- __전통적인 모놀리식 디자인
- __서비스 기반 모놀리식 디자인
- __마이크로서비스 디자인
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 12장: 서비스에 로깅 및 트레이싱 추가
- 기술 요구 사항
- ELK 스택을 활용한 로깅 및 트레이싱
- ELK 스택의 이해
- ELK 스택 설치
- gRPC 코드에서 로깅 및 트레이싱 구현
- __gRPC 서버 코드 변경
- __gRPC 클라이언트 코드 변경
- __로깅 및 트레이싱 변경사항 테스트
- Zipkin과 Micrometer로 분산 트레이싱 하기
- 요약
- 질문
- 답변
- 추가 읽을거리
- [04부] GraphQL
- ▣ 13장: GraphQL 시작하기
- 기술 요구 사항
- GraphQL 알아보기
- __GraphQL의 간략한 역사
- __GraphQL과 REST 비교
- GraphQL 기본 학습
- __쿼리 타입 살펴보기
- __뮤테이션 타입 살펴보기
- __서브스크립션 타입 살펴보기
- GraphQL 스키마 설계
- __스칼라 타입의 이해
- __프래그먼트 이해
- __인터페이스 이해
- __유니온 타입 이해
- __인풋 타입 이해
- __GraphQL 도구를 사용한 스키마 설계
- GraphQL 쿼리와 뮤테이션 테스트
- __N+1 문제 해결
- __N+1 문제 이해란 무엇인가?
- N+1 문제의 솔루션
- 요약
- 질문
- 답변
- 추가 읽을거리
- ▣ 14장: GraphQL API 개발 및 테스트
- 기술 요구 사항
- GraphQL 용 워크플로우와 도구
- GraphQL 서버 구현
- __gRPC 서버 프로젝트 생성
- __GraphQL DGS 의존성 추가
- __GraphQL 스키마 추가
- __커스텀 스칼라 타입 추가
- __API 문서화
- GraphQL 쿼리 구현
- GraphQL 쿼리용 페처 작성
- __Product용 데이터 페처 작성
- __Product 컬렉션용 데이터 페처 작성
- __데이터 페처 메소드를 사용한 필드 해석기 작성
- __N+1 문제를 해결하기 위한 데이터 로더 작성
- GraphQL 뮤테이션 구현
- GraphQL 서브스크립션 구현 및 테스트
- __GraphQL용 WebSocket 서브-프로토콜 이해
- __Insomnia 웹소켓을 이용한 GraphQL 서브스크립션 테스트
- GraphQL API 인스트루먼테이션
- __커스텀 헤더 추가
- __Micrometer와 통합
- 테스트 자동화
- __GraphQL 쿼리 테스트
- __GraphQL 뮤테이션 테스트
- __자동화된 테스트 코드를 이용한 GraphQL 서브스크립션 테스트
- 요약
- 질문
- 답변
- 추가 읽을거리
예제 코드
- GitHub 저장소: https://github.com/wikibook/spring-api-dev
- ZIP 형식으로 다운로드: https://github.com/wikibook/spring-api-dev/archive/refs/heads/main.zip
정오표
-
74쪽, 페이지 하단 코드의 밑에서 5번째 줄
application/json 이나 application/xml룰
==>
application/json이나 application/xml을