-
하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 나눠 변경과 조합이 가능하도록 한 아키텍쳐입니다.
-
독립적인 역할을 수행하는 작은 단위의 서비스로 분리하여 설계하는 패턴입니다.
- 배포에 오랜 시간이 걸리기 시작한 경우
- 단순한 기능 수정에 전체 QA가 필요한 경우
- 단순한 버그 수정에 다른 버그가 생기는 경우
- 현재 애플리케이션을 기능 단위로 나눌 수 있는 경우
- 작은 단위이기에 변경이 용이합니다.
- 그 변경이 다른 서비스에 미치는 영향이 적습니다.
- 배포가 빠릅니다.
- 서비스별 Scale-Out이 가능해져 효율적인 자원 사용이 가능합니다.
- 서비스별 개발 조직을 나눌 수 있어 의사결정이 빠릅니다.
- 서비스 간 통신에 추가 비용이 듭니다.
이것은 응답 속도 증가의 요인이 됩니다.
- 분산된 DB(종류가 다를 수도 있는)의 트랜잭션 관리가 용이하지 못해 추가적인 노력이 필요합니다.