모놀리식(Monolithic)이란?
- 모든 애플리케이션의 필요 요소들을 하나의 소프트웨어 안에 전부 포함시킴
- 서비스 내 모든 내용이 하나의 어플리케이션에서 유기적으로 연결되어 작동
- 배포되기 위하여 서로 의존성을 가진 채 패키징되고, 운영 서버에 배포됨
이미지와 같이, 모든 업무 로직이 하나의 어플리케이션으로 패키지되어 서비스된다
또한 어플리케이션의 데이터 또한 한 곳에 모여 참조되어 서비스된다.
마이크로서비스(MicroService)란?
- 모놀리식과 상반된 방식으로, 어플리케이션 각각의 구성 요소 및 서비스를 분리하여 개발하고 운영
- 개별 서비스가 다른 서비스에 영향을 주지 않거나, 주는 영향이 최소화됨
- 용도에 맞는 컨테이너를 모아서 사용하게 됨
모놀리식과 마이크로서비스
1. 모놀리식의 아키텍처의 단점
- 단일 저장소를 사용하는 등 모든 서비스와 요소들이 패키징되어 서비스되어야 하기 때문에 시스템의 일부만 수정한다 하더라도 전체 어플리케이션을 다시 빌드, 테스트, 패키징해야 한다.
Sam Newman의 마이크로서비스 정의, 특징
통신할 수 있는 작은 규모의 여러 서비스들의 묶음이 모여서 하나의 어플리케이션을 구성
- 비즈니스 기능을 중심으로 구축되어야 함
- 완전하게 자동화된 배포 시스템을 사용해야 한다
- 최소한의 중앙 집중식 관리를 지향하고, 서로 다른 프로그래밍 언어와 데이터 저장 기술을 사용할 수 있다
-> 개별 서비스에 최적화된 언어와 데이터베이스를 사용할 수 있다!
즉, 마이크로서비스의 핵심은 어플리케이션을 구성하는 다양한 서비스들의 경계를 잘 분리하고, 각 서비스의 특성에 알맞은 기술을 사용하여 개발한 뒤 Restful API와 같은 매커니즘을 통해서 서로 데이터를 제공하여 사용할 수 있도록 하는 것이다
중간 단계
모놀리식과 마이크로서비스의 중간 단계로 프론트엔드-백엔드를 구분하는 식으로 구분할 수 있다
모놀리식과 중간 단계, 마이크로서비스의 아키텍처 구상도이다
더욱 차이가 크게 드러나는 아키텍처 이미지이다
마이크로서비스의 특징 9가지
꼭 마이크로서비스인가?
모든 서비스는 마이크로서비스일 필요 없다
- 마이크로서비스는 기존 개발 대비하여 비용과 시간이 더 투자되어야 한다. 투자할 수 있고 정확히 비용 산출했는가?
- 또한 독립 라이프 사이클을 통해 각각 서비스가 독립적으로 운영되도록 경계가 잘 나누어져 있는지?
- 각가의 서비스 운영에 있어서 서비스 유지보수 및 확장, 스케일링이 용이한지?
- 오류가 발생하더라도 그 오류가 다른 서비스에 영향을 미치지 않도록 영향 범위가 최소화되었는가?
- 외부 종속성과 상호작용이 단순화되어 있는가?
- 다양한 프로그래밍 언어와 저장소 기술 등을 쓸 수 있도록 지원하는가?