본문 바로가기
Programming/Java, Spring

[Spring Cloud] API Gateway Routing 시 마이크로서비스 식별 주소값을 제외하고 실용적인 uri를 전달하는 방식

by Renechoi 2023. 6. 1.

 

 

기존 

 

 

 

 

변경 

 

 

 

filters의 RewritePath를 통해서 "/user-service/"를 생략하도록 변경한다. 

 

기존의 방식으로는 컨트롤러에서 prefix를 다음과 같이 지정해주어야 했다. 

 

 

 

예를 들어 포트 번호가 60000이라 한다면 

http://127.0.0.1:6000/user-service/health_check 

처럼 마이크로 서비스를 인식해주는 식별자로서 "user-service"라는 prefix가 필요했다. 

 

그런데 마이크로서비스 입장에서는 "user-service"라는 prefix는 redundant하다. 

서두의 주소를 나타내는 uri에서 이미 해당하는 마이크로서비스의 주소를 나타내고 있기 때문에

http://127.0.0.1/60000/login 만으로도 충분한 의미전달이 되기 때문이다. 

 

그런데 기존의 방식으로 gateway에서 호출시엔

http://127.0.0.1/60000/user-service/ -> 이후 추가 uri 탐색

으로 진행이 되기 때문에

user-service가 필요했었는데

 

filter의 rewrite 문법을 통해 이를 지워주었고, 결과적으로 uri의 불필요한 중복을 제거할 수 있다. 

 

 

 


spring:
  application:
    name: apigateway-service
  cloud:
    gateway:
      default-filters:
        - name: GlobalFilter
          args:
            baseMessage: Spring Cloud Gateway Global Filter
            preLogger: true
            postLogger: true
      routes:
        - id: order-service
          uri: lb://ORDER-SERVICE
          predicates:
            - Path=/order-service/**
        - id: catalog-service
          uri: lb://CATALOG-SERVICE
          predicates:
            - Path=/catalog-service/**
#        - id: user-service
#          uri: lb://USER-SERVICE
#          predicates:
#            - Path=/user-service/**
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/user-service/login
            - Method=POST
          filters:
            - RemoveRequestHeader=Cookie
            - RewritePath=/user-service/(?<segment>.*), /$\{segment}
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/user-service/users
            - Method=POST
          filters:
            - RemoveRequestHeader=Cookie
            - RewritePath=/user-service/(?<segment>.*), /$\{segment}
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/user-service/actuator/**
            - Method=GET,POST
          filters:
            - RemoveRequestHeader=Cookie
            - RewritePath=/user-service/(?<segment>.*), /$\{segment}
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/user-service/**
            - Method=GET
          filters:
            - RemoveRequestHeader=Cookie
            - RewritePath=/user-service/(?<segment>.*), /$\{segment}

 

 

user-service를 제외하고 uri입력시 정상적으로 호출되는 것을 확인할 수 있다.

반응형