MA(모놀리식 아키텍처)는 애플리케이션의 모든 기능을 하나의 프로젝트로 개발하는 방식이다. 우리가 흔히 개발하는 MVC패턴의 개발 방식이 여기에 해당한다.
MA는 하나의 코드베이스에서 모든 기능이 통합되어 있어, 개발과 유지보수가 상대적으로 단순하다. 또한 배포 과정이 비교적 쉬우며, 단일 데이터베이스를 사용하기 때문에 데이터 일관성을 유지하기 용이하다. 성능 최적화도 비교적 간단한 편이며, 운영 및 관리의 복잡성이 낮아 작은 규모의 프로젝트에서는 효율적인 선택이 될 수 있다.
그러나 모든 기능이 하나의 애플리케이션으로 묶여 있기 때문에, 특정 기능을 변경할 경우 전체 애플리케이션을 다시 배포해야 하는 불편함이 있다. 또한 서비스가 확장될 때 개별 기능만 따로 확장하기 어렵고, 주로 서버 성능을 높이는 수직 확장(Scale-up) 방식에 의존하게 된다. 무엇보다 하나의 기능에서 장애가 발생하면, 그 영향이 전체 애플리케이션에 미칠 수 있다는 단점이 있다. 따라서 규모가 커질수록 유지보수와 확장성 측면에서 한계를 가지게 된다.
MSA(마이크로서비스 아키텍처)는 애플리케이션을 여러 개의 독립적인 서비스로 나누어 개발, 배포 및 운영하는 방식이다. 각 서비스는 특정 기능을 담당하며, 서로 독립적으로 동작할 수 있도록 설계된다.
MSA의 가장 큰 특징은 서비스 분리로, 기능별로 개별적인 서비스로 구성되기 때문에 독립적인 개발과 배포가 가능하다. 이를 통해 특정 서비스만 별도로 업데이트하거나 확장할 수 있어 수평 확장(Scale-out)이 용이하다. 또한 각 서비스는 다른 기술 스택을 사용할 수 있어, 필요한 경우 가장 적합한 기술을 선택하여 유연한 개발이 가능하다. 장애가 발생하더라도 문제가 있는 서비스만 격리할 수 있어 전체 시스템의 안정성을 높일 수 있다.
하지만 MSA는 서비스 간 통신이 필수적이므로 REST, gRPC, 메시지 브로커(Kafka 등)와 같은 기술을 활용해야 하며, 이로 인해 통신 복잡성이 증가할 수 있다. 또한 각 서비스가 개별적으로 DB를 관리하는 경우가 많아 데이터 일관성을 유지하기 어렵다. 그리고 개별 서비스가 많아질수록 배포와 운영이 복잡해지기 때문에, 이를 효과적으로 관리하기 위한 CI/CD, 서비스 디스커버리, 모니터링 시스템 등의 인프라 구축이 필수적이다.
🔥 수직 확장과 수평 확장
✅ 수직 확장
- 현재 사용하는 하드웨어보다 더 좋은 하드웨어로 교체하여 서버의 성능을 향상시킨다.
ex > 무거운 물건을 옮길때 더 힘쎈 사람으로 교체하여 옮김✅ 수평 확장
- 같은 하드웨어를 여러대로 설치하여 트래픽을 분산시켜 성능을 향상시킨다.
ex > 무거운 물건을 옮길때 같은 체격으로 여러명을 불러 옮김
항목 | MSA (마이크로서비스) | MA (모놀리식) |
---|---|---|
개발 방식 | 기능별 독립 서비스 | 하나의 코드베이스 |
배포 방식 | 개별 배포 가능 | 전체 재배포 필요 |
확장성 | 서비스 단위 확장 가능 | 전체 시스템 확장 필요 |
기술 스택 | 서비스별 자유롭게 선택 가능 | 단일 기술 스택 |
운영 복잡성 | 높음 (서비스 간 통신 필요) | 낮음 (단일 애플리케이션 관리) |
장애 영향도 | 서비스 단위 격리 가능 | 전체 시스템 영향 |
각 장단점이 존재하므로 아래 사항을 충분히 고려하여 알맞는 아키텍처를 선택하여야 한다.
스타트업 또는 소규모 프로젝트 : 초기에는 MA로 개발하는 것이 더 효율적
대규모 확장성 및 다양한 기술 도입 필요 : MSA가 유리하지만 운영 복잡성이 증가
운영 및 배포 자동화 인프라 구축 가능 여부 : MSA를 운영하려면 CI/CD, 서비스 디스커버리, 로깅 시스템이 필수