MSA가 도입되기 전, Monolithic 아키텍처 방식으로 개발이 이루어짐
Monolithic이란, Monolithic의 사전적 정의에 맞게 '한 덩어리'에 해당하는 구조로 이루어져 있음
모든 기능을 하나의 어플리케이션에서 비즈니스 로직을 구성하여 운영함
빌드/테스트 시간의 증가: 하나를 수정해도 시스템 전체를 빌드해야 함. 유지보수가 힘듦
작은 문제가 시스템 전체에 문제를 일으킴: 만약 하나의 서비스 부분에 트래픽 문제로 서버가 다운되면, 모든 서비스 이용이 불가능할 것임
확장성 불리: 서비스마다 이용률이 다를 수 있음. 하나의 서비스를 확장하기 위해 전체 프로젝트를 확장해야 함


MSA에서 각 컴포넌트는 API를 통해 다른 서비스와 통신을 함
이 때 모든 서비스는 각각 독립된 서버로 운영하고 배포하기 때문에 서로 의존성이 없음
하나의 서비스에 문제가 생겨도 다른 서비스에는 영향을 끼치지 않으며, 서비스 별로 부분적인 확장이 가능한 장점이 있음

즉, 서비스 별로 개발 팀이 꾸려지면 다른 팀과 의존 없이 팀 내에서 피드백을 빠르게 할 수 있고, 비교적 유연하게 운영이 가능함
하지만, MSA는 서비스 별로 호출할 때 API로 통신하므로 속도가 느림
또한 서비스 별로 통신에 맞는 데이터로 맞추는 과정도 필요함
Monolithic 방식은 하나의 프로세스 내에서 진행되기 때문에 속도 면에서는 MSA보다 훨씬 빠를 것임
또한, MSA는 DB 또한 개별적으로 운영되기 때문에 트랜잭션으로 묶기 힘든 점도 있음
따라서, 서비스 별로 분리를 하면서 얻을 수 있는 장점도 있지만, 그만큼 체계적으로 준비되어 있지 않으면 MSA로 인해 오히려 프로젝트 성능이 떨어질 수도 있다는 점을 알고 있어야 한다.
정답이 정해져 있는 것이 아니라, 프로젝트의 목적과 현재 상황에 맞는 아키텍처 방식이 무엇인지 설계할 때부터 잘 고민해서 선택하자!
참고 📖