본문 바로가기
프로그래밍

1. Spring Cloud를 이용한 MSA 구축하기 - spring cloud

by 탁구치는 개발자 2017. 9. 21.

Spring Cloud는 MSA를 신속하게 구축할 수 있는 도구를 제공한다.

대표적으로 다음의 도구들이 사용되어 진다.

1
2
3
4
5
Service registration and discovery
Central configuration
Dynamic Load balancer
Circuit Breakers
기타 등등... 꽤 많다.
cs


Spring Cloud는 다른 오픈소스와 통합하여 보다 쉽게 사용할 수 있도록 커스터마이징 한 후 오픈소스화 하는 전략을 취하고 있다.

1
2
3
Service discovery : Netflix Eureka
Dynamic Load balancer : Netflix Ribbon
Circuit Breakers : Netflix Hystrix
cs

위의 Netflix에서 제공하는 오픈 소스를 Netflix OSS(Open Source Software)라고 부르기도 한다.


이처럼 Spring Cloud는 다양한 오픈 소스를 도입하여 보다 더 쉽고 빠르게 서비스를 구축할 수 있게 도와준다.


여기서 잠깐 Spring Cloud를 이용하여 MSA를 구축하기에 앞서 장점이 무엇인지 알아보자.


1. 기능별 Scale-Out

운영을 하다보면 특정 기능을 하는 페이지에 부하가 집중되는 경우가 있다. 모노리틱 아키텍처와는 반대로 부하가 집중되는 서비스만 Scale-Out(수평확장) 할 수 있다.

예를 들어 상품 이벤트 페이지에 엄청난 부하가 몰리고 있다면 상품 서비스만 Scale-Out 하면 될 것이다.


2. DB 부하 절감

기능별로 서비스가 분리되면서 각 기능에 의존하는 DB또한 분리가 된다.

모노리틱 방식이 하나의 DB를 이용하는 것과는 다르게 MSA는 각 서비스별로 DB가 분리되어 진다.

이는 DB 부하 절감의 효과를 얻을 수 있다.


3. 배포 안정성 (배포 영향 범위 제한, 배포 속도 개선)

주문서 페이지의 변경 사항이 있을 때 해당 주문 서비스만 빌드하고 배포할 수 있는 장점이 있다.

이는 배포 영향 범위를 최소화 할 수 있고, 빌드 배포를 빠르게 할 수 있다.

더불어 개발자의 불안감 또한 최소화 할 수 있다. 이 마음은 경험해 본 사람만 안다.


4. API 서버별로 업무에 최적화된 기술 사용 가능

Spring Cloud를 사용한다고 해서 꼭 Java로 개발해야 하는 법은 없다.

각 API 서버별로 Node, Python등으로 개발할 수 있다.

Spring Cloud로 개발하면서 Java가 아닌 다른 랭귀지로 개발해 보진 않았지만 Eureka Client 역할을 하는 라이브러리들이 제공되어 지고 있다.

python : https://github.com/KristianOellegaard/python-eureka

nodejs : https://www.npmjs.com/package/eureka-js-client


5. 도메인에 최적화된 DB 사용 가능

데이터의 적합성과 일관성을 보장하기 위해서는 RDB

일시적으로 데이터를 보관하고 있다가 빠르게 데이터를 리턴해야 하는 서비스는 Redis

스키마에 제약없는 데이터를 쌓아야 하는 경우는 Hadoop, mongoDB, Elasticsearch 등..


장점이 있으면 단점도 있기 마련이니 무작정 적용하는 것은 위험 부담이 많다.

기본적으로 빌드와 배포가 자동화 되어 있는 환경에서 MSA를 적용하는 것을 추천한다.


추가 설명


Scale-Out

장비를 신규로 추가하여 수평 확장

여러 대의 서버로 분산 처리할 수 있는 장점이 있다.

비교적 저렴한 서버를 사용함으로써 비용 부담이 적다

서버가 늘어남으로써 운영 비용이 증가한다.


Scale-Up

기존 장비의 물리적 하드웨어를 고성능으로 교체

점차적으로 성능을 증가시키기 위해 비용 부담이 커진다.

한 대의 서버만 관리하면 되기에 운영하기 편함