>Java >java지도 시간 >Spring Cloud Gateway를 사용하여 간단한 API 게이트웨이 구축

Spring Cloud Gateway를 사용하여 간단한 API 게이트웨이 구축

Patricia Arquette
Patricia Arquette원래의
2024-11-03 12:14:02543검색

현대 마이크로서비스 아키텍처에서는 API 게이트웨이가 필수적입니다. 여러 서비스에 대한 단일 진입점을 제공하여 라우팅, 보안, 속도 제한, 로드 밸런싱 등을 관리할 수 있습니다. 이 글에서는 Spring Cloud Gateway를 사용하여 기본 API 게이트웨이를 설정하고 경로를 기반으로 다양한 엔드포인트로 요청을 전달하는 방법을 살펴보겠습니다. 또한 필터를 사용하여 경로를 동적으로 조작하는 방법도 보여드리겠습니다.

코드를 살펴보겠습니다!

Building a Simple API Gateway with Spring Cloud Gateway

안돼!!

전제 조건

따라가려면 다음이 필요합니다.

  • Java 11 이상
  • Spring Boot (3.0 이상 권장)
  • Reactive Spring Cloud 게이트웨이

프로젝트 설정

새 Spring Boot 프로젝트를 생성하고 Spring Cloud Gateway 종속성을 포함합니다. 종속 항목에서 Spring BootReactive 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>

API 게이트웨이 구축

세 가지 다른 경로에 대한 요청을 처리하도록 게이트웨이를 구성해 보겠습니다.

  1. /get/country/{name} – 국가에 대한 세부정보를 가져옵니다.
  2. /get/언어/{name} – 언어를 기반으로 정보를 가져옵니다.
  3. /get/subregion/{name} – 특정 소지역에 대한 데이터를 검색합니다.

"우리는 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 사용의 이점

  1. 단일 진입점: 모든 요청이 게이트웨이를 통과하므로 클라이언트 상호 작용 및 API 관리가 단순화됩니다.
  2. 유연한 라우팅: 경로 매개변수와 필터를 사용하여 경로를 쉽게 사용자 정의할 수 있습니다.
  3. 동적 경로 재작성: 게이트웨이를 사용하면 요청 경로를 동적으로 조정할 수 있으므로 클라이언트측 코드를 변경하지 않고도 외부 API와 쉽게 통합할 수 있습니다.

다음 단계

이 설정에서는 Spring Cloud Gateway를 사용한 라우팅의 기본 사항을 다룹니다. 다음 게시물에서는 다음과 같은 추가 기능을 살펴보겠습니다.

  • 인증 및 승인 – OAuth 또는 JWT와 통합하여 경로를 보호합니다.
  • 속도 제한 및 회로 차단기 – 내장 필터로 탄력성을 추가하세요.
  • 로드 밸런싱 – 성능 향상을 위해 요청을 여러 인스턴스에 분산합니다.
  • 로깅 및 관찰 가능성 – 분산 추적 및 중앙 집중식 로깅을 통해 애플리케이션 동작 및 성능에 대한 통찰력을 얻고 트래픽 패턴을 모니터링합니다.

? 참조

  • 스프링 클라우드 게이트웨이
  • 게이트웨이 구축

? 나에게 말을 걸어

  • 링크드인
  • 깃허브
  • 포트폴리오

위 내용은 Spring Cloud Gateway를 사용하여 간단한 API 게이트웨이 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.