Monolithic Architecture
- 마이크로 서비스 아키텍처의 반대, 전통적인 아키텍처
- 하나의 서비스 또는 애플리케이션을 하나의 거대한 아키텍처로 구성
- 모든 혹은 대부분의 서비스 및 구성 요소들이 한 곳에 모여있을 때
장점
- 개발이 쉽다. 소규모 프로젝트에 알맞다.
- 어떤 서비스든지 개발하는 환경이 같아서 복잡하지 않다.
- End-to-End 테스트가 쉽다.
- 로드 밸런서 등을 이용하면 확장이 쉽다.
- 서버에 코드를 복사하기만 하면 돼서 배포가 쉽다.
- 서버 하나를 통째로 복사하면 되니 전체적인 Scale Out 이 쉽다.
단점
- 사용할 기술 스택이 처음에 결정되고 변경되는 경우는 거의 없다.
- 일부 서비스의 장애로 인해 전체 서비스에 장애가 생길 수 있다.
- 애플리케이션이 너무 거대해지면 초기 개발자를 제외하고는 완전히 이해하기 어렵다.
- 위 이유로, 새로운 개발자가 이전 코드를 이해하는 데 시간이 오래 걸려 개발 속도가 느려진다.
- 작은 수정사항에도 전체를 다시 빌드 및 배포를 해야하며 규모가 커질수록 오래 걸린다.
- 일부 서비스가 폭주해도 서버 전체를 Scale Out 해야해서, 부분적인 Scale Out이 어렵다.
- 높은 결합도를 가진다.
Micro Service Architecture
- 애플리케이션을 상호 독립적인 최소 구성 요소로 분할
- 하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처
장점
- 각 서비스에 맞는 기술, 언어 등을 선택하여 개발할 수 있다.
- 일부 서비스의 장애가 전체로 퍼지지 않는다.
- 작은 애플리케이션으로 나뉘다보니 각 기능의 규모가 작아져서 이해 및 관리가 용이하다.
- 위 이유로, 코드량이 적기 때문에 새로운 개발자도 코드를 빨리 이해하여 개발 속도가 빠르다.
- 독립적인 서비스로 배포가 빠르고 전체 서비스를 중단하지 않아도 된다.
- 부분적인 Scale Out이 가능하여 메모리 및 CPU 관리에 효율적이다.
단점
- 분산 시스템 개발은 일반 개발보다 복잡하고 관리가 어렵다.
- 각 서비스의 테스트는 쉽지만 연결된 다른 서비스 간의 테스트가 어렵다.
- 서비스마다 분리된 DB들 간의 트랜잭션 관리가 어렵다.
- 서비스간 네트워크 통신으로 인한 제약, 비용, 오류 및 지연이 발생할 수 있다.
- 여러 서비스에 걸친 기능을 배포할 때 각 서비스간 조율이 필요하다.
참고자료
'CS > 기타' 카테고리의 다른 글
GraphQL 이란 ? (0) | 2022.07.05 |
---|---|
바이트코드와 기계어 (0) | 2022.05.17 |
CS 관련 Github repo 정리 (0) | 2022.03.30 |
Web Server와 WAS (0) | 2022.03.26 |
객체 지향 설계 5대 원칙 (SOLID) (0) | 2022.02.15 |