2장에서는 논블로킹 동기 REST API와 메시지 기반의 비동기 서비스를 모두 지원하는 리액티브 마이크로서비스를 만든다.
자동으로 다른 애플리케이션 컴포넌트를 주입
애플리케이션 패키지를 벗어난 다른 패키지에 선언된 컴포넌트 사용하려할 땐 @ComponentScan
스프링 부트의 기본 구성을 재정의하거나 자체 구성을 추가 할 때
스프링 부트 2.0은 리액티브 애플리케이션 개발을 기본 지원.
스프링은 프로젝트 리액터를 기본 구현으로 사용해 리액티브를 지원, 새로운 웹 프레임워크인 스프링 웹플럭스로 논블로킹 HTTP 클라이언트와 서비스의 개발을 지원함.
스프링 플럭스가 사용하는 HTTP 클라이언트는 리액티브를 지원하도록 기존의 RestTemplate 클라이언트를 보완한 WebClient 임
RESTful 서비스를 문서화할 때는 스웨거를 사용하는 경우 많음
스프링 폭스는 스프링 프레임워크와는 별개의 오픈 소스 프로젝트로, 런타임에 스웨거 기반의 API 문서를 생성함. -> 스웨거는 문서 생성을 위해 웹플럭스, 스웨거 기반 애노테이션 등을 애플리케이션이 시작될 때 검사함
스프링 데이터는 전통적인 관계형 DB부터 문서 데이터베이스(ex MongoDB), 키-값 DB(ex. Redis), 그래프 DB(ex. NeolJ)와 같은 여러 유형의 NoSQL db 엔진에 이르는 다양한 유형의 데이터베이스 엔진에 데이터를 저장하기 위한 공통 프로그래밍 모델을 제공함
JPA는 MySQL 데이터베이스와 매핑해 사용.
이 책에서는 JPA 및 MongoDB를 위한 스프링 데이터 하위 프로젝트를 사용.
스프링 데이터 프로그래밍 모델의 핵심 개념은 entity와 repository
엔티티 : 스프링 데이터가 저장하는 데이터
@Id, @Version
엔티티를 MongoDB 데이터베이스에 저장하는 경우 -> 스프링 데이터 MongoDB 하위 프로젝트의 애노테이션과 일반 스프링 데이터 애노테이션을 함께 사용
@Document(MongoDB 하위 프로젝트의 고유 애노테이션)
리포지토리: 여러 유형의 db에 데이터를 저장하고 접근하고자 사용
기본 인터페이스인 CrudRepository는 생성, 읽기, 업데이트, 삭제 작업을 위한 표준 메서드를 제공
리액티브 리포지토리를 만드는 리액티브 기반 인터페이스인 ReactiveCrudRepository를 제공 => 이 인터페이스의 메서드는 객체나 객체 집합을 반환하는 대신 Mono나 Flux 객체를 반환
(Mono와 Flux 객체: 이용 가능한 스트림상의 0.. 1이나 0..m 엔티티를 반환하는 리액티브 스트림)
스프링 데이터 MongoDB 하위 프로젝트는 리액티브 리포지토리를 지원하지만 스프링 데이터 JPA는 지원하지 않는다.
스프링 클라우드 스트림 : 게시-구독 통합 패턴을 기반으로 하는 메시징 방식의 스트리밍 추상화를 제공 , 현재 아파치 카프카Apache Kafka와 RabbitMQ를 기본 지원
가상머신을 대체하는 경량 컨테이너 도구
리눅스 네임스페이스와 제어 그룹을 기반으로 종래의 가상머신과 유사한 격리 기능을 제공하며, CPU와 메모리 사용 측면의 오버헤드를 크게 줄임. 도커는 개발과 테스트에 매우 유용한 도구
개발하는 마이크로서비스는 스프링 빈Spring Bean을 기반으로 비즈니스 로직을 개발.
REST API-> 스프링 웹플럭스로, REST API 문서화-> Swagger/OpenAPI를 사용.
SQL/NoSQL 데이터베이스에 데이터를 저장위해 Spring Data를 사용.
논블로킹 동기 REST API는-> 스프링 웹플럭스를 사용해 개발, 메시지 기반의 비동기 서비스-> Spring Cloud Stream을 사용해 개발.
도커를 사용해 마이크로서비스를 컨테이너로 실행.
이번 장은 공조 마이크로서비스 구축에 사용하는 springboot와 그 밖의 오픈 소스 도구를 소개했음. 스프링 프레임워크와 서드파티의 핵심모듈 설정이 편해서 '스프링부트'를 사용. 논블로킹 REST 서비스를 개발하기 위해서와 스프링 MVC 모듈의 프로그래밍 모델을 지원하는 이유로 '스프링 웹플럭스'사용. REST 서비스를 문서화를 OpenAPI 기반으로 하기 위해 '스프링 폭스'사용.
엔티티와 리포지토리로 영속 데이터에 접근하고 조작하기 위한 추사항화를 제공하는 '스프링 데이터' 사용. (여러 db 유형사이 이식성은 없음) 게시 구독 통합 패턴을 기반으로 하는 메시징 방식의 스트리밍 추상화를 위해 '스프링 클라우드 스트림' 사용. 가상머신을 대체하기 위해 '도커'사용