1장. 스프링, 클라우드와 만나다
1.3 우리가 구축할 것은 무엇인가?

1.6 마이크로 서비스는 코드 작성 이상을 의미한다.
- 마이크로서비스 작성 지침
- 적정 규모: 서비스가 한 가지 책임 영역에 집중되도록 하려면 어떻게 해야 하는가?
- 위치 투명성: 서비스 클라이언트에 영향을 주지 않고 서비스 인스턴스를 추가하고 삭제하려면 물리적 위치를 어떻게 관리해야 하는가?
- 회복성: 서비스에 문제가 있을 때 서비스 클라이언트가 빠르게 실패하려면 어떻게 해야 하는가?
- 반복성: 새로운 서비스가 시작할 때마다 항상 기존과 동일한 코드와 구성을 갖게 하려면 어떻게 해야 하는가?
- 확장성: 서비스 간 종속성을 최소화하면서 애플리케이션을 신속히 확장하려면 어떻게 해야 하는가?
1.7 핵심 마이크로서비스 개발 패턴

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

1.9 마이크로서비스 클라이언트 회복성
- 마이크로서비스 아키텍처는 고도로 분산되어 있어,
하나의 서비스(또는 서비스 인스턴스)의 문제가 연쇄적으로 서비스 소비자까지 전파되는 것을 막는 데 매우 신중해야 한다.
- 클라이언트 부하 분산(client-side load balancing)
- 마이크로서비스의 여러 인스턴스에 대한 호출이 정상 인스턴스에 분산되도록서비스 인스턴스 위치를 캐싱하는 방법이다.
- 회로 차단기 패턴(circuit breaker pattern)
- 실패중이거나 성능 문제를 겪고 있는 서비스를 계속 호출하지 않도록 하는 방법이다.
- 서비스가 느려지면 클라이언트가 호출하는 자원을 오래 소비한다.
이러한 호출 클라이언트가 더 신속하게 반응하고 적절한 동작을 취하도록 마이크로서비스 호출을 빠르게 실패하게 한다.
- 폴백 패턴(fallback pattern)
- 마이크로서비스 호출이 실패할 때,
호출되는 마이크로서비스가 아닌, 다른 수단으로 서비스 클라이언트가 작업을 수행하도록 ‘플러그인’ 메커니즘을 제공하는 방법이다.
- 벌크헤드(격벽) 패턴(bulkhead pattern)
- 마이크로서비스 애플리케이션은 작업을 수행하는 데 많은 분산 자원을 사용한다.
- 이 패턴은 한 서비스의 오작동 호출이 애플리케이션의 다른 곳에 나쁜 영향을 미치지 않도록 호출을 격리하는 방법을 설명한다.

1.10 마이크로서비스 보안 패턴
- 대중에게 마이크로서비스 노출을 피하려면 적절한 자격 증명을 가진 승인된 요청만 서비스를 호출할 수 있도록 다음 보안 패턴을 아키텍처에 적용하는 것이 중요하다.
- 인증(authentication)
- 서비스를 호출하는 서비스 클라이언트가 누구인지 확인하는 방법이다.
- 인가(권한부여)(authorization)
- 마이크로서비스를 호출하는 서비스 클라이언트가 수행하려는 행동에 대한 수행 자격 여부를 확인하는 방법이다.
- 자격증명 관리와 전파(credential management and propagation)
- 서비스 클라이언트가 한 트랜잭션에서 여러 서비스를 호출할 때 계속해서 자격 증명을 제시하지 않는 방법이다.
- 사용자를 인증 및 인가하고자 서비스 호출 간 전달되는 토큰을 발급받을 수 있는 OAuth2와 JWT(JSON Web Token)같은 토큰 기반의 표준 방법을 살펴본다.
- OAuth 2.0이란?
- Oauth2는 사용자가 제삼자의 인증 서비스로 자신을 인증할 수 있는 토큰 기반의 보안 프레임워크다.
- 사용자가 인증을 성공했다면, 매 요청마다 전달되어야 하는 토큰을 발급받는다.
- OAuth2의 주요 목적은 요청을 수행하기 위해 여러 서비스가 호출될 때, 요청을 처리하는 모든 서비스에 사용자의 자격 증명을 제시하지 않고, 사용자를 인증하는 것이다.

1.11 마이크로서비스 로깅과 추적 패턴

1.12 애플리케이션 지표 패턴

1.13 마이크로서비스 빌드/배포 패턴
1.14 요약
- 모놀리식 아키텍처에서 모든 프로세스는 강하게 결합되어 하나의 서비스로 실행된다.
- 마이크로서비스는 하나의 특정 영역을 담당하는 매우 작은 기능 부분이다.
- 스프링 부트를 사용하면 두 유형의 아키텍처를 모두 구축할 수 있다.
- 모놀리식 아키텍처는 단순하고 가벼운 애플리케이션에 이상적이며, 마이크로서비스 아키텍처는 일반적으로 복잡하고 진화하는 애플리케이션에 더 적합하다.
- 마이크로서비스를 작성하는 것은 쉽지만, 실제 환경에서 완전하게 운영하려면 사전에 추가로 고려할 사항이 많다.
- 마이크로서비스 라우팅 패턴은 마이크로서비스를 사용하려는 클라이언트 애플리케이션이 서비스 위치와 서비스로 라우팅되는 방법을 다룬다.
- 서비스 인스턴스 문제가 서비스 소비자에게 연쇄적으로 전파되는 것을 방지하려면 클라이언트 회복성 패턴을 사용하라.
- OAuth 2.0은 가장 보편적인 사용자 인가 프로토콜이며, 마이크로서비스를 보호할 수 있는 탁월한 선택이다.
- 빌드/배포 패턴을 사용하면 인프라스트럭처의 구성을 빌드/배포 프로세스에 바로 통합할 수 있어, 자바 WAR나 EAR 파일 같은 산출물을 이미 실행 중인 인프라스트럭처에 배포하지 않아도 된다.