[ MSA(마이크로서비스 아키텍처) ]
MSA는 여러 개의 작은 서비스로 구성되어 각 서비스가 독립적으로 개발되고 배포되는 구조
즉 하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐
▶ MSA의 등장배경
Monolithic Architecture는 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태
아직까지는 많은 소프트웨어가 Monolithic 형태로 구현되어 있음
소규모 프로젝트에는 Monolithic Architecture가 훨씬 합리적임 간단한 Architecture이고, 유지보수가 용이하기 때문
하지만 규모가 커지게 되면Monolithic Architecture 단점이 명확함
- 서비스/프로젝트가 커지면 커질수록, 영향도 파악 및 전체 시스템 구조의 파악에 어려움
- 빌드 시간 및 테스트시간, 그리고 배포시간이 기하급수적으로 늘어나게 됨
- 서비스를 부분적으로 scale-out하기가 힘듬
- 부분의 장애가 전체 서비스의 장애로 이어지는 경우가 발생하게 됨
▶ Micro service의 정의
- 각각의 서비스는 그 크기가 작을 뿐, 서비스 자체는 하나의 모놀리틱 아키텍쳐와 유사한 구조를 가짐
- 각각의 서비스는 독립적으로 배포가 가능해야함
- 각각의 서비스는 다른 서비스에 대한 의존성이 최소화 되어야함
- 각 서비스는 개별 프로세스로 구동 되며, REST와 같은 가벼운 방식으로 통신되어야 함
일반적으로 하나의 서비스는 하나의 기능이며, 하나의 프로젝트라고 볼 수 있지만, 비즈니스와 시스템의 실정에 맞게 서비스의 범위(크기)를 설정하는 것이 중요함
▶ MSA의 장단점
MSA의 장점
MSA는 비즈니스 민첩성(Business agility)과 관련이 큼
서비스나 프로젝트가 크고, 복잡하고, 장기적으로 운영될 수록, MSA의 장점이 더욱 드러나게 됨
MSA는 서비스가 커지면서 생겼던 Monolithic Architecture의 문제점들을 어느정도 보완해 줄 수 있음
- 배포(deployment) 관점
- 서비스 별 개별 배포 가능 ( 배포 시 전체 서비스의 중단이 없음)
- 요구사항을 신속하게 반영하여 빠르게 배포할 수 있음
- 확장(scaling) 관점
- 특정 서비스에 대한 확장성이 용이함.
- 클라우드 사용에 적합한 아키텍쳐
- 장애(failure) 관점
- 장애가 전체 서비스로 확장될 가능성이 적음
- 부분적 장애에 대한 격리가 수월함
이외에도, 신기술의 적용이 유연하고, 서비스를 polyglot(다양한 프로그래밍 언어와 기술을 사용하여 구축)하게 개발/운영 할 수 있다는 장점이 있음
MSA의 단점
Monolithic Architecture은 단순한 아키텍쳐인데 비해 MSA는 보다 복잡한 아키텍쳐로, 전체 서비스가 커짐에 따라 그 복잡도가 기하급수적으로 늘어날 수 있음
- 성능: 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, 대기시간이 그만큼 늘어나게 됨
- 테스트 / 트랜잭션: 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원을 필요로 함
- 데이터 관리: 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어려움
- 정합성: 어떤 데이터들이 값이 서로 일치함(데이터는 서로 모순 없이 일관되게 일치해야함
'CS > 프로그래밍' 카테고리의 다른 글
useLayoutEffect의 활용 (2) | 2024.04.02 |
---|---|
Zustand란 무엇인가? (0) | 2024.03.23 |
디자인 패턴 - 팩토리 패턴 / 전략 패턴 / 옵저버 패턴 (1) | 2024.03.22 |
SOLID 원칙 (2) | 2024.03.16 |
디자인 패턴 - 싱글톤 패턴 (3) | 2024.02.28 |