본문으로 바로가기

Spring Cloud Gateway 기본 활용법

category Back-End/Spring framework 2021. 8. 9. 23:44
반응형

0. Spring Cloud Gateway 란?

Netflix OSS의 API Gateway 컴포넌트인 Zuul을 Spring 진영에서 직접 만든 API Gateway 입니다.
Zuul은 기본적으로 블록킹 방식으로 동작했었는데요. (Zuul 1.x) 이를 개선하기 위해 Zuul 2.x에서 논블록킹 방식을 도입했습니다.

Spring 진영에서는 Zuul의 동기방식이었던 단점을 보완하며 Spring 생태계에 더 적합한 형태의 비동기 API Gateway를 만든것이 바로 Spring Cloud Gateway 입니다.

This project provides an API Gateway built on top of the Spring Ecosystem, including: Spring 5, Spring Boot 2 and Project Reactor. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.
  • Spring Boot 2.4.x 이상부터 Zuul을 사용할 수 없습니다.
  • spring-webmvc 위에서 동작하던 Zuul과 달리 Spring Cloud Gateway는 spring-webflux + Reactor 기반으로 동작합니다.
    • 때문에 spring-webmvc, spring-data, spring-security 등 동기방식 기반 프로젝트들과 함께 실행하면 문제가 발생할 수 있습니다.

1. Spring Cloud Gateway 의존성 추가

  • build.gradle
plugins {
  id 'org.springframework.boot' version '2.5.2'
  id 'io.spring.dependency-management' version '1.0.11.RELEASE'
  id 'java'
}
group = 'com.sample.project'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
    mavenCentral()
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:2020.0.3"
    }
}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

2. 라우팅 설정 추가

  • application.yml
  • 기본적으로 라우팅 정보, 라우팅 대상 지정 (predicates), 라우팅 시 동작 추가 (filters)를 할 수 있습니다.
  • 아래 설정은 게이트웨이로 들어오는 요청을 아래와 같이 처리합니다.
    • `/api/monitoring` 로 시작하는 요청만을 대상으로 하며
    • Path를 `/api/monitoring/*` => `/monitor/*`로 변경하여
    • uri에 설정된 서버로 라우팅

spring:
  cloud:
    gateway:
      routes:
        - id: 서비스 아이디
          uri: 라우팅할 서비스 URI
          predicates:
            - Path=/api/monitoring/**
          filters:
            - RewritePath=/api/monitoring, /monitor
반응형