ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 클라우드 게이트웨이(SCG)
    스프링/스프링 클라우드 MSA 2024. 8. 5. 15:38

    Spring Cloud Gateway

    스프링 클라우드 MSA 환경에서 가장 앞단에 존재하며 클라이언트로부터 요청을 받고 적절하게 서버에 보내준다.

    가장 앞단에서 항상 무중지 상태로 모든 요청을 받기에 잘 신경써야 한다.

    스프링 부트 어플리케이션, Eureka Server, Config와 같은 서비스는 블로킹 기반으로 톰캣 엔진을 통한 로직을 수행했지만, Gateway는 비즈니스 로직을 처리하기 보다는 단순하게 거쳐가는 라우팅 역할을 하기 때문에 논 블로킹 방식으로 구성되며 WebFlux와 Netty를 사용한다.

     

    WebFlux는 기존 스프링 부트에서 사용하는 JPA와 같은 블로킹 방식의 의존성을 모두 사용하지 못한다.

     

     

    필수 의존성 - Spring Cloud Routing의 Gateway

    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-webflux'
    	implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    	testImplementation 'io.projectreactor:reactor-test' // WebFlux 테스트에 필요
    }

    gradle의 의존성은 다음과 같다.

     

     

    SCG의 라우팅 방법

    1. application.properties 설정
    2. application.yml 설정
    3. Config 클래스 설정

     

    client를 MS1, MS2로 각각 8081 포트, 8082 포트로 설정한 다음에 8081/ms1/first, 8082/ms2/second 경로를 설정해두었다. 이제 8081, 8082 포트가 아니라 8080 포트로 접근해도 알아서 라우팅해주는 gateway를 만들 것이다.

     

     

     

    1. SCG - application.properties

    server.port=8080
    
    # 라우팅은 index로 0번부터 지정
    spring.cloud.gateway.routes[0].id=ms1 # 이름
    spring.cloud.gateway.routes[0].predicates[0].name=Path # Path 방식
    spring.cloud.gateway.routes[0].predicates[0].args.pattern=/ms1/** # 경로
    spring.cloud.gateway.routes[0].uri=http://localhost:8081 # 해당하는 포트
    
    spring.cloud.gateway.routes[1].id=ms2
    spring.cloud.gateway.routes[1].predicates[0].name=Path
    spring.cloud.gateway.routes[1].predicates[0].args.pattern=/ms2/**
    spring.cloud.gateway.routes[1].uri=http://localhost:8082

    SCG의 application.properties의 port를 8080으로 지정하고, 아래에 spring.cloud.gateway.routes를 이용해서 하나는 8081 포트로, 하나는 8082 포트로 PATH를 진행한다.

     

    8080 포트는 gateway로서의 설정만 했음에도, 8080/ms1/first, 8080/ms2/second로 요청을 보내면 404 Not Found가 아니라 응답을 한다. 이로 인해 8081 포트와 8082 포트로 라우팅을 한다는 것을 확인할 수 있다.

     

     

     

    2. SCG - application.yml

    server:
      port: 8080
    
    spring:
      cloud:
        gateway:
          routes:
            - id: ms1
              uri: http://localhost:8081
              predicates:
                - Path=/ms1/**
            - id: ms2
              uri: http://localhost:8082
              predicates:
                - Path=/ms2/**

    application.yml은 다음과 같이 설정하면 된다.

     

     

     

    3. Config 클래스 설정

    우선 application.properties나 application.yml 파일에서 포트 번호를 제외하고 나머지는 삭제한다.

    @Configuration
    public class CustomRoute {
    
        @Bean
        public RouteLocator ms1Route(RouteLocatorBuilder builder) {
    
            return builder.routes()
                    .route("ms1", r -> r.path("/ms1/**")
                            .uri("http://localhost:8081"))
                    .route("ms2", r -> r.path("/ms2/**")
                            .uri("http://localhost:8082"))
                    .build();
        }
    }

    그리고 @Configuration 어노테이션을 통해서 라우팅을 빈으로 등록해주면 위와 같이 라우팅이 동작한다.

    '스프링 > 스프링 클라우드 MSA' 카테고리의 다른 글

    SCG 라우팅 추가와 삭제  (0) 2024.08.05
    SCG - Eureka 연동 및 로드밸런싱  (0) 2024.08.05
    Eureka Client 등록 설정  (0) 2024.08.05
    Eureka 서버 구축  (0) 2024.08.05
    Config 클라이언트 구축  (0) 2024.08.04
Designed by Tistory.