CS/프로그래밍

MSA(마이크로서비스 아키텍처)

H.E 2024. 3. 23. 01:45

[ MSA(마이크로서비스 아키텍처) ]

MSA는 여러 개의 작은 서비스로 구성되어 각 서비스가 독립적으로 개발되고 배포되는 구조

즉 하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐

 

▶ MSA의 등장배경

Monolithic Architecture 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태

 

아직까지는 많은 소프트웨어가 Monolithic 형태로 구현되어 있음

소규모 프로젝트에는 Monolithic Architecture가 훨씬 합리적임 간단한 Architecture이고, 유지보수가 용이하기 때문

하지만 규모가 커지게 되면Monolithic Architecture 단점이 명확

  • 서비스/프로젝트가 커지면 커질수록, 영향도 파악 및 전체 시스템 구조의 파악에 어려움
  • 빌드 시간 및 테스트시간, 그리고 배포시간이 기하급수적으로 늘어나게 됨
  • 서비스를 부분적으로 scale-out하기가 힘듬
  • 부분의 장애가 전체 서비스의 장애로 이어지는 경우가 발생하게 됨

▶ Micro service의 정의

  • 각각의 서비스는 그 크기가 작을 뿐, 서비스 자체는 하나의 모놀리틱 아키텍쳐와 유사한 구조를 가짐
  • 각각의 서비스는 독립적으로 배포가 가능해야함
  • 각각의 서비스는 다른 서비스에 대한 의존성이 최소화 되어야함
  • 각 서비스는 개별 프로세스로 구동 되며, REST와 같은 가벼운 방식으로 통신되어야 함

일반적으로 하나의 서비스는 하나의 기능이며, 하나의 프로젝트라고 볼 수 있지만, 비즈니스와 시스템의 실정에 맞게 서비스의 범위(크기)를 설정하는 것이 중요함

▶ MSA의 장단점

MSA의 장점

MSA는 비즈니스 민첩성(Business agility)과 관련이 큼

서비스나 프로젝트가 크고, 복잡하고, 장기적으로 운영될 수록, MSA의 장점이 더욱 드러나게 됨

MSA는 서비스가 커지면서 생겼던 Monolithic Architecture의 문제점들을 어느정도 보완해 줄 수 있음

  • 배포(deployment) 관점
    • 서비스 별 개별 배포 가능 ( 배포 시 전체 서비스의 중단이 없음)
    • 요구사항을 신속하게 반영하여 빠르게 배포할 수 있음
  • 확장(scaling) 관점
    • 특정 서비스에 대한 확장성이 용이함.
    • 클라우드 사용에 적합한 아키텍쳐
  • 장애(failure) 관점
    • 장애가 전체 서비스로 확장될 가능성이 적음
    • 부분적 장애에 대한 격리가 수월함

이외에도, 신기술의 적용이 유연하고, 서비스를 polyglot(다양한 프로그래밍 언어와 기술을 사용하여 구축)하게 개발/운영 할 수 있다는 장점이 있음

MSA의 단점

Monolithic Architecture은 단순한 아키텍쳐인데 비해 MSA는 보다 복잡한 아키텍쳐로, 전체 서비스가 커짐에 따라 그 복잡도가 기하급수적으로 늘어날 수 있음

  • 성능: 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, 대기시간이 그만큼 늘어나게 됨
  • 테스트 / 트랜잭션: 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원을 필요로 함
  • 데이터 관리: 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어려움
    • 정합성: 어떤 데이터들이 값이 서로 일치함(데이터는 서로 모순 없이 일관되게 일치해야함

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

useLayoutEffect의 활용  (2) 2024.04.02
Zustand란 무엇인가?  (0) 2024.03.23
디자인 패턴 - 팩토리 패턴 / 전략 패턴 / 옵저버 패턴  (1) 2024.03.22
SOLID 원칙  (2) 2024.03.16
디자인 패턴 - 싱글톤 패턴  (3) 2024.02.28