- MicroService Architecture
- 독립적인 기능들, 작은 서비스들을 조합하여 하나의 어플리케이션을 구성하는 아키텍처 패턴
개요
설계 배경
- 기본 Legacy 프로젝트들은 하나의 서버 내 여러 기능, 서비스들을 묶어 운영을 했었다, 이를 Monolithic 아키텍처라 한다
- Monolithic 아키텍처는 아래와 같은 특징들이 있다
- 하나의 서버 내 여러 서비스들이 있어 서로의 의존성이 높다, 이는 일부가 변경되면 서버 전체 영향을 미치기에 테스트 및 비용을 많이 필요로 한다
- 하나의 수정에 전체 영향이 있기 때문에 구조 변경이나 확장은 어렵다
- 간단한 버그 픽스여도 서버 전체 배포를 해야 하는 번거로움이 있다
- 위와 같은 특징, 단점들을 해결하기 위해 MSA 구조가 나오게 되었다
- 각 기능, 서비스들을 독립된 서버와 DB를 갖고 운영을 한다
- 독립된 서버이기에 직접적인 의존성은 줄어들고, 서비스 사이의 경계가 명확해진다
- 특정 서비스 개발자는 서비스 사이의 통신에 많은 신경을 쓰지 않고 특정 서비스 로직에만 집중할 수 있다
- 확장이 필요하면 특정 서비스들만 확장하면 되기에, 운영상으로도 이점이 있다
단점
- 위와 같은 점들을 고려했을때 MSA가 매우 좋은 아키텍처인것 같지만, 따지고 보면 꼭 그렇지도 않다
- 일단 여러 서비스가 분리된 만큼, 전체 관리를 하기엔 비용이 많이 소요된다
- 여러 서비스에 걸쳐진 이슈가 발생했다면, 트랜잭션 관리가 까다로워진다
- 이런 경우라면 이슈 관련 플로우를 다시 검토하여 하나의 서비스로 합치는 전략이 필요할 수 있다
- 서비스, 기능이 분리된만큼 전체 구조의 복잡도가 증가하게 된다
- 여러 기능, 서비스들이 존재하지 않는, 단순한 구조라면 MSA보단 Monolithic 구조가 더 유용하다
구조