MSA 개발 가이드 목차
- Spring Boot
- Spring Cloud
응용프로그램 개발 분야는 Spring 프레임워크의 유례없는 성장과 함께 더 간결하고 빠른 개발을 가능케 하는 패러다임의 변화를 경험했다.
Spring 프레임워크의 핵심인 의존성 주입(DI)과 관점 지향 프로그래밍(AOP) 기법은 응용 프로그램 개발의 새로운 표준으로 떠올랐다.
그럼에도 불구하고, Spring 프레임워크의 계속된 발전은 설정의 복잡성을 높였으며, 배포 측면에서는 크게 달라진 것이 없다.
특히, 응용 프로그램의 복잡성과 대화형 개발 및 배포 방식에 대한 근본적인 변화가 요구되고 있다.
이러한 문제를 해결하기 위해 마이크로서비스 아키텍처(MSA)가 도입되었다.
이 아키텍처는 독립적으로 작동하는 컴포넌트들로 대규모 시스템을 구축하며, Spring은 이러한 컴포넌트를 프로세스 수준에서 유연하게 결합하여 구성한다.
이 가이드는 다음 두 가지 주요 방식을 통해 효과적인 마이크로 서비스 개발과 운영을 지원한다:
- Spring Boot : 컴포넌트 수준의 마이크로 서비스 아키텍처를 통해 설정을 간소화하고 독립 서비스를 지원한다.
- Spring Cloud : 시스템 수준의 마이크로 서비스 아키텍처를 통해 컴포넌트 간의 효율적인 분산 서비스를 지원한다.
Spring Boot
스프링부트는 단독 실행되는, 실행하기만 하면 되는 상용화 가능한 수준의 스프링 기반 애플리케이션을 쉽게 만들어 낼 수 있다.
최소한의 설정으로 스프링 플랫폼과 third-party 라이브러리들을 사용할 수 있도록 하고 있다.
이는 보다 손 쉽게 설정을 구성하거나 개발 및 배포를 빠르게 지원할 수 있다. 또한, embedded 방식의 container를 사용하여 web server를 통한 배포가 아닌, 독립적으로 실행 가능한 웹 애플리케이션을 구성할 수 있다.
제공 기능으로는
- 단독 실행이 가능한 스프링 애플리케이션을 생성
- 내장형 Tomcat, Jetty 또는 Undertow를 지원한다.
- 기본으로 설정되어 있는 'starter' 컴포넌트들을 쉽게 환경 설정한다.
- 라이브러리 인식을 통한 자동 환경 구성 지원
- 상용화 수준의 통계(Metrics), 상태 점검(health check) 및 외부 설정을 제공한다.
- 설정을 위한 XML코드가 필요 없다.
Spring Boot starters
스타터는 응용 프로그램에 통합할 수 있는 편리한 종속성 관리 모음이다.
필요한 모든 Spring 및 연관된 기술을 복잡한 의존성 관리 과정 없이 한 번에 관리할 수 있다. 예시로, Spring과 JPA를 데이터베이스 액세스에 사용하려면 "spring-boot-starter-data-jpa" 프로젝트를 의존성에 추가하면 된다.
스타터는 프로젝트를 빠르게 시작하고 실행하는데 필요한 다양한 종속성을 포함하며, 이는 일관된 관리를 지원하는 종속성 모음을 제공한다.
Spring Cloud
Spring Cloud는 개발자가 분산 시스템 구성에 필요한 다양한 기능(설정 관리 및 공유, 서비스 등록 및 관리, 서비스 요청 라우팅 등)을 제공한다.
분산 시스템을 구성하기 위한 복잡한 설정 및 서비스들을 효율적이고 신속하게 구현할 수 있도록 지원한다.
제공 기능으로는 아래와 같다.
- 분산 및 버전으로 구분된 설정 관리
- 서비스 등록 및 조회
- 라우팅 및 상태 체크
- 서비스 대 서비스 호출
- 서비스 분산 로딩
- 서비스 간 호출 분리
- 클러스터링 환경 관리
- 분산 메시징
서비스 | 설명 | 컴포넌트 |
Config 서비스 | 별도의 통합된 설정 관리 서비스 제공을 통해 환경 독립적 서비스 제공 | Spring Config |
Service Discovery 서비스 | 서비스에 대한 물리적 위치 정보 대신 논리적 서비스 | Eureka(Spring Cloud Netflix) |
Event Bus 서비스 | 분산 메시징 지원을 위한 서비스 연계 지원 | Spring Cloud Bus(AMQP & RabbitMQ) |
Circuit Breaker 서비스 | 서비스 간 호출 시, 문제가 있는 서비스에 대한 차단 지원 서비스 | Hysterix(Spring Cloud Netflix) |
Client Load Balancing | 서비스 호출 시에 분산 형태로 호출할 수 있는 client 적용 서비스 library | Ribbon(Spring Cloud Netflix) |
Service Router 서비스 | 서비스 호출 시, routing을 통해 실제 서비스에 위치 제공 | Zuul(Spring Cloud Netflix) |
API-Gateway 서비스 | Microservice에 대한 API 관리 및 모니터링 서비스 | Zuul(Spring Cloud Netflix) |
Cluster 서비스 | Service level의 Cluster를 지원하기 위한 서비스 제공 | Spring Cloud Cluster |
Security 서비스 | Load balanced 환경에서의 OAuth2 인증 지원 서비스 | Spring Cloud Security |
Polyglot 지원 서비스 | non-JVM 프로그래밍 언어 지원을 위한 서비스 | Spring Cloud Sidecar |
Kubernetes 지원 서비스 | Spring Cloud 애플리케이션을 위한 쿠버네티스 Discovery와 ConfigMaps 지원 서비스 | Spring Cloud Kubernetes |
'DEV > MSA' 카테고리의 다른 글
MSA 개발 가이드(4) - Resilience4j(Circuit Breaker) (0) | 2023.06.19 |
---|---|
MSA 개발 가이드(3) - 마이크로 서비스 아키텍처 구현해보기 (0) | 2023.06.16 |
MSA 개발 가이드(1) - MSA란 무엇인가 (0) | 2023.06.16 |
API Gateway의 이해 (0) | 2023.06.13 |
Kafka 용어 정리 (pub/sub, 토픽, 파티션, 브로커) (1) | 2023.05.12 |