MSA(Micro Service Architecture)란?

Kddongkyu·2023년 12월 2일
0

CS-Study

목록 보기
4/8
post-thumbnail

업로드중..

🧱 MSA ?

  • MSA(Micro Service Architecture)란 간단히 말하자면 변신 합체 로봇의 시스템과 유사하다고 할 수 있다.
  • 각각의 변신 로봇은 독립적으로 기능할 수 있지만, 결합하면 하나의 더 크고 강력한 로봇으로 변신하여 복합적인 기능을 수행할 수 있다.
  • 이는 MSA에서 각각의 작은 서비스들이 독립적으로 운영되면서 필요에 따라 서로 협력하여 전체 시스템의 기능을 구축하는 것과 유사하다.

❓Monolithic VS MicroService

그렇다면, MicroService라는 개념이 등장하게 된 이유는 무엇일까?
MSA의 등장을 살펴보기 위해서는, 기존에 우리가 어떠한 방식으로 개발을 진행해 왔는지에 대해 알아봐야한다.

Monolithic

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

웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말한다.

MSA 라는 개념이 등장하기전, 그리고 현재까지도 많은 소프트웨어가 Monolithic 형태로 구현되어 있고, 소규모 프로젝트에는 Monolithic Architecture가 훨씬 합리적입니다. 간단한 Architecture이고, 유지보수가 용이하기 때문이다.

하지만, 시스템의 규모가 커지기 시작하면, Monolithic Architecture의 한계가 명확하게 보이게된다.

  • 유지보수의 어려움
    • Monolithic Architecture에서는 시스템의 한 부분을 변경하거나 업데이트하려면 전체 어플리케이션을 이해하고, 종종 전체 시스템을 재배포해야 합니다. 이는 유지보수를 복잡하고 시간 소모적으로 만듭니다.
  • 확장성 제한
    • 모든 기능이 하나로 묶여 있기 때문에, 특정 기능이나 서비스를 별도로 확장하는 것이 어렵습니다. 트래픽이 증가할 때 특정 부분만을 확장하는 것이 아니라 전체 시스템을 확장해야 하는 문제가 있습니다.
  • 신뢰성 문제
    • Monolithic Architecture에서는 한 부분의 오류가 전체 시스템에 영향을 미칠 수 있습니다. 이는 시스템의 전반적인 신뢰성을 감소시키는 요인이 됩니다.
  • 개발 속도 저하
    • 큰 규모의 어플리케이션은 빌드와 배포 시간이 길어질 수 있으며, 이는 개발 과정을 느리게 만들 수 있습니다. 또한, 개발 팀 간의 협업이 복잡해질 수 있습니다.

이러한 문제점들 때문에 많은 조직들이 마이크로서비스 아키텍처 같은 더 모듈화되고 유연한 접근 방식으로 전환하고 있습니다.


MSA

마이크로서비스 아키텍처(Microservices Architecture, MSA)는 대규모 어플리케이션을 작고 독립적으로 관리 가능한 서비스들로 분할하는 접근 방식이다.

각 서비스는 특정 비즈니스 기능을 수행하며, 서로 독립적으로 개발, 배포, 운영된다.

그렇기에 MSA의 특징은 다음과 같다고 설명할 수 있다.

  • 분산된 서비스 : 어플리케이션은 서로 다른 비즈니스 기능을 수행하는 여러 마이크로서비스로 나뉩니다.
  • 독립성 : 각 마이크로서비스는 독립적으로 개발, 배포, 확장할 수 있습니다.
  • 다양한 기술 스택 : 각 서비스는 서로 다른 프로그래밍 언어나 기술 스택을 사용할 수 있습니다.
  • 분산 데이터 관리 : 각 서비스는 자체 데이터베이스를 유지할 수 있어 데이터 관리가 분산됩니다.
  • API 기반 통신 : 서비스들은 REST, gRPC와 같은 경량의 통신 프로토콜을 사용하여 서로 통신합니다.
  • 자동화된 배포와 운영 : 마이크로서비스는 컨테이너화되고, 자동화된 도구를 사용하여 쉽게 배포 및 관리됩니다.

👍장점

  • 유연한 기술 채택 : 각 서비스가 독립적이기 때문에 최적의 기술을 선택할 수 있습니다.
  • 확장성 : 트래픽이 많은 서비스만을 별도로 확장할 수 있어 효율적입니다.
  • 고장 격리 : 한 서비스의 장애가 전체 시스템에 영향을 미치지 않습니다.
  • 지속적인 배포 및 통합 : 작은 단위의 서비스를 빠르게 개발하고 자주 배포할 수 있습니다.
  • 팀의 독립성 : 각 팀이 자신의 서비스에 집중할 수 있어 생산성이 향상됩니다.

👎단점

  • 복잡한 시스템 관리 : 여러 서비스를 관리하고 조정하는 것이 복잡할 수 있습니다.
  • 통신 비용과 지연 시간 : 서비스 간 네트워크 통신은 비용이 발생하고, 지연 시간이 증가할 수 있습니다.
  • 데이터 일관성 유지 : 분산된 데이터베이스 관리는 데이터 일관성 유지를 어렵게 만듭니다.
  • 개발 및 운영의 복잡성 : 각 서비스의 개발, 배포, 모니터링이 복잡해질 수 있습니다.
  • 테스트의 어려움 : 상호 의존하는 서비스들 간의 통합 테스트가 어려울 수 있습니다.
profile
Step by step

0개의 댓글