Backend 개발자/아키텍처

마이크로서비스 MSA 코드 파편화 복잡도 최소화

by 앵과장 2021. 10. 15. 16:22
반응형

안녕하세요

앵과장입니다.

 

마이크로 서비스에 대해서 오랜만에 생각 정리를 해볼까 합니다.

닭잡는데 소잡는 칼이 필요는 없지만.. 모놀리딕, 마이크로서비스 말이 많지만 오늘은 마이크로서비스만 집중해보도록 하겠습니다.

 

마이크로 서비스

마이크로 서비스를 처음 시작한 게 SKP 개발자센터 프로젝트를 만들 때 처음 시작했을 때니

2011~2012년도였던 것 같습니다.

마이크로 서비스라는 개념이 잘 이해가 되지 않았는데

지금은 여러 서비스 플랫폼에서 많은 사용을 하고 있습니다.

 

마이크로 서비스는 현재 엔터프라이즈급 또는 새로 시작하는 스타트업에서도 많은 부분 프로덕트 구성에 있어서 적합한 트렌드라고 생각됩니다.

 

다만 AWS 구성에 대한 비용 MSA 아키텍처에 필요한 리소스 등을 전부 초반에 만족시키기에는 부담스러울 수 있으니 점진적인 단계적 접근이 필요하다는 생각이며 MSA를 적용하고자 하는 시점에 유연하게 대처 가능한 분석 설계가 필요합니다.

 

 

MSA 컴포넌트 오픈소스

MSA를 구성하는 수많은 컴포넌트 오픈소스 라이브러리입니다.

2011년도에만 하더라도 이 정도까지 많은 것들이 존재한 것 같진 않은데 이제는 정말 수많은 것들이 지속적으로 좀 더 쉽고 편하게 사용할 수 있는 것들이 만들어지고 있는데... 저는 오히려 어떤 것이 좋은지 판단할 수 없는 미궁 속으로 들어가는 것 같습니다.

MSA 구성에 필요한 라이브러리

Microservices Architecture Components

서비스 관점에서 예를 한번 들어보도록 하겠습니다.

의식주 사업이 돈이 된다고 했으니 이커머스를 샘플링해보도록 하겠습니다.

 

이커머스란 여러 가지 카테고리 상품을 고객이 접근하고 장바구니에 담고 결제하고 상품을 집까지 배송받는 형태라고 보면 됩니다.

 

Client

왼쪽에 보이는 이미지처럼

MobileApp, PC WEB, 다양한 외부 연동 B2B API 접근, 개발자, 관리자들이 서비스에 접근을 하게 됩니다.

 

모든 클라이언트들은 각자 원하는 목적을 가지고 사용하고자 하는 서비스 플랫폼에 접근합니다.

그러면 해당 클라이언트에 목적에 맞는 기능과 권한 등을 제공하면 됩니다.

 

MSA 필수적으로 필요한 기능

Gateway(External Gateway) 모든 클라이언트들은 MSA 가장 앞에 보이는 gateway를 접근하게 됩니다.

서비스 이커머스(사주세요엄마마켓) 이라는 서비스에

 

도메인 https://buymom.com

접근을 할 수도 있고 iOS, Android APP을 통해서 

가장 처음 제공하는 Home 화면을 마주하게 됩니다 

 

보통 상품 목록을 볼 수 있을 텐데 여기서 가볍게 흐름을 한번 예기해보자면..

 

1단계 Domain 클릭하면 

2단계 Network IP로 AWS public Network VPC 존에 들어오게 됩니다.

3단계 Gateway 로 접근하고 

4단계 default Home이 상품 목록이라면 ServiceRoute에 설정해둔 https://buymon.com/home.html 은 

상품정보를 가져오는 ServiceRouter 에 정의된 정보를 인지하고 상품 서비스 인스턴스를 가기 위해서 

AWS(Alb) Application Load Balancer 접근하게 됩니다.

5단계 해당 클라이언트에게 상품 목록에 필요한 데이터를 RDBMS, NoSQL, Cache 같은 형태에서 조회한 뒤 

역순으로 Response 하게 되면 클라이언트가 원하는 화면인 상품 목록을 볼 수가 있습니다.

 

물론 여기서 로그인, 비로그인 및 다양한 권한들이 필요하다면 필터링되어 제공해야 하는 서비스 플랫폼에 기능들만 노출하게 됩니다. 

 

MSA를 구성하는 이유는 지속적으로 성장하고 있는 서비스를 언제나 빠르게 대응하기 위한 용도입니다.

 

의식주를 다루는 대형 서비스 플랫폼은 트래픽이 정말 어마어마합니다. 그중에 정상적인 처리도 있지만 모든 서비스가 항상 완벽하게 동작을 하고 있다면 좋지만 모든 서비스는 그렇게 동작하지 않습니다. 이건뭐 빌게이츠가 이커머스를 만든다고 해도 말입니다.!!

 

그래서 모니터링 시스템, 수많은 마이크로 서비스 로그 데이터 수집 트래킹, 장애 발생 이후 빠른 빌드 배포 Devops가 필요합니다.

 

서비스를 영향도 없이 안전하게 다양한 방법으로 마이크로 서비스 아키텍처링 했다면 복잡도는 자연스럽게 증가합니다.

복잡한 시스템을 얼마나 잘 정리했느냐가 중요하고 변화했을 때 안정적으로 빠르게 배포 가능한지도 말입니다.

 

복잡한 MSA 구조는 각 서비스 또는 Client 의 접점에 대한 연동방식은 중요한 포인트중 하나입니다. 

각 서비스는 Gateway를 제외한 나머지는 Private 한 네트워크 VPC구성 안에 있어야 하며 필요한 부분들만 보안에 취약하지 않게 방화벽 설정을 한 뒤 정해진 파이프라인 흐름 속에 정상, 비정상, 예외적인 행위들을 기록하고 모니터링할 수 있어야 합니다.

 

로그, 데이터, 검색 등에 필요한 ELK 구성

수많은 히스토리 성 기록 또는 빈도수가 높고 데이터가 많은 정보들은 가공이 용이한 Nosql을 활용하는 것도 방법입니다.

 

devops Jenkins AWS codedeploy 빌드&배포

 

모니터링

서비스에 구성도 중요하지만 장애 원인 파악 및 모니터링도 중요한 부분입니다. 해당 이미지는 WhaTap 이며 이커머스 트래픽은 이것보다는 훨씬 많은 트래픽이 들어온다는 것도 꼭 기억하세요