[MSA] MSA란 무엇일까?

jiwon·2024년 7월 13일

최근 몇 년간 소프트웨어 개발에서 많은 관심을 받고 있는 MSA에 대해 알아보자.

MSA는 MicroService Architecture의 줄임말로, 소프트웨어를 작은 독립적인 서비스들로 분리하여 개발하는 아키텍처 패턴이다.
이러한 접근 방식은 큰 애플리케이션을 작고 관리 가능한 단위로 나누어, 유연성과 확장성을 극대화하려는 목적을 가지고 있다.


📌 MSA의 개념

MSA는 전통적인 Monolithic Architecture(모놀리식 아키텍처)와 대조적으로, 애플리케이션을 독립적으로 배포 가능한 작은 서비스들로 분해하는 방식을 채택한다.

각 서비스는 특정한 비즈니스 기능을 담당하며, 서로 간에는 네트워크를 통해 통신한다.

이러한 서비스들은 다양한 프로그래밍 언어나 데이터베이스를 사용하여 개발될 수 있으며, 독립적으로 배포되고 확장될 수 있는 구조를 갖추고 있다.



📌 MSA의 등장 배경

그렇다면 MSA는 왜 등장했을까?
MSA가 등장한 배경에는 여러 기술적, 비즈니스적 요인들이 있는데, 자세히 알아보자.


출처 : https://www.samsungsds.com/kr/insights/msa_architecture_edm.html


· 복잡한 소프트웨어 시스템 관리의 어려움

전통적인 Monolithic Architecture(모놀리식 아키텍처)에서는 하나의 큰 애플리케이션으로 개발되어 모든 기능이 하나의 코드베이스에서 관리되기 때문에, 시스템이 성장하면서 코드가 복잡해지고 유지보수가 어려웠다.

· 비즈니스의 빠른 변화와 요구사항 변화

현대의 비즈니스 환경에서는 빠르게 변화하는 시장과 고객 요구사항에 맞추기 위해 빠르게 개발하고 배포할 수 있는 유연성이 필요하다.
Monolithic Architecture에서는 전체 애플리케이션을 수정하고 배포해야 했기 때문에 이러한 요구를 충족하기 어려웠다.

· 스케일링의 어려움

Monolithic Architecture에서는 전체 애플리케이션을 함께 스케일업하거나 스케일아웃해야 했기 때문에, 특정 기능이나 서비스만을 확장하기 어려웠다. 이로 인해 자원의 낭비가 발생할 수 있다.

· 다양한 기술 스택의 필요성

다양한 기술 스택과 도구들이 등장함에 따라, 개발자들이 최신 기술을 사용하고 새로운 기술을 도입하려는 요구가 커졌다. Monolithic Architecture에서는 전체 시스템이 하나의 기술 스택으로 제한되기 때문에 이러한 요구를 충족하기 어려웠다.

· 서비스 지향 아키텍처의 발전

서비스 지향 아키텍처(SOA, Service-Oriented Architecture)의 발전과 영향을 받아, 각 기능이나 서비스를 독립적으로 개발하고 배포할 수 있는 아키텍처 패턴이 필요해졌다. MSA는 이러한 요구를 충족시키기 위해 등장하게 되었다.



📌 MSA의 주요 특징

· 독립적인 서비스

각각의 서비스는 독립적으로 배포 가능하며, 다른 서비스와 느슨하게 결합된다. 이는 개발 속도를 높이고 유연성을 제공한다.

· 단일 책임 원칙

각 서비스는 특정한 비즈니스 기능을 담당하며, 그 기능에 집중한다. 이로 인해 코드베이스가 작고 관리하기 쉬워진다.

· 자율적인 데이터 관리

각 서비스는 자신의 데이터를 독립적으로 관리하며, 필요에 따라 다른 서비스와 데이터를 공유한다.
이는 데이터 일관성과 복제를 관리하는 데 도움이 된다.

· 확장성

개별 서비스의 확장이 필요한 경우 해당 서비스만 확장할 수 있다. 이는 자원의 효율적인 사용을 가능하게 한다.

· 다양한 기술 스택

각 서비스는 필요에 따라 다른 프로그래밍 언어나 데이터베이스를 사용할 수 있다.
이는 최적의 기술 선택을 허용하며, 개발자들에게 새로운 기술을 도입하는 기회를 제공한다.



📌 MSA의 장점

· 유연성과 확장성

작은 서비스들로 분해된 애플리케이션은 변화에 대응하거나 특정 부분을 확장하기 쉽다.

· 개발 속도 향상

각 서비스는 독립적으로 개발하고 배포할 수 있어 전체 시스템의 개발과 배포 속도를 높일 수 있다.

· 서비스 단위 관리

각 서비스는 독립적으로 관리되므로 장애 발생 시 전체 시스템이 영향을 받는 것을 줄일 수 있다.



📌 MSA의 단점

· 운영 복잡성

각각의 마이크로서비스가 독립적으로 배포되고 실행됨에 따라, 전체 시스템의 운영 및 모니터링이 복잡해질 수 있다. 서비스 간의 의존성과 통신 오버헤드가 추가될 수 있다.

· 데이터 관리 어려움

마이크로서비스는 각자의 데이터를 관리하며, 데이터의 일관성과 복제를 유지하기 위한 추가적인 노력이 필요할 수 있다.
트랜잭션 경계를 관리하는 것도 복잡성을 증가시킬 수 있다.

· 테스트와 디버깅의 어려움

서로 다른 기술 스택을 사용하는 서비스들이 많을 경우, 각 서비스의 테스트와 디버깅을 동시에 진행하는 것이 어려울 수 있다.
또한 분산된 로그와 모니터링 데이터를 통합하여 전체 시스템의 상태를 파악하기 어려울 수 있다.

· 배포 관리의 복잡성

많은 수의 서비스가 존재할 경우, 배포 프로세스의 관리가 어려워질 수 있다.
서비스 간의 의존성 관리와 버전 관리가 복잡해질 수 있다.

· 초기 설정과 인프라 비용

많은 수의 서비스를 개발하고 운영하기 위해서는 초기 설정과 인프라 구축에 대한 비용이 증가할 수 있다.
또한 서비스 간의 통신을 위한 인프라 구축도 추가 비용과 노력이 필요할 수 있다.



💡 요약

MSA는 복잡한 소프트웨어 시스템을 보다 유연하고 확장 가능하게 만들기 위해 등장했다.
프로젝트의 규모가 크고 복잡해질수록 MSA의 필요성이 커지게 되는데, MSA를 통해 애플리케이션 개발과 운영의 효율성을 높이며 혁신을 추구할 수 있는 기회를 제공한다.
이러한 이유로 기업들 사이에서 널리 사용되고 있다.

profile
내가 보려고 올리는 개발 일지

0개의 댓글