"하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐"라고 부를 수 있다.
시스템 전체의 중단 없이 필요한 부분만 업데이트·배포가 가능하고 유연한 대응이 가능해 실시간으로 요구사항을 반영할 수 있어 넷플릭스와 테슬라 등 유명 테크 기업들이 사용하고 있다.
- 아키텍처 : "서비스의 동작 원리를 나타내는 것"이라고 볼 수 있다.

Monolithic Architecture는 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태다.
웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말한다.
이런 어플리케이션을 모놀리식 어플리케이션이라 하며, 웹의 경우 WAR파일로 빌드되어 WAS에 배포하는 형태를 말한다.
아직까지는 많은 소프트웨어가 Monolithic 형태로 구현되어 있고, 소규모 프로젝트에는 Monolithic Architecture가 간단한 아키텍쳐이고 유지보수가 용이하기 때문에 훨씬 합리적이다.
- Monolithic Architecture 한계
- 개발자의 잘못된 코드 배포 또는 갑작스런 트래픽 증가로 인해 성능에 문제가 생겼을 때, 서비스 전체의 장애로 확대될 수 있다.
- 서비스의 변경이 어렵고, 수정 시 장애의 영향도 파악이 힘들다.
- 배포 시간이 오래 걸린다.
- 한 Framework와 언어에 종속적이다.
이러한 Monolithic Architecture의 문제점들을 보완하기 위해 MSA가 등장하게 되었다.
- 서비스 간에 네트워크를 넘나드는 통신을 하게 된다.
- 도메인 중심으로 설계된다.
- 서비스별 최적화된 기술을 독립적으로 사용 가능하다.
- 서비스 크기는 작아지고, 독자적 개발이 가능하고, 독립 배포 가능하고, 배포 자동화도 가능하다.
- 장점
- MSA는 각각 개별의 서비스 개발을 빠르게 하며, 유지보수도 쉽게할 수 있도록 한다.
- 장애가 전체 서비스로 확장될 가능성이 적다.
- 마이크로서비스는 서비스별로 독립적 배포가 가능하다. 배포 시 전체 서비스의 중단 없이 요구사항을 신속하게 반영하여 빠르게 배포할 수 있다.
- 마이크로서비스는 각각 서비스의 부하에 따라 개별적으로 scale-out이 가능하다. 메모리, CPU적으로 상당부분 이득이 된다.
- 참고) scale-out이란
기존의 서버와 같은 사양 또는 비슷한 사양의 서버 대수를 증가시키는 방법으로 처리 능력을 향샹시키는 것을 말한다.
스케일 아웃 방식을 "수평 스케일"이라고 부르기도 한다.
서버가 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 ‘로드밸런싱’이 필수적으로 동반되어야 한다.
(로드 밸런싱: 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리한다.)
- 단점
- MSA는 보다 복잡한 아키텍쳐로, 전체 서비스가 커짐에 따라 그 복잡도가 기하급수적으로 늘어날 수 있다.
- 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, Latency가 그만큼 늘어나게 된다.
- 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원을 필요로 한다.
- 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한 번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어렵다.
🙇 참고 사이트 🙇
https://www.opsnow.com/%EC%9A%94%EC%A6%98-%EB%8C%80%EC%84%B8-msa/ https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-MSA%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3sk28yrv0e https://wooaoe.tistory.com/57 https://suzyalrahala.tistory.com/49 https://junghyungil.tistory.com/151