스프링 클라우드 컨피그는 중앙 집중식 서비스로 애플리케이션 구성 데이터 관리를 담당하고 마이크로서비스와 완전히 분리한다. 따라서 인스턴스가 아무리 많더라도 항상 동일한 구성을 유지할 수 있다. 스프링 클라우드 컨피그에는 고유한 관리 저장소가 있지만 다음 오픈 소스 프로젝트와도 통합할 수 있다.
깃: 깃 (https://git-scm.com/)은 모든 유형의 텍스트 파일에 대한 형상 관리를 지원하는 도구이고 스프링 클라우드 컨피그는 깃 기반 저장소와 통합되어 애플리케이션의 구성 데이터를 저장소에서 읽어올 수 있다.
콘설 (consul): 콘설 (https://www.consul.io/)은 서비스 인스턴스를 서비스에 등록할 수 있는 오픈 소스 서비스 디스커버리 도구이다. 클라이언트는 콘설에 서비스 위치를 물어볼 수 있다. 콘설에는 스프링 클라우드 컨피그가 애플리케이션 구성 데이터를 저장하는 데 사용하는 키-값 저장소 기반 데이터베이스도 있다.
유레카 (Eureuka): 유레카(https://github.com/Netflix/eureka)는 콘설과 유사한 서비스 디스커버리 기능을 제공하는 넷플릭스의 오픈 소스 프로젝트이다. 유레카에도 스프링 클라우드 컨피그와 함께 사용될 수 있는 키-값 DB가 있다.
스프링 클라우드의 서비스 디스커버리를 사용하면 서비스를 사용하는 클라이언트에 서버가 배포된 물리적 위치 (IP 주소나 서버 이름)을 추상화할 수 있다. 서비스 소비자는 물리적 위치보다 논리적 이름을 사용해 서버의 비즈니스 로직을 호출한다. 스프링 클라우드의 서비스 디스커버리는 서비스 인스턴스가 시작하고 종료할 때 등록과 말소를 처리하며, 서비스 디스커버리 엔진의 구현을 위해 콘설과 유레카를 사용할 수 있다.
스프링 클라우드는 넷플릭스 오픈 소스와 긴밀히 통합되어있다. 마이크로서비스 클라이언트와 회복성 패턴을 위해 스프링 클라우드는 넷플릭스 히스트릭스 라이브러리 (https://github.com/Netflix/Hystrix)와 리본 프로젝트 (https://github.com/Netflix/Ribbon)를 포함해서 마이크로서비스 안에서 프로젝트를 사용하는 일을 간단하게 만들었다.
넷플릭스 히스트릭스
넷플릭스 히스트릭스를 사용하면 서킷브레이커와 벌크헤드 같은 서비스 클라이언트의 회복성 패턴을 빠르게 구현할 수 있다.
넷플릭스 리본
넷플릭스 리본은 유레카와 같은 서비스 디스커버리 에이전트를 단순하게 통합할 뿐만 아니라 서비스 소비자가 서비스 호출에 대한 클라이언트 측 부하 분산 기능도 제공한다. 이러한 기능을 이용해 서비스 디스커베리 에이전트가 일시적으로 가용하지 않을 때도 클라이언트가 계속 서비스를 호출할 수 있다.
스프링 클라우드는 넷플릭스 주울 (https://github.com/Netflix/zuul)을 사용해 서비스 라우팅 기능을 제공한다. 주울은 서비스 요청을 대리 (proxy)해서 마이크로서비스에 대한 모든 호출이 현관문처럼 한 곳을 통해 대상 서비스에 도달하게 하는 서비스 게이트웨이다. 이렇게 서비스 호출을 집중화하면 보안 인가 및 인증, 콘텐츠 필터링, 라우팅 규칙 등 표준 서비스 정책을 시행할 수 있다.
스프링 클라우드 스트림 (https://spring.io/projects/spring-cloud-stream)은 마이크로서비스에 경량 메시지 프로세싱을 쉽게 통합할 수 있는 기술이다. 스프링 클라우드 스트림을 이용하면 애플리케이션에서 발생되는 비동기 이벤트를 사용하는 마이크로서비스를 구축할 수 있고 RabbitMQ (https://www.rabbitmq.com/)와 카프카 (https://kafka.apache.org/) 같은 메시지 브로커와도 신속하게 통합할 수 있다.
Spring Cloud Sleuth (https://spring.io/projects/spring-cloud-sleuth)는 애플리케이션 안에서 사용되는 HTTP 호출과 메시지 채널 (RabbitMQ, Kafaka)에 고유 식별자를 통합할 수 있다. 이러한 추적 번호를 상관관계 ID 또는 추적 ID라고 하며 애플리케이션에서 여러 서비스를 순회하는 트랜잭션을 추적할 수 있다. 이러한 추적 ID는 마이크로서비스에서 생성하는 모든 로그에 자동으로 추가한다. Spring Cloud Sleuth는 Papertrail (https://www.papertrail.com/) 같은 로그 수집용 기술 도구 및 Zipkin (https://zipkin.io/) 같은 추적 도구와 결합해서도 사용할 수 있다. Papertrail은 여러 마이크로서비스의 로그를 실시간으로 질의 가능한 데이터베이스로 수집하는 클라우드 기반 로깅 플랫폼이다. OpenZipkin은 Spring Cloud Sleuth 가 생성한 데이터를 사용해 단일 트랜잭션에 연관된 서비스의 호출 흐름을 시각화할 수 있다.
Spring Cloud Security (https://spring.io/projects/spring-cloud-security)는 서비스에 액세스할 수 있는 사람과 접근 권한을 통제할 수 있는 인증 및 인가 프레임워크이다. 스프링 클라우드 시큐리티는 토큰에 기반을 두며 인증 서버가 발행한 토큰으로 서비스는 서로 통신한다. 호출받는 서비스 모두 HTTP 호출에서 잔달된 토큰을 확인해 사용자 신원과 서비스 접근 권한을 검증한다. 또한 Spring Cloud Security는 자바스크립트 웹 토큰 (https://jwt.io/)을 지원한다. JavaScript Web Token (JWT)는 OAuth2 토큰의 생성 방식과 생성된 토큰의 디지털 서명에 대한 표준을 제공한다.
Provisioning 을 구현하기 위해서는 스프링 말고 다른 기술을 사용해야 한다. 스프링 프레임워크는 애플리케이션 개발에 맟주어져 있고 스프링 클라우드 처럼 '빌드와 배포' 파이프라인을 생성할 수 있는 도구가 없다. CI/CD 파이프라인을 구현하기 위해선 Travice CI (https://www.travis-ci.org/) 와 마이크로서비스가 포함된 최종 서버 이미지를 만들기 위해선 도커 (https://www.docker.com/) 등이 필요하다.
프로비저닝은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해두는 것을 말한다.