Spring Cloud - 2. Spring Cloud Gateway 사용하기

참고

Spring Cloud Gateway

당연히 가능합니다! Spring Cloud Gateway는 스프링 생태계에서 제공하는 도구 중 하나로, 마이크로서비스 아키텍처를 구축하기 위해 사용됩니다. Spring Cloud Gateway는 API 게이트웨이로 작동하여 클라이언트와 백엔드 서비스 사이의 통신을 관리하고 보안, 로드 밸런싱, 라우팅, 필터링 등의 기능을 제공합니다.

Spring Cloud Gateway의 핵심 개념은 라우트(Routes)와 필터(Filters)입니다. 라우트는 클라이언트 요청을 수신하고, 해당 요청을 백엔드 서비스로 전달하는 방법을 정의하는데 사용됩니다. 각 라우트는 요청을 받을 수 있는 경로, 요청을 보낼 수 있는 대상 URI, 필요한 필터 등을 포함하고 있습니다. 이를 통해 요청의 동적인 라우팅과 로드 밸런싱을 구현할 수 있습니다.

또한, 필터는 요청과 응답에 대한 전처리와 후처리 작업을 수행하기 위해 사용됩니다. 예를 들어, 인증, 로깅, 헤더 조작 등의 작업을 필터를 통해 처리할 수 있습니다. 필터는 전역 필터(Global Filters)와 라우트별 필터(Route Filters)로 구분될 수 있으며, 필터 체인을 통해 여러 필터를 조합하여 사용할 수 있습니다.

Spring Cloud Gateway는 Netty 서버를 기반으로 동작하며, 비동기적이고 넌블로킹 방식으로 요청을 처리합니다. 이를 통해 높은 성능과 확장성을 제공합니다. 또한, Spring Cloud Gateway는 다양한 기능과 확장 포인트를 제공하여 개발자가 필요에 맞게 사용할 수 있습니다.

요약하자면, Spring Cloud Gateway는 스프링 기반의 API 게이트웨이로서 마이크로서비스 아키텍처에서 클라이언트와 서비스 사이의 통신을 관리하고 보안, 로드 밸런싱, 라우팅, 필터링 등의 기능을 제공합니다.

Spring Cloud Gateway 의존성 추가

implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

Gateway 설정하기

  • spring.cloud.gateway.routes.id
  • spring.cloud.gateway.routes.uri
  • spring.cloud.gateway.routes.predicates

application.yml

server:
port: 8080

eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka

spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**

- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**

First Service

server:
port: 8081
spring:
application:
name: my-first-service

eureka:
client:
fetch-registry: false
register-with-eureka: false
@RestController
@RequestMapping("first-service")
public class FirstServiceController {

@GetMapping("/welcome")
public String welcome(){
return "Welcome to the First Service";
}
}

Second Service

server:
port: 8082
spring:
application:
name: my-first-service

eureka:
client:
fetch-registry: false
register-with-eureka: false
@RestController
@RequestMapping("second-service")
public class SecondServiceController {

@GetMapping("/welcome")
public String welcome(){
return "Welcome to the Second service";
}
}
Share