1) 모놀리식 아키텍처 (Monolithic Architecture)
장점
- 어떤 기능(서비스)이든지 개발되어있는 환경이 같아서 복잡 하지 않음
- 쉽게 고 가용성 서버 환경을 만들 수 있음. ( 같은 어플리케이션으로 하나더 만들면 됨)
- End-to-End 테스트가 용이하다. (MSA의 경우 테스트에 필요한 서비스들을 모두 동작 시켜야함)
단점
- 한 프로젝트의 덩치가 너무 커져서 어플리케이션 구동 시간이 늘어나고 빌드,배포 시간도 길어진다.
- 조그마한 수정 사항이 있어도 전체를 다시 빌드 하고 배포 해야함.
- 많은 양의 코드가 몰려있어 개발자가 모두를 이해 할 수 없고 유지 보수도 힘듬.
- 일부분의 오류가 전체에 영향을 미침.
- 기능 별로 알 맞는 기술, 언어, 프레임워크를 선택하기가 까다로움
2)마이크로 서비스 아키텍처 (MicroService Architecture)
장점
- 기능 별로 마이크로 서비스를 개발하고, 작업 할당을 서비스 단위로 하면 개발자가 해당 부분을 온전히 이해
- 새로 추가되거나 수정 사항이 있는 마이크로 서비스만 빠르게 빌드, 배포가 가능
- 해당 기능에 맞는 기술, 언어 등을 선택하여 사용할 수 있음
- 일부분의 오류가 있으면 해당 기능에만 오류가 발생하고 그 부분만 빠르게 고쳐서 정상화가 가능
단점
- 무엇보다 관리가 힘듬. 작은 여러 서비스들이 분산 되어있기 때문에 모니터링이 힘들다.
- 서로를 호출하여 전체 서비스가 이루어지기 때문에 무조건 다른 서비스를 호출하는 코드가 추가되는데 이 부분이 모놀리식 아키텍쳐의 개발보다 조금 까다로움.
- 통신 관련 오류가 잦을 수 있음. 마이크로 서비스들 끼리 계속 서로 통신을 하다 보니 모놀리식 아키텍쳐에 비해 통신 관련 오류가 잦음.
- 테스트가 불편하다. 예로 End-to-End 테스트를 위해 UI, Gateway 등등 여러 개의 마이크로 서비스를 구동 시켜야 함.