마이크로서비스 구축에 사용되는 스프링 클라우드의 여러 기술을 간략하게 알아보자.
중앙 집중식 서비스 애플리케이션 구성 데이터(Config) 관리를 담당하고 애플리케이션 환경별 구성 데이터(Configuration)를 마이크로서비스(실제 Application)와 완전히 분리 시킨다.
그렇기 때문에 마이크로서비스 인스턴스가 아무리 많더라도 항상 동일한 구성을 유지할 수 있다.
Config 저장소로는 Git; 깃, Consul; 콘설, Eureka; 유레카가 있다.
콘설 or 유레카
서비스 인스턴스를 서비스에 등록할 수 있는 오픈 소스 서비스 디스커버리 도구; 서비스 클라이언트(서비스 사용자 or 서비스 호출자)는 콘설에 서비스 위치를 물어볼 수 있다. 콘설에는 스프링 클라우드가 Application의 Config를 저장하는데 사용하는 Key-Value 기반의 저장소도 있다.
서비스를 사용하는 클라이언트에 서버가 배포된 물리적 위치(IP 주소나 서버 이름)을 추상화할 수 있다. 서비스 클라이언트는 물리적 IP Address나 도메인이 아닌, 논리적 이름을 사용해 서버의 비즈니스 로직을 호출한다.
스프링 클라우드 서비스 디스커버리는 서비스 인스턴스가 시작하고 종료될 때, 등록(Register)과 삭제(Delete) 처리가 되며, 서비스 디스커버리 엔진의 구현을 위해 콘설과 유레카를 사용할 수 있다.
마이크로서비스 클라이언트의 회복성 패턴을 위한 서비스
넷플릭스 히스트릭스 라이브러리를 사용하면 회로 차단기(Circuit Breaker)와 벌크헤드(Bulkhead) 같은 서비스 클라이언트의 회복성 패턴을 신속하게 구현 가능하다.
리본 프로젝트는 유레카 같은 서비스 디스커버리 에이전트를 단순하게 통합할 뿐만 아니라, 요청에 대한 부하 분산 기능(L4)도 제공한다.
마이크로서비스 애플리케이션을 위한 서비스 라우팅(Routing) 기능을 제공한다. 주울은 서비스 요청을 대리(Proxy)해서 마이크로서비스에 대한 모든 호출이 현관문 처럼 한 곳을 통해 대상 서비스에 도달하게 하는 서비스 게이트웨이(Service Gateway)다.
마이크로서비스에 경량 메시지 프로세싱을 쉽게 통합할 수 있는 기술을 말한다. 스트림을 이용하면 Application에서 발생되는 비동기 이벤트를 사용하는 영리한 마이크로서비스를 구축할 수 있는 RabbitMQ와 Kafka 같은 메시지 브로커와도 신속하게 통합할 수 있다.
Application 안에서 사용되는 HTTP 호출과 메시지 채널(Kafka, RabbitMQ)에 고유 추적 식별자를 통합 할 수 있다.