MSA 란?
MSA : Microservices Architecture
- MSA는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여
개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일- 하나의 애플리케이션(모놀리틱) -> 여러 개의 독립적인 서비스(MSA)
- 소프트웨어 아키텍처 스타일이기에 강제성이 없다.
- 강제성의 의미
- 모든 것을 서비스 또는 도메인 단위로 분리할 필요가 없다. -> 복잡성이 증가할 수 있음.
- 적당히 분리하자.
- 강제성의 의미
- 각 서비스는 특정 비즈니스 기능을 수행하며 독립적으로 배포 및 확장될 수 있다.
- 서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐 등을 통해 이루어진다.
- Feign Client -> HTTP/HTTPS
- Kafka, RabbitMQ -> 메시지 큐
특징
- 독립적인 배포
- 각 서비스는 독립적으로 배포할 수 있다. = 다른 서비스에 영향을 주지 않고 업데이트 가능하다.
- 작은 팀 구성
- 각 서비스는 작은 팀이 독립적으로 개발하고 관리할 수 있음
- 기술 스택의 다양성
- 각 서비스는 적절한 기술 스택을 자유롭게 선택할 수 있음. = 서비스 구현에 필요한 기술 스택을 자유롭게 선택할 수 있다.
모놀리틱 아키텍처 vs MSA 아키텍처
모놀리틱 아키텍처
정의
- 하나의 큰 코드베이스로 구성된 애플리케이션
- 모든 기능이 하나의 애플리케이션 내에 포함
장점
- 간단한 배포
- 모든 코드가 하나의 코드베이스에 포함되어 있어 배포가 단순
- 단일 데이터베이스
- 하나의 데이터베이스를 사용해 데이터 일관성을 쉽게 유지
- 초기 개발엔 빠르게 프로토타입을 랜딩하것과 같이 빠르게 개발을 할때는 모놀리틱을 채택
단점
- 확장성 부족
- 특정 기능을 확장하려면 전체 애플리케이션을 확장해야 함.
- 긴 개발 주기
- 작은 변경 사항도 전체 애플리케이션을 다시 배포해야 함.
- 애플리케이션이 커질 수록 배포시간도 길어짐
- 유연성 부족
- 새로운 기술 도입이 어렵고 특정 모듈에 종속적임
MSA 아키텍처
정의
- MSA는 여러 개의 독립적인 서비스로 구성된 애플리케이션
- 각 서비스는 특정 비즈니스 기능을 수행
장점
- 확장성
- 각 서비스는 독립적으로 확장 가능
- 특정 기능에 대한 성능 최적화에 용이
- 독립적 배포
- 개별 서비스의 변경 사항을 독립적으로 배포할 수 있음.
- 서비스별로 독립적 배포가 가능해 배포 주기를 단축
- 유연성
- 서비스별로 적합한 기술 스택을 선택할 수 있음.
- 작은 팀 구성
- 서비스의 크기가 커질 수록 개발 팀의 수가 많은 수록 팀을 작은 단위로 나누어 기능 단위별로 유지보수하기 좋다.
- 서비스별로 작은 팀으로 구성되어 민첩한 개발 가능
단점
- 복잡성 증가, 데이터 관리
- 서비스 간 통신, 데이터 일관성 유지, 트랜잭션 관리 등의 복잡성이 증가
- 하나의 기능이 수행될 때, 여러 서비스를 통해 수행될 경우 특정 서비스에서 실패한다면 다른 서비스에서도 작업을 취소해야함.
- ex) 주문 서비스에서 '상품 주문'을 할때, 누가 주문하는지 회원 서비스에서 확인하고 무엇을 주문하는지 상품 서비스에서 확인해야 한다.
그러나 '사용자가 없다면' 또는 '상품이 없다면'과 같이 실패 케이스에 대응 해야 함
- 여러 데이터베이스를 사용할수록 분산처리를 통해 데이터 일관성 유지하는 복잡성이 증가한다.
- 서비스 간 통신, 데이터 일관성 유지, 트랜잭션 관리 등의 복잡성이 증가
- 운영비용 증가
- 각 서비스의 모니터링, 로깅 등을 개별적으로 관리해야 함
- 분산처리된 요청들이 잘 시스템에 반영되는지 검토해야 함.
- 각 서비스 단위로 모니터링, 로깅을 점검해야 함 -> 모니터, 로깅할 서비스가 많음
- 각 서비스의 모니터링, 로깅 등을 개별적으로 관리해야 함
- 네트워크 지연
- 서비스 간의 통신이 주로 네트워크를 통해 이루어지므로 지연 시간이 발생할 수 있다.
- 주로 HTTP/HTTPS, 메시지 큐로 이루어짐.
반응형
'MSA (Micro Service Architecture)' 카테고리의 다른 글
[MSA] Resilience4j - Spring Cloud (서킷 브레이커) (0) | 2024.12.28 |
---|---|
[MSA] Hystrix - Spring Cloud (서킷 브레이커) (0) | 2024.12.28 |
[MSA] Ribbon - Spring Cloud (로드 밸런싱) (0) | 2024.12.28 |
[MSA] Eureka - Spring Cloud(서비스 등록 및 디스커버리) (2) | 2024.12.28 |
[MSA] Spring cloud (0) | 2024.12.28 |