현대 마이크로서비스 아키텍처에서는 API 게이트웨이가 필수적입니다. 여러 서비스에 대한 단일 진입점을 제공하여 라우팅, 보안, 속도 제한, 로드 밸런싱 등을 관리할 수 있습니다. 이 글에서는 Spring Cloud Gateway를 사용하여 기본 API 게이트웨이를 설정하고 경로를 기반으로 다양한 엔드포인트로 요청을 전달하는 방법을 살펴보겠습니다. 또한 필터를 사용하여 경로를 동적으로 조작하는 방법도 보여드리겠습니다.
코드를 살펴보겠습니다!
따라가려면 다음이 필요합니다.
새 Spring Boot 프로젝트를 생성하고 Spring Cloud Gateway 종속성을 포함합니다. 종속 항목에서 Spring Boot 및 Reactive Spring Cloud Gateway를 선택하고 Spring 초기화에서 새 프로젝트를 설정하면 이 작업을 쉽게 수행할 수 있습니다.
pom.xml 스니펫은 다음과 같습니다.
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-stub-runner</artifactId> <scope>test</scope> </dependency> </dependencies>
세 가지 다른 경로에 대한 요청을 처리하도록 게이트웨이를 구성해 보겠습니다.
"우리는 REST 국가 API를 사용하여 우리 아키텍처에 있는 다른 마이크로서비스를 시뮬레이션할 것입니다."
애플리케이션 메인 파일 근처에 router라는 폴더를 만들었습니다. 그 안에 Routes.java라는 파일을 생성하여 경로를 정의하고, 각 경로를 구성하고, 동적으로 직접 요청에 필터를 적용합니다.
package dev.mspilari.api_gateway.router; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Routes { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route("country_route", p -> p .path("/get/country/{name}") .filters(f -> f.setPath("/v3.1/name/{name}")) .uri("https://restcountries.com")) .route("language_route", p -> p .path("/get/language/{name}") .filters(f -> f.setPath("/v3.1/lang/{name}")) .uri("https://restcountries.com")) .route("subregion_route", p -> p .path("/get/subregion/{name}") .filters(f -> f.setPath("/v3.1/subregion/{name}")) .uri("https://restcountries.com")) .build(); } }
경로 정의: 경로를 정의하는 람다와 식별자(예: country_route)를 사용하는 경로 메서드를 사용하여 각 경로를 정의합니다.
경로 일치: .path("/get/country/{name}")는 수신 URL 패턴을 일치시키는 데 사용됩니다. {name}은 "브라질"과 같은 국가 이름과 같이 어떤 값으로든 동적으로 대체될 수 있는 변수입니다.
필터: SetPath를 사용하여 나가는 요청 경로를 수정합니다. 예를 들어, .setPath("/v3.1/name/{name}")는 /get/country/{name}을 REST Countries API에 필요한 엔드포인트인 /v3.1/name/{name}으로 다시 작성합니다.
URI: 기본 URL 역할을 하는 https://restcountries.com으로 uri를 설정합니다. Spring Cloud Gateway는 수정된 경로를 이 URI로 보냅니다.
Spring Boot 애플리케이션을 시작합니다. 이제 게이트웨이에 요청을 하면 올바른 엔드포인트로 전달됩니다.
경로를 테스트하려면 터미널에서 다음 명령을 사용해 보세요.
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-stub-runner</artifactId> <scope>test</scope> </dependency> </dependencies>
각 요청은 경로와 매개변수를 기반으로 게이트웨이에 의해 해당 REST 국가 API 엔드포인트로 라우팅됩니다.
모든 것이 올바르게 구성되면 REST Countries API를 직접 호출하여 얻은 응답과 일치하는 응답이 표시됩니다.
예:
package dev.mspilari.api_gateway.router; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Routes { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route("country_route", p -> p .path("/get/country/{name}") .filters(f -> f.setPath("/v3.1/name/{name}")) .uri("https://restcountries.com")) .route("language_route", p -> p .path("/get/language/{name}") .filters(f -> f.setPath("/v3.1/lang/{name}")) .uri("https://restcountries.com")) .route("subregion_route", p -> p .path("/get/subregion/{name}") .filters(f -> f.setPath("/v3.1/subregion/{name}")) .uri("https://restcountries.com")) .build(); } }
이 설정에서는 Spring Cloud Gateway를 사용한 라우팅의 기본 사항을 다룹니다. 다음 게시물에서는 다음과 같은 추가 기능을 살펴보겠습니다.
위 내용은 Spring Cloud Gateway를 사용하여 간단한 API 게이트웨이 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!