MSA 간단 정의
- Microservices Architecture (MSA)
- MSA는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일
- 각 서비스는 특정 비즈니스 기능을 수행하며, 서로 독립적으로 배포되고 확장될 수 있음
- 서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐 등을 통해 이루어짐
- 주요 특징
- 독립적인 배포 가능성: 각 서비스는 독립적으로 배포할 수 있으며, 다른 서비스에 영향을 주지 않고 업데이트할 수 있음
- 작은 팀 구성: 각 서비스는 작은 팀이 독립적으로 개발하고 관리할 수 있음
- 기술 스택의 다양성: 각 서비스는 적절한 기술 스택을 자유롭게 선택할 수 있음
모놀리틱 아키텍처와 비교했을 때
- 모놀리틱 아키텍처
- 정의:
- 모놀리틱 아키텍처는 하나의 큰 코드베이스로 구성된 애플리케이션
- 모든 기능이 하나의 애플리케이션 내에 포함
- 장점:
- 간단한 배포: 모든 코드가 하나의 코드베이스에 포함되어 있어 배포가 단순
- 단일 데이터베이스: 하나의 데이터베이스를 사용하여 데이터 일관성을 쉽게 유지할 수 있음
- 단점:
- 확장성 부족: 특정 기능을 확장하려면 전체 애플리케이션을 확장해야함
- 긴 개발 주기: 작은 변경 사항도 전체 애플리케이션을 다시 배포해야함
- 유연성 부족: 새로운 기술 도입이 어렵고, 특정 모듈에 종속적임
- MSA
- 장점
- 확장성: 각 서비스는 독립적으로 확장 가능, 특정 기능에 대한 성능 최적화가 용이
- 유연성: 다양한 기술 스택을 사용하여 서비스별 최적화 가능
- 독립적 배포: 서비스별로 독립적 배포가 가능하여 배포 주기를 단축
- 작은 팀 구성: 서비스별 작은 팀으로 구성되어 민첩한 개발 가능
- 단점
- 복잡성: 서비스 간 통신, 데이터 일관성 유지, 트랜잭션 관리 등의 복잡성이 증가
- 운영비용: 각 서비스의 모니터링, 로깅, 장애 대응 등을 개별적으로 관리해야 하므로 운영 비용이 증가
- 데이터 관리: 분산된 데이터베이스로 인해 데이터 일관성 유지가 어려울 수 있음
- 네트워크 지연: 서비스 간의 통신이 네트워크를 통해 이루어지므로 지연 시간이 발생할 수 있음
Spring Cloud
- 정의
- Spring Cloud는 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장
- 마이크로서비스 아키텍처를 쉽게 구현하고 운영할 수 있도록 도움
- 주요 기능 (여러 툴이 존재하지만, 제공하는 것은 비슷하기에 하나만 제대로 알아놓고 응용)
- 서비스 등록 및 디스커버리: Eureka, Consul, Zookeeper
- 로드 밸런싱: Ribbon, Spring Cloud LoadBalancer
- 서킷 브레이커: Hystrix, Resilience4j
- API 게이트웨이: Zuul, Spring Cloud Gateway
- 구성 관리: Spring Cloud Config
- 분산 추적: Spring Cloud Sleuth, Zipkin
- 메시징: Spring Cloud Stream
간단한게 잘 정리해 주셨네요~