Spring Cloud Gateway (+Load Balancing)

개발자·2022년 4월 8일
0

MSA

목록 보기
2/7
post-custom-banner

각각의 MSA 서비스를 다른 포트 번호로 접속해야한다면 모든 서비스의 포트 번호를 기억해야 한다. Spring Cloud Gateway를 사용하면 Gateway의 포트 번호를 통해 다른 MSA 서비스들에 접근할 수 있다. 즉 Spring Cloud Gateway는 각 서비스들의 요청을 적절한 MSA 서비스에 라우팅해주는 역할을 한다.

처음엔 Spring Cloud Netflix Zuul을 사용했으나 Spring Boot 2.4.X 버전부터는 지원하지 않으므로 현재는 Spring Cloud Gateway 사용을 권장하고 있다.


구성

  • Route
    응답을 보낼 목적지 URI, Predicate, Filter로 구성된다. Client로 부터 어떤 요청이 왔는지 확인하고 서버에 Mapping하는 작업을 수행한다.

  • Predicate
    Handler Mapping시에 필요한 URI나, Path를 확인한다.

  • Filter
    Handler Mapping이 된 후 들어온 요청에 대한 필터 작업을 수행한다.



구현

Spring Boot 프로젝트 생성

Spring Boot 프로젝트를 생성해준다. 이 때 Dependency로 Eureka Discovery Client와 Gateway를 추가해준다.

application.yml 설정

server:
  port: 8130

eureka:
  instance:
    prefer-ip-address: true #서비스의 ip 주소를 Eureka Server에 등록
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka #Eureka Server
      
spring:
  application:
    name: gateway-service #Eureka Server에 등록할 Application 이름 지정
  cloud:
    gateway:
      routes: #라우팅 정보 등록
        - id: catalog
          uri: http://localhost:8031/
          predicates:
            - Path=/catalogs/**
        - id: customer
          uri: http://localhost:8032/
          predicates:
            - Path=/customers/**

spring.cloud.gateway.routes에 등록할 서비스들의 정보를 입력해준다. 서비스의 predicate와 filter를 지정해줄 수 있다.
(해당 서비스들은 Eureka Server에 등록되어 있어야 한다.)



결과


Gateway port 번호인 8130으로 customer 서비스를 호출했을 때와 customer 서비스의 port 번호인 8032로 호출했을 때 같은 결과를 확인할 수 있다.

+ Load Balancing 설정

서비스별 uri를 lb://{SpringBoot Application 이름} 으로 변경해주면 로드밸런싱이 적용된다.

spring:
  application:
    name: gateway-service #Eureka Server에 등록할 Application 이름 지정
  cloud:
    gateway:
      routes: #라우팅 정보 등록
        - id: catalog
          uri: lb://catalog
          predicates:
            - Path=/catalogs/**
        - id: customer
          uri: lb://customer
          predicates:
            - Path=/customers/**


Ref.

https://velog.io/@ililil9482/Spring-Cloud-Gateway
https://wonit.tistory.com/497
https://spring.io/projects/spring-cloud-gateway

profile
log.info("공부 기록 블로9")
post-custom-banner

0개의 댓글