Backend/Architecture

[Architecture] MSA : MicroService Architecture

lakelight 2022. 12. 8. 14:30
728x90
반응형

 

요즘 개발하면서 MSA를 정말 많이 보고 듣게 되어,
개념에 대해 정리해보고자 글을 쓰게 되었습니다.

제가 현재 하고 있는 프로젝트는 규모가 크지않아서 MSA를 적용하는 것에 대해서
고민을 한 결과 적용을 안하는 것이 더 좋다고 판단하였습니다.

하지만 다음 기회에 규모가 큰 프로젝트를 할 때 MSA를 적용해보면 좋을 것 같습니다.

 

Monolithic Architecture VS MicroService Architecture

 

Monolithic Architecture

소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태입니다. 웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포하는 형태를 말합니다. 웹의 경우에는 WAR 파일로 빌드외어 WAS에 배포하는 형태를 말합니다. 주로 소규모 프로젝트에서 사용합니다.

  • 부분적인 모듈의 장애가 전체 서비스의 장애로 확대될 수 있습니다.
  • 각각 모듈의 서비스 변경이 어렵고, 수정 시 장애의 영향도 파악이 어렵습니다.
  • 배포 시간이 오래 걸립니다.
  • 한 Framework와 언어에 종속적입니다.

 

MSA : MicroService Architecture

API를 통해서 상호작용하며, 서비스의 접근점을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화합니다. 내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려집니다.

  • 하나의 비즈니스 범위에 맞춰 만들어지므로 하나의 기능만 수행합니다. 즉, 어플리케이션 출시처럼 하나의 목표를 향해 일하지만, 자기가 개발하는 서비스만 책임을 집니다. 추가로, 재활용이 가능하다는 장점이 있습니다.
  • 어플리케이션은 항상 기술 중립적 프로토콜을 사용해 통신하므로 서비스 구현 기술과는 무관합니다. 따라서 마이크로서비스 기반의 어플리케이션을 다양한 언어와 기술로 구축할 수 있습니다.
  • 마이크로서비스는 SOA에서 사용되는 집중화된 관리 체계를 사용하지 않습니다. 마이크로서비스 구현체의 공통적인 특징 중 하나는 ESB와 같은 무거운 제품에 의존하지 않는다는 점입니다. REST 등 가벼운 통신 아키텍처 또는 kafka 등을 이용한 message stream을 주로 사용합니다.

 

MSA의 장점

  • 서비스는 각각 모듈화 되어 있어, 이러한 모듈끼리는 RPC 또는 message-driven API 등을 이용하여 통신합니다.
  • 서비스 단위로 적절한 수준에서 기술 스택을 다르게 할 수 있습니다. 회사가 Java의 Spring 기반이라도 MSA를 적용하면 node.js를 이용한 모듈을 연동할 수 있습니다.
  • 서비스 별로 독립적인 배포가 가능합니다. 따라서 CI&CD도 가볍게 할 수 있습니다.
  • 각각의 서비스의 부하에 따라 개별적으로 Scale-Out이 가능합니다. 메모리, CPU 등 상당 부분 이득입니다.

 

MSA의 단점 

  • 구조가 복잡합니다. 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 정해야 합니다. 또한, 통신 장애와 서버 부하 등이 있을 경우 어떻게 transaction을 유지할지 결정하고 구현해야 합니다.
  • 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고, 서비스 연결을 위해서는 통신이 포함되어야 하기 때문에 트랜잭션 유지에 대한 고민이 필요합니다.
    → 보상 트랜잭션 또는 부분적으로 composite 서비스로 병합을 고려해야 합니다.
  • 통합 테스트가 어렵습니다. 개발 환경과 실제 운영환경을 동일하게 가져가는 것은 쉽지 않습니다.
    서비스 레지스트리, 모니터링, 개발/ 배포 자동화 기술을 고려해야 합니다.
  • 서비스 1개를 재배포 한다고 할 때, 다른 서비스들과 연계가 정상적으로 이루어지는지 테스트 해야 합니다. 
    관련 개발 조직 간 roll-out 계획을 마련하고, dependency의 관리 체계를 수립해야 합니다.

 


 

Microservice Architecture 구성도

이미지 출처: https://wonit.tistory.com/490

 

Service Mesh 구성도

이미지 출처: https://wonit.tistory.com/490

만약 다른 언어와 다른 프레임워크로 작동한다면 Sidecar Pattern을 이용하여, 다른 플랫폼 언어로 작성된 서버에 사용할 수 있습니다.

 

마무리

아직 모르는 부분이 많다는 것을 느꼈습니다.
MSA를 구축하고, Spring Cloud Gateway를 통해 연결하고,
kafka를 통해 sync를 맞춰주는 작업들

하나하나 배워나가겠습니다.

오늘도 포스팅 읽어주셔서 감사합니다.

 

[참고]

1. [MSA] MSA란 무엇인가? 개념 이해하기

2. [마이크로서비스] MSA의 핵심 구성 요소 - Service Mesh

3. 모놀리식 아키텍처 vs 마이크로서비스

 

728x90
반응형