MSA 란?
- 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일
- 각 서비스는 특정 비즈니스 기능을 수행하며, 서로 독립적으로 배포되고 확장될 수 있음
- 서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐 등을 통해 이루어짐
주요 특징
- 독립적인 배포 가능성 : 다른 서비스에 영향을 주지 않고 업데이트 가능
- 기술 스택의 다양성 : 각 서비스는 다른 기술 스택으로 구성 가능
모놀리식 & MSA
Monolithic Architecture
- 위와 같이 모든 서비스가 하나의 어플리케이션 안에 존재함
- 장점:
- 간단한 배포
- 단일 데이터베이스: 하나의 데이터베이스를 사용하여 데이터 일관성을 쉽게 유지할 수 있음
- 단점:
- 확장성 부족
- 긴 개발 주기: 작은 변경 사항도 전체 애플리케이션을 다시 배포해야함
- 유연성 부족: 새로운 기술 도입이 어렵고, 특정 모듈에 종속적임
MicroService Architecture
- 여러 개의 독립적인 서비스로 구성된 애플리케이션
- 장점:
- 확장성: 특정 서비스만 확장하여 성능을 최적화할 수 있음
- 독립적 배포: 개별 서비스의 변경 사항을 독립적으로 배포할 수 있음
- 유연성: 서비스별로 적합한 기술 스택을 선택할 수 있음
- 단점:
- 복잡성 증가: 서비스 간 통신, 데이터 일관성 유지 등의 복잡성이 증가
- 운영비용 증가: 각 서비스의 모니터링, 로깅 등을 개별적으로 관리해야 함
빠르게 개발이 필요한 신규 프로젝트에서는 MSA 보다 모놀리식 아키텍쳐를 적용, 개발하는 것이 더 효율적일 수 있다. 서비스 concept 에 맞는 아키텍쳐를 고민하는 것이 필요함
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
Spring cloud 의 주요 기능들을 전반적으로 나타내 본 그림
- Eureka 나 Ribbon, 서킷브레이커인 Resilience4j 등이 MSA 를 구성하는 데 있어 필수적인 요소이다.
- Spring Gateway 또한 MSA 에서는 필수적인 역할을 한다.
- 루팅 및 필터링: 요청을 받아 특정 서비스로 라우팅하고 필요한 인증 및 권한 부여를 수행
- 특히 Auth Check Filter 등을 구성하여 각 서비스를 호출 하기 전에 권한 요소를 확인 할 수 있다.
- 보안: 외부 요청으로부터 애플리케이션을 보호하고, 보안 정책을 적용함
- 효율성: 마이크로서비스 아키텍처에서 필요한 요청 처리 및 분산 환경의 관리를 효율적으로 수행
앞으로 실제 프로젝트를 구성하며 Spring Cloud 의 기능을 하나씩 살펴보자.
TIL 너무 잘 작성해주셨군요! 앞으로도 꾸준히 작성해보아요~!