MSA란 무엇인가요?
MSA는 Micro Service Architecture의 줄임말로, 하나의 큰 애플리케이션을 여러 개의 작은 서비스로 나누어 개발하고 배포하는 소프트웨어 아키텍처 스타일입니다. 각 마이크로서비스는 독립적으로 실행되며, 하나의 기능 또는 도메인에 집중하여 개발됩니다.
MSA와 모놀리식 아키텍처의 차이
기존의 모놀리식 아키텍처는 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태입니다. 사용자 인터페이스, 비즈니스 로직, 데이터 접근 계층 등이 하나의 애플리케이션 안에 묶여 있어, 개발 초기에는 구조가 단순하고 배포가 쉽다는 장점이 있습니다.
하지만 일정 규모 이상의 서비스, 혹은 수백명 이상의 개발자가 투입되는 프로젝트에서 모놀리식 아키텍처는 다음과 같은 문제점들이 나타나기 시작합니다.
1.
장애 전파 위험
•
하나의 기능에서 장애가 발생하면 전체 시스템이 영향을 받을 수 있습니다.
2.
개발 협업의 어려움
•
많은 개발자가 하나의 코드베이스를 수정하다 보니 충돌이 잦고 협업이 어렵습니다.
3.
확장성 부족
•
트래픽이 몰리는 특정 기능만 확장하고 싶어도, 전체 애플리케이션을 확장해야 하는 비효율이 발생합니다.
4.
유지보수가 어려움
•
코드베이스가 방대해지면서 작은 변경에도 다른 부분에 영향을 미칠 가능성이 커집니다.
5.
배포가 어렵고 느림
•
하나의 기능을 수정하더라도 전체 애플리케이션을 다시 빌드하고 배포해야 합니다.
6.
기술 스택의 제한
•
전체 시스템이 동일한 기술 스택을 사용해야 하므로, 새로운 언어나 프레임워크를 도입하기 어렵습니다.
이러한 문제를 해결하기 위해 등장한 것이 바로 MSA입니다. MSA는 각 기능을 작고 독립적인 서비스로 분리하여, 서로 API를 통해 통신하도록 구성합니다. 이를 통해 각각의 서비스는 독립적으로 개발, 배포, 확장이 가능하며 변화에 유연하게 대응할 수 있습니다.
MSA의 특징
MSA는 API를 통해서만 다른 서비스와 상호작용합니다. 각 서비스는 자신의 기능을 API 형태로 외부에 노출하고, 내부 로직, 기술 스택, 데이터베이스 등은 완전히 추상화됩니다.
예를 들어, user-service는 사용자 정보를 API로 제공하며, 그 내부가 어떤 언어로 구현되어 있는지는 다른 서비스가 알 필요가 없습니다.
이는 서비스 간의 결합도를 낮추고, 독립적인 개발과 배포를 가능하게 합니다. 즉, 한 서비스에서 내부 구현을 변경해도, API 규격이 유지되면 다른 서비스에는 영향을 주지 않습니다.
또한, MSA에서는 서비스 간 통신이 주로 REST API, gRPC, 메시지 큐 등을 통해 이루어지는데, 이 방식 덕분에 서로 다른 언어와 플랫폼으로 개발된 서비스들이 유연하게 연동될 수 있습니다.
MSA의 장점
1. 서비스 단위로 분리
각 마이크로서비스는 하나의 비즈니스 기능만을 담당하며, 다른 서비스와 느슨하게 연결되어 있습니다.
이로 인해 유지보수가 쉬워지고, 특정 서비스에 문제가 생겨도 전체 시스템에 영향이 가지 않도록 장애 격리가 가능합니다.
2. 독립적인 배포 및 개발
서비스는 각자 독립적으로 개발·배포할 수 있습니다. 로그인 기능만 수정해도 해당 마이크로서비스만 배포하면 되므로, 배포 속도와 유연성이 대폭 향상됩니다.
3. 다양한 기술 스택 사용 가능
각 서비스는 독립적인 프로젝트이기 때문에, Java, Python, Node.js 등 다양한 언어와 프레임워크를 기능에 맞게 선택할 수 있습니다.
4. 기능별 확장성 확보
트래픽이 집중되는 특정 서비스만 선택적으로 수평 확장할 수 있어, 자원을 효율적으로 사용할 수 있습니다.
MSA의 단점
1. 시스템 복잡도 증가
서비스가 많아질수록 시스템 전체 구조가 복잡해집니다. 서비스 간의 관계를 이해하고 관리하기가 어려워지고, 데이터 흐름과 호출 흐름을 추적하기 어려워질 수 있습니다.
2. 통신 비용 증가
모놀리식 구조에서는 내부 메서드 호출로 끝났던 작업이, MSA에서는 네트워크 통신(API 호출)을 통해 처리됩니다. 이로 인해 지연(latency)이 생기고, 네트워크 장애 발생 가능성도 늘어납니다.
3. 데이터 일관성 유지 어려움
MSA는 각 서비스가 자신만의 데이터베이스를 가지는 것이 일반적이기 때문에, 분산된 데이터 일관성을 유지하는 것이 어렵습니다. 특히 트랜잭션이 여러 서비스에 걸쳐있을 경우, 분산 트랜잭션 관리가 복잡해집니다.
4. 배포 및 운영 자동화 필요
각 서비스를 독립적으로 배포할 수 있는 만큼, CI/CD 파이프라인 구축이 필수입니다. 서비스 수가 많아질수록, 모니터링, 로깅, 장애 대응 등 운영적인 부담이 증가합니다.
5. 초기에 높은 도입 비용
MSA를 처음 도입할 때는 아키텍처 설계, 인프라 구성, 팀 조직 방식 등 많은 초기 비용이 발생합니다.
특히 작은 스타트업이나 프로젝트 초반에는 과도한 설계로 오히려 비효율적일 수 있습니다.