ex) 유저 기능 + 데이터베이스 배포 / 장바구니 기능 + 데이터베이스 배포
기술 스택의 유연성: 각 마이크로서비스는 자신만의 기술 스택을 가질 수 있다. 하나의 서비스는 java 다른 서비스는 nest.js나 python 등으로 개발할 수 있다.
서비스 간 통신: API(주로 HTTP REST, gRPC, 메시지 큐 등)를 통해 서로 통신한다. 서비스 간에는 독립적인 통신이 이루어지며, 이를 통해 서비스가 상호작용한다.
확장성: 특정 서비스만 확장될 수 있다.
장애 격리: 독립적으로 동작하므로, 한 서비스에 장애가 발생해도 전체 시스템에 영향을 미치지 않는다.
독립적인 개발 및 배포: 각 서비스는 독립적으로 개발하고 배포될 수 있다. 이로 인해, 팀 간의 독립적인 작업을 할 수 있어 개발 효율성이 증가한다. 각 서비스가 독립적으로 배포되기 때문에, 배포 주기를 단축시킬 수 있다.
기술 스택의 유연성: 각 서비스가 독립적으로 운영되므로, 각 서비스마다 다른 기술 스택을 사용할 수 있습니다.
업그레이드 및 유지보수의 용이성: 한 서비스의 업데이트가 다른 서비스에 영향을 미치지 않아서, 전체 시스템의 안정성을 유지할 수 있다.
복잡한 관리: 서비스 간 통신, 데이터 일관성 관리, 모니터링 등이 복잡해진다. 또한, 분산 시스템에서 발생할 수 있는 문제(네트워크 지연, 서비스 실패 등)에 대한 관리도 필요하다.
분산 트랜잭션 문제: 각 서비스가 독립적인 데이터베이스를 갖는 경우, 분산 트랜잭션 처리 문제에 직면할 수 있다. 서비스 간의 데이터 일관성을 유지하는 것이 어렵고, 이를 해결하기 위해 Eventual Consistency 패턴을 사용해야 한다.
배포 및 테스트의 복잡성: MSA는 여러 개의 서비스를 관리하고 배포하기 때문에, 배포 자동화와 테스트 자동화가 복잡하다.
운영 비용 증가: 인프라 비용이나 운영 비용이 증가할 수 있다.
복잡한 배포 파이프라인: 각 서비스에 대한 CI/CD 파이프라인을 구축해야 한다.
스트리밍 서비스
전자 상거래 플랫폼
소셜 미디어 플랫폼
금융 서비스