여러개의 작은 서비스들로 한 개의 큰 서비스를 제공할 수 있는 아키텍처
MSA에 들어가기 전에....
MSA를 말하기 전에 이전에는 어떤 방식이 있었는지 먼저 확인해봐야합니다.
Monolithic Architecture
기존에 우리가 전통적인 방식으로 개발하였던 방법을 모놀리식 아키텍처라고 합니다. 이 방법의 경우 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태입니다.
웹 개발을 예로들면 모듈별로 개발을 진행하되 결국 개발이 완료된 후 웹 애플리케이션을 하나의 결과물로 패키징하여 배포되는 형태입니다.
👉 장점
- 서비스들이 한 군데에 개발되어있기 때문에 서비스 별로 환경을 생각할 필요 없다.
- 단순히 한개의 애플리케이션을 그대로 만들면 모든 서비스가 복사 되기 때문에 고가용성 서버 환경을 쉽게 만들 수 있다.
👉 단점 :
- 프로젝트의 크기가 커지면 커질 수록 애플리케이션의 구동시간과 빌드, 배포 시간이 길어진다.
- 1번에 이어서 조그마한 수정 사항이 발생할 때마다 전체를 빌드해야하기 때문에 시간이 오래걸린다.
- 많은 양의 코드가 있기 때문에 오류를 찾기 어려워진다.
- 장애가 발생 할 시 모든 서비스가 중단되는 경우가 발생 할 수 있다.
Micro Services Architecture
MSA의 경우는 서비스 별로 서버들이 따로 있고 이 서비스들은 API를 통해서 통신을 하는 특징을 가지고 있습니다. 그리고 각 서비스들은 다른 곳에서도 재활용을 할 수 있다는 특징도 있습니다. 이렇게 각자 떨어져있기 때문에 서비스 별로 특징에 맞는 다른 Framework를 가져갈 수 있는 장점도 있습니다.
👉 장점 :
- 서비스 별로 개발이 가능하여 업무 분배 및 코드에 대한 이해가 빠르게 될 수 있다.
- 새로 추가 되거나 오류의 수정이 빠르게 이뤄질 수 있다.
- 각각 서비스 별로 Scale-Out이 가능하여 메모리나 CPU적으로 이득을 가져 올 수 있다.
👉 단점 :
- 서비스들이 분산 되어있기 때문에 관리가 어렵다
- 서비스간의 호출로서 서비스들이 이뤄지기 때문에 서로 약속된 인터페이스가 없으면 서비스가 불가능하고 이에 대해 추가 관리가 필요하다.
- 데이터가 여러 서비스에 걸쳐서 관리가 되기 때문에 정합성 등을 추가로 신경써야한다.