9. 마이크로서비스 아키텍처 기초
9.1. 마이크로서비스 아키텍처 소개
마이크로서비스 아키텍처는 소프트웨어 시스템을 작고 독립적인 서비스로 분리하여 개발, 배포, 운영하는 방식입니다. 이렇게 분리된 서비스는 각각 독립적인 프로세스에서 실행되며, 각 서비스는 독립적으로 확장이 가능합니다. REST, gRPC 등의 통신 방식을 통해 서로 소통합니다. 이러한 아키텍처의 주요 장점은 서비스 간의 결합도를 낮추고, 확장성과 유지보수성을 높여줍니다. 스프링 부트와 스프링 클라우드를 사용하면 마이크로서비스 아키텍처를 쉽게 구현할 수 있도록 도와줍니다.
9.2. 서비스 디스커버리와 로드 밸런싱
서비스 디스커버리는 마이크로서비스 간의 통신을 위해 서비스를 찾아주는 기능입니다. 일반적으로 서비스 레지스트리라는 중앙 저장소를 사용하여 서비스를 등록하고 조회합니다. 스프링 클라우드에서는 Eureka, Consul, Zookeeper 등의 서비스 레지스트리를 사용할 수 있습니다.
// Eureka 서비스 레지스트리 예제
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
로드 밸런싱은 여러 서버에 요청을 균등하게 분배하여 전체 시스템의 가용성과 성능을 향상하는 것입니다. 스프링 클라우드에서는 Ribbon을 사용하여 클라이언트 측 로드 밸런싱을 구현할 수 있습니다.
// Ribbon 로드 밸런서 예제
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
9.3. API 게이트웨이 사용
API 게이트웨이는 마이크로서비스의 진입점 역할을 하는 서비스로, 클라이언트 요청을 적절한 마이크로서비스로 전달합니다. 게이트웨이는 클라이언트와 마이크로서비스 사이에서 인증, 인가, 로깅, 캐싱 등의 기능을 처리할 수 있습니다. 스프링 클라우드에서는 Zuul 및 Spring Cloud Gateway를 사용하여 API 게이트웨이를 구현할 수 있습니다.
예제: Spring Cloud Gateway를 사용한 API 게이트웨이 구현
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route("service1", r -> r.path("/service1/**")
.filters(f -> f.addRequestHeader("X-Request-Source", "Gateway"))
.uri("http://localhost:8081"))
.route("service2", r -> r.path("/service2/**").uri("http://localhost:8082"))
.build();
}
}
이 예제에서는 스프링 클라우드 게이트웨이를 사용하여 간단한 API 게이트웨이를 구현합니다. GatewayApplication 클래스는 @SpringBootApplication 어노테이션을 사용하여 스프링 부트 애플리케이션임을 나타냅니다. myRoutes 메서드는 빌더를 사용하여 API 게이트웨이의 라우팅 규칙을 정의합니다.
라우팅 규칙은 다음과 같습니다:
- /service1/** 경로로 들어오는 요청은 X-Request-Source 헤더를 추가하고, http://localhost:8081로 전달됩니다.
- /service2/** 경로로 들어오는 요청은 http://localhost:8082로 전달됩니다.
이 예제에서는 간단한 라우팅 규칙을 사용하고 있지만, 필요한 경우 더 복잡한 라우팅 규칙과 필터를 적용할 수 있습니다.
이렇게 마이크로서비스 아키텍처를 구성할 수 있는 스프링 부트와 스프링 클라우드 기반의 도구와 기술을 학습하며, 마이크로서비스 아키텍처에 대한 이해를 높이고 실용적인 경험을 쌓을 수 있습니다.
2023.05.05 - [프로그래밍/스프링부트(Spring Boot) 기초부터 ~] - [스프링 부트(SpringBoot) : 중급] 성능 최적화 및 모니터링 도구
'GD's IT Lectures : 기초부터 시리즈 > 스프링부트(Spring Boot) 기초부터 ~' 카테고리의 다른 글
[스프링 부트(SpringBoot) : 고급] 클라우드 네이티브 애플리케이션 개발 (0) | 2023.05.06 |
---|---|
[스프링 부트(SpringBoot) : 중급] 중급 실전 예제 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 성능 최적화 및 모니터링 도구 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 클라우드 환경에서의 배포 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 테스트 전략 및 심화 (0) | 2023.05.05 |
댓글