dev_dbdb1114

MSA란 무엇인가? 본문

프로그래밍/server

MSA란 무엇인가?

dbdb1114 2023. 9. 13. 23:53

MSA ( MicroServiceArchitecture )

MSA란 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성됨 프레임워크라고 할 수 있다. 마이크로 서비스는 완전히 독립적으로 배포가 가능하고, 다른 기술 스택 (개발 언어, 데이터에비스 등)이 사용 가능한 단일 사업 영역에 초점을 둔다.

MSA는 왜 탄생했는가?

Monolithic Architecture

MSA가 등장하기 이전에 가장 많이 사용되던 아키텍처이다. Monolithic Architecture의 한계점으로 MSA가 생겨났다고 볼 수 있기 때문에 Monolithic Architecture에 대해 알아두면 좋을 것 같다. 이 아키텍처는 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태로, 기능 개발은 나눠서 하지만 결과물인 애플리케이션을 빌드하고 배포할 때는 하나의 결과물로 패키징 하여 배포되는 형태를 말한다.

Monolithic Architectur의 한계

Monolithic Architecture를 기반으로 쇼핑몰을 구축한다면 우리는 하나의 프로젝트 내에서 고객관리, 상품관리, 이벤트 관리 등등을 한 번에 처리했다. 그렇다면 이렇게 했을 때 어떤 점이 불편했을까?

  1. 고객관리, 상품관리, 이벤트 관리 중에서 이벤트에 대한 비즈니스 로직만 변경이 생겼다. 하지만 우리는 전체 프로젝트를 다시 빌드해야한다. 즉 우리가 다시 배포 하려는 건 이벤트 관리만 해당하는데 전체를 다시 빌드하고, 다시 배포해야한다는 것이다.
  2. 프로젝트 자체의 사이즈가 크기 때문에 작은 변화에 적용할 테스트에도 높은 수준의 테스트 비용이 발생하기도 한다.
  3. 한 Framework와 언어에 종속적이다. 예를 들어 프레임 워크 마다 장단점이 있다. 어떤 기능에서는 스프링이 좋고, 어떤 기능에서는 nodejs가 더 좋을 수 있다. 하지만 처음에 spring을 사용했다면, 모든 기능을 spring과 Java로 해야할 것이다.

그렇기 때문에 프로젝트 필드를 한 번에 하는 것이 아닌 기능단위의 API를 설계하여 유저가 사용할 때는 하나의 어플리케이션으로 느끼지만 사실상 업무부서별로 다른 프레임워크를 사용하기도 하고, 다른 DB를 사용하기도 하는 것이다.

MSA

MonolighticArchitecture의 한계점을 보완하기 위해 나온 것이니 만큼 분산적인 느낌이 강하다. API별로 분산되어 있는 형태를 가져서 기능별로 독립적인 CI/CD가 가능해진다. 위 예를 그대로 가져오면 고객관리, 상품관리, 이벤트 관리에 대한 부서별로 서로 다른 API와 프레임워크 및 언어를 사용할 수 있게 된다는 것이다.

MSA의 장점

  1. 각각의 서비스가 모듈화 되어있으며, 모듈끼리 RPC 또는 message-driven API 등을 이용하는데 이러한 방식은 각각 개별의 서비스 개발을 빠르게 하고, 유비보수도 쉽게 할 수 있도록 한다.
  2. 부서나 팀 단위로 적절한 수준의 기술 스택을 다르게 사용할 수 있다. 어떤 부서는 spring을 사용하더라도 다른 부서는 node.js로 다른 서비스를 개발할 수 있다.
  3. 서비스별로 독립적 배포가 가능하다. 지속적인 배포 CD도 Monolithic에 비해서 가볍게 할 수 있다.
  4. 개별적인 scale-out이 가능하여 메모리, CPU 부분에서 상당부분 이득이 있다.

MSA의 단점

  1. 서비스가 모두 분산되어 있기 때문에 내부 시스템의 통신 방식을 정해야한다. 그리고 통신의 장애와 서버의 부하 등 transaction 유지에 대한 정책이 필요하다.
  2. monolithic에서는 단일 트랜잭션을 유지하면 됐지만 MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르다.
  3. 통합테스트가 어렵다. 모두 분산되어 있더라도 하나의 서비스이기 때문에 통합 테스트는 필수적이다.
  4. 테스트 당시 다른 서비스들과의 연계가 정상적으로 이루저지고 있는지도 확인해야한다.

마치며

프로그래밍을 하다보면 모듈화는 습관적으로 고민하며 하게 되는것 같다. 이런 모듈화의 단위가 코드 작성부터 이제는 API 설계를 분산하는 모습까지 온 것 같다. 아마 MSA가 테스트나 통신 부분에서 어려움이 있겠지만 지금보다 더 편해진 무언가가 나오지 않을까 싶고 MSA 방식이 앞으로도 많이 사용될 것 같다. 하지만 어디까지나 내 개인적인 생각이고 코드단위의 모듈화와 전체 서비스 설계에 있어서의 분산은 조금 다른 영역이기도 하기 때문에 쉽지만은 않을 것 같다는 생각이 든다.

'프로그래밍 > server' 카테고리의 다른 글

OAuth2.0, 인증과 인가  (0) 2023.09.12
이미지 호스팅 서비스 Cloudinary with React  (0) 2023.09.04
JWT토큰에 대해서  (0) 2023.07.19
세션은 무엇인가?  (0) 2023.07.18
ProxyServer에 대해서  (0) 2023.07.05
Comments