MSA를 선택하였다면 Spring Cloud를 적용하자
Spring Cloud
우리 팀의 비즈니스가 진행되면서 마이크로서비스의 개수가 늘어나게 되었고 점점 더 관리가 복잡해지는 것에 대비해 Spring Cloud를 적용하기로 하였다.
비즈니스 초기에 마이크로서비스의 개수가 적은 상황이라면 느끼기 힘들 수도 있겠지만 비즈니스가 성장하면서 마이크로서비스의 개수가 증가할수록 관리가 복잡해지고 어려워지는 것을 느낄 수 있을 것이다.
Spring Cloud를 적용하면 이런 문제를 쉽게 해결할 수 있다.
Spring Cloud는 분산 시스템에서 공통적인 패턴(구성 관리, 서비스 검색, 지능형 라우팅, 마이크로 프록시 등 )을 모아 신속하게 구축할 수 있는 도구를 스프링 라이브러리 형태로 제공한다.
따라서 개발자는 분산 시스템에서 필요한 부분들에 대한 부담을 덜고 충실하게 서비스의 기능을 구현하는 것에 충실할 수 있다. 또한 특정 벤더(AWS, Cloud Foundry 등)에 종속적이지 않기 때문에 다양한 분산 환경에서 잘 작동한다.
다음은 Spring 프로젝트팀에서 제공하는 Spring Cloud의 기능목록이다.
Spring Cloud와 함께 Spring Config, RabbitMQ 그리고 Netflix의 오픈소스인 Eureka, Zuul 을 활용하여 이상적인 마이크로서비스의 개발을 도울 수 있다.
Spring Cloud가 적용된 이상적인 마이크로서비스 환경의 구성
Spring Cloud 적용에 사용되는 컴포넌트
Spring Config와 RabbitMQ에 대하여 간단히 설명한 후에Eureka와 Zuul에 대한 내용을 중점적으로 알아볼 것이다.
Spring Config : Spring Boot Application은 application.properties 혹은 application.yml 파일에 환경설정을 저장하고 이 파일의 정보를 읽어 빌드하는데, 이 파일들은 해당 프로젝트와 함께 저장된다.
Spring Cloud Config 서버를 두어 사용하면 모든 Spring Boot Application의 환경설정 파일을 한 곳에 저장시킬 수 있고 해당 서버에 접근하여 환경설정 정보를 가져오도록 할 수 있다.
이렇게 적용하면 모든 Application의 환경설정 정보를 한곳에서 관리가 가능하고 환경설정이 바뀌어도 Application 전체를 다시 빌드하지 않아도 된다.
하지만 우리 팀은 현재 Spring Config를 적용하지 않았다. 개발 초기에 적용했을 당시 개발 중에 환경설정이 바뀌면 바뀐 내용을 Spring Cloud Config 서버에 반영해야 해서 번거롭고 확인도 다시 해당 서버에서 해야하는 점이 불편하였다.
RabbitMQ : AMQP (Advanced Message Queueing Protocol) 로 만들어져 있으며 Message Queue를 제공한다.
이상적인 마이크로서비스 환경은 마이크로서비스 사이의 통신이 비동기적으로 이루어지는 것인데, RabbitMQ를 사용하면 마이크로 서비스들이 외부의 Queue를 통해 메세지를 주고받도록 함으로써 쉽게 이 부분을 구성할 수 있다.
Eureka : 마이크로서비스들의 정보를 레지스트리에 등록할 수 있도록 하고 마이크로서비스의 동적인 탐색과 로드밸런싱을 제공한다.
Zuul : 모든 마이크로서비스에 대한 요청을 먼저 받아들이고 라우팅하는 프록시 API Gateway 기능을 수행한다.
다음편에는 Eureka에 대해서 자세히 알아보겠습니다!
By Ryan Kim
'Spring Cloud&MSA' 카테고리의 다른 글
(마이크로 서비스 vs 모놀리식 아키텍처) MicroService vs Monolithic Architecture 간단 소개 및 주관적 의견 (3) | 2019.04.15 |
---|---|
(Spring Boot / Spring Cloud / MSA) 4. Zuul이란? / 적용방법 (0) | 2019.02.07 |
(Spring Boot / Spring Cloud / MSA) 3. Eureka란? / 적용방법 (0) | 2019.02.07 |
(Spring Boot / Spring Cloud / MSA) 1. 왜 MSA를 선택하였을까? (5) | 2019.02.07 |
댓글