페이스북에서 MSA에 대한 좋은 내용을 보게되어 정리한 내용입니다.
MSA 란?
간단히 말하면, MSA는 복잡한 비즈니스 로직을 관리하기 쉬운 단위로 분리(decoupling)하는 것이다.
MSA와 API
MSA에서 복잡한 비즈니스 로직을 수행하려면, 서비스들 끼리 통신을 해야한다.
이 중에서 API는 서비스들 끼리 통신하는 여러 방법 중 하나에 불과하다.
그런데 만약 서비스간에 API로 통신하게 되면, 복잡도가 증가하여 관리가 힘들진다.
예를 들어서, 한 서비스가 다른 여러개의 서비스를 호출했다고 가정해 보면, 다음과 같은 고민들이 생겨난다.
- 호출한 여러 서비스들 중 하나가 실패한다면?
- 다른 서비스들을 롤백은 어떻게 하지?
그래서 API보다 더 권장되는 방법은 Kafka, RabbitMQ와 같은 메세지 브로커를 이용한 이벤트 기반 통신이다.
각 서비스는 자신이 해야할 일만 하고, 이벤트를 발생시킨다.(이벤트 큐에 등록시킨다)
그러면, 그 이벤트를 구독하는 서비스들이 알아서 로직을 실행하고 추가적으로 이벤트를 발생시키게 된다.
모듈화
MSA를 도입하는 이유는 각기 다른 도메인 간 발생하는 의존(coupling)을 최대한 줄이기 위해서 이다.
하지만 기존 코드가 모듈화가 안되어 있는데 무작정 MSA를 도입하게 되면 실패할 가능성이 높다.
결국 중요한건, 모듈화된 좋은 코드를 짜는것..!
그래서 물리적으로는 모놀리스라도, 각 도메인이 모듈화 되어 서로 이벤트 기반 통신을 하도록 되어있다면
MSA를 도입하는것은 아주 간단해 진다.
그저 한 덩어리로 배포하던 것을, 여러 덩어리로 쪼개서 각각 배포하기만 하면 되니까 말이다.
참고할 내용
- CQRS MSA 패턴
- API 요청 실패시
- https://microservices.io/