[Eureka & Gateway] Gateway와 Eureka 연동

in_ho_·2023년 11월 7일
0
post-thumbnail

1. Predicate

  • 요청이 들어오면 Gateway Handler Mapping을 통해 어떤 요청이 들어왔는지 정보를 받고, 요청에 대한 조건을 분기해주는 곳이 Predicate입니다.

2. Filter

  • 디스패처 서블릿에 요청이 전달되기 전, 후에 URL 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있습니다.
  • 필터는 스프링 밖에서 처리됩니다.

2-1. Filter 적용 방법

  1. yaml 파일을 통한 정의
  2. Java Configuration

2-2. FilterConfig 설정 방법

@Configuration
public class FilterConfig {

    @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.path("/certification-service/**")
                        .filters(f -> f.addRequestHeader("certification-request", "certification-request-header")
                                .addResponseHeader("certification-response", "certification-response-header"))
                        .uri("http://localhost:2020"))
                .build();
    }
}
  • certification-service에 들어오는 요청, 응답의 Request, Response Header에 certification-request: certification-request-header, certification-response: certification-response-header라는 값을 추가합니다.

2-3. yaml 설정 방법

spring:
  main:
    web-application-type: reactive
  application:
    name: futur
  cloud:
    gateway:
      routes:
        - id: certification # 인증 서버
          uri: http://localhost:2020
          predicates:
            - Path=/certification/**
        - filters:
          - AddRequestHeader=certification-request, certification-request-header
          - AddResponseHeader=certification-response, certification-response-header
  • FilterConfig와 동일한 기능을 수행합니다.

3. Gateway와 Eureka 연동

  1. 클라이언트로부터 요청이 들어오면 Gateway는 Eureka 서버를 통해 엔드포인트의 실제 주소값을 반환 받습니다.
  2. 실제 주소 값으로 요청을 전달하고, 해당 응답을 클라이언트에게 전달합니다.
  • *여기서 유의해야 할 점은 Gateway 서버와 Eureka 서버는 서로 다르다는 것입니다.

3-1. yaml 설정

  • application.yaml 파일을 아래와 같이 수정합니다.
server:
  port: 2020

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
        - id: certification-service
          uri: lb://certification-service
          predicates:
            - Path=/certification/**
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka
  • Gateway 서버는 Eureka 서버의 클라이언트 중 하나로 설정되어야 한다.
  • 라우트를 설정할 때 uri를 직접 기재해야 하지만 Eureka 서버의 도움을 받을 경우 동적으로 매핑할 수 있다.

    Eureka Client 서버의 spring.application.name 값이 uri에 들어가야 한다.

  • Client는 2020 port로 요청을 보내면 서버에 도달할 수 있다.

4. 연결 확인

  • 연결하고자 하는 서버에 아래와 같이 코드를 추가합니다.
  • Postman으로 요청을 하면 정상적으로 리턴 받을 수 있는 것을 확인할 수 있습니다.

5. Spring Cloud Gateway와 Eureka 서버 연동하는 이유

  • Spring Cloud Gateway를 사용하면 로드 밸런싱 기능을 사용할 수 있습니다.

Load Balancing

  • 로드 밸런싱은 애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법입니다.

Reference

https://velog.io/@korea3611/Spring-Boot-Spring-Cloud-Gateway-Eureka-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0-MSA4

0개의 댓글