## MSA의 단점 ### 개발의 어려움 #### 분리된 데이터 문제 각 마이크로서비스가 독립적인 데이터 저장소를 사용하기 때문에, 전통적인 RDB 트랜잭션을 사용할 수 없다.[^1] 이로 인해 데이터 일관성 문제가 발생할 수 있으며, 중복된 데이터가 생길 수 있다. 분산 트랜잭션을 사용할 수는 있지만, 시스템 전체의 리소스를 많이 사용하므로 바람직하지 않다. #### 네트워크를 통한 데이터 통합 문제 데이터 통합을 위해 네트워크를 사용하는 과정에서 패킷 누락, 요청 응답 미수신, 네트워크 지연 등의 문제가 발생할 수 있다. 이는 데이터 통합과 신뢰성 유지에 어려움을 초래한다. ### 운영의 어려움 #### 에러 원인 추적 문제 MSA에서는 하나의 기능을 제공하기 위해 여러 마이크로서비스를 사용하므로, 에러 발생 시 원인을 특정 마이크로서비스에서 찾아내기 어렵다. 이는 디버깅과 문제 해결을 복잡하게 만든다. #### 데이터의 일관성 문제 각 마이크로서비스가 독립적인 데이터 저장소를 사용하기 때문에, 에러 발생 시 데이터의 일관성이 유지되지 않을 수 있다. ### 설계의 어려움 이상적인 MSA는 장점을 극대화하고 단점을 최소화해야 한다. 많은 사용자 요청을 처리하고, 쉽게 유지 보수할 수 있으며, 데이터의 중복과 네트워크 통신을 최소화해야 한다. 그러나 이러한 이상적인 MSA를 설계하는 것은 어렵고, 잘못 설계할 경우 장점은 최소화되고 단점만 극대화될 수 있다. ### 자동화 시스템이 필수적임 MSA는 많은 인스턴스를 사용하기 때문에 CI/CD 시스템이 필요하다. 또한, 인스턴스를 일일이 모니터링하기 어려우므로 모니터링 및 알림 시스템이 필수적이다. 이러한 자동화 시스템의 구축과 유지에는 상당한 리소스와 비용이 요구된다. ### 운영 오버헤드 증가 마이크로서비스는 많은 수의 서비스로 구성되므로, 운영 환경에서의 모니터링, 로깅, 디버깅 및 트레이싱이 복잡해진다. 서비스 의존성 관리, 버전 관리 및 하위 호환성 유지도 운영 오버헤드를 증가시킨다. [^1]:분산 트랜잭션을 사용할 수도 있지만, 시스템 전체의 리소스를 많이 사용하므로 좋지 않다.