> For the complete documentation index, see [llms.txt](https://ssosso.gitbook.io/study/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ssosso.gitbook.io/study/msa/msa-spring/1..md).

# 1. 스프링 클라우드와 만나다

## 개요 및 간단 정리

### 마이크로 서비스란?

* 작은단위의 서비스
* 분해
* 모놀리식 : 하나의 어플리케이션이 통으로 이루어짐
* 마이크로서비스 : 모놀리식에서 각 서비스단위로 분해하여 독립적으로 구축 및 설계하여 하나의 시스템을 완성
* 이 MSA를 구축하기 위해 필요한 개념 및 패턴들이 있음

### 마이크로서비스 핵심개발 패턴

* 구축을 위한 기본 사항
* 통신 프로토콜 : 데이터 교환 보통은 JSON
* 서비스 세분성 : 적정한 수준으로 분해
* 인터페이스 설계 : 서비스 엔드포인트를 클라이언트에 공개
* 구성관리 : 서비스가 애플리케이션별 구성을 관리해 코드와 구성이 독립적인 개체가 되는 방법
* 이벤트 프로세싱 : 이벤트 사용 -> 서비스간 상태 및 데이터 변경 사항을 통신

### 마이크로서비스 라우팅 패턴

* 서비스 디스커버리 : 오작동하는 마이크로서비스 인스턴스를 가용 서비스 인스턴스 풀에서 제거하는 방법
* 서비스 라우팅 : **단일 진입점**을 제공하는 방법

### 마이크로서비스 클라이언트 회복성패턴

* 문제발생시, 연쇄적으로 영향을 미치지 않게 하기 위함
* 클라이언트 측, 로드 밸런싱 : 마이크로 서비스의 여러 호출이 정상 인스턴스에 분산하도록 서비스 인스턴스의 위치를 캐싱하는 방법
* 서킷브레이커 : 장애 등 문제 발생 -> 계속호출 하지 않게 하는 방법
* 폴백 패턴 : 서비스호출 실패 -> 다른 대체 수단을 사용해 서비스 클라이언트가 작업을 수행하도록 하는 플러그인 메커니즘을 제공하는 방법
* 벌크헤드 패턴 : 오작동하는 서비스 호출 하나가 나머지 애플리케이션에 부정적인 영향을 미치지 않도록 **이러한 호출을 구분하는 방법**

### 마이크로서비스 보안 패턴

* 인증 : 서비스를 호출하는 클라이언트가 **자신이라는 것을 알게**하는 방법
* 인가 : 마이크로 서비스를 호출하는 서비스 클라이언트가 수행하려는 작업을 **수행할 자격이 있는지 알 수 있는 방법**
* 자격 증명 관리 / 전파 :  한 트랜잭션과 관련된 여러 서비스 호출에서 자격 증명을 항상 제시하지 않도록 하는 방법 -> OAuth와 JWT 사용

### 마이크로서비스 로깅 및 추적 패턴

* 로그 상관관계 : 단일 트랜잭션에 대해 서비스간 생성된 **모든 로그를 함께 연결 상관관계 ID를 구현 -> 고유 식별자**
* 로그 수집 : 모든 로그를 질의 가능한 단일 DB로 취합하는 방법
* 마이크로서비스 추척 : 트랜잭션과 연관된 모든 서비스에서 클라이언트 트랜잭션 흐름을 시각화, 트랜잭션과 관련된 서비스의 성능 특성을 이해

### 마이크로서비스 빌드 및 배포 패턴

* 가상이미지 빌드 , 컴파일&#x20;
* 서버가 실행될 머신 이미지 배포
* 빌드 배포 파이프라인
* Iass as Code : 소스제어를 사용해 실행하고 관리할 수 있는 코드로 **서비스 프로 비저닝**
* Immutable Servers : 마이크로 서비스 `이미지를 생성하고 배포한후 변경 못하게..`피
* Phoenix Servers : 오래 실행될수록 구성 편차가 발생. 서버를 정기적으로 종료하고 불변 이미지를 재생성하는 방

### 스프링클라우드 스프링부트

* **스프링클라우드** -> 피보탈, 하시코프, 넷플릭스 같은 오픈소스 회사의 프로젝트 수용
* 빌드 배포 등 인프라영역에 매진하지 않고, **코드 작성하는데 집중시킴**
* **서킷브레이커 : 넷플릭스 -> 히스트릭스, 리본프로젝트**
* **API 게이트웨이 : 스프링 클라우드 / 넷플릭스 주울, 보안 인가 및 인증, 콘텐츠 필터링, 라우팅규칙 등 표준서비스 정책 시행**&#x20;
* **경량 메시지프로세싱 : 스프링클라우드 스트림(비동기이벤트), RabbitMQ, Kafka 같은 메시지 브로커와 신속하게 통한 가능**
* **고유추적 식별자 통합 : 스프링 클라우드 슬루스, 상관관계 ID or 추적 ID로.., 페이퍼트레일 같은 로그를 실시간 질의 가능한 데이터베이스로 수집, 오픈집킨은 단일 트랜잭션에 연관된 서비스의 호출 흐름을 시각화**
* **인증 인가  : 스프링클라우드 시큐리티 -> HTTP 호출에서 전달된 `토큰사용으로 신원확인, 검증`  -> JWT, OAuth2**
* **프로비저닝 -> 빌드 배포 파이프라인을 생성할 수 있는 도구!!  Travis CI, Jenkins, Docker**
