API Gateway Service 실습(2) - Filter

배지원·2024년 7월 16일

MSA

목록 보기
7/12

Spring Cloud Gateway Filter를 통한 제어

  • 클라이언트에게 서비스를 제공해주기 위해 이전에 구현했던 게이트웨이를 통해 각각 URL 주소에 맞는 서버에 연결시켜줄수 있다.
  • 하지만 그 전에 Spring Cloud Gateway를 통해 좀 더 세부적으로 Filter를 진행할 수 있는데 그 과정에는 .yml 파일에 작성하는 법과 Config 파일에 Java 코드로 작성하는 방법이 있다.

동작과정

1. Java Code를 통한 제어

(1) Main Gataway Project

[1] application.yml

server:
  port: 8000

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

spring:
  application:
    name: apigateway-service
#  GateWay Filter를 통해 별도로 구성함
#  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/**
  • 기존에 yml에서 설정했던 gateway 경로를 지워줌

[2] FilterConfig

@Configuration
public class FilterConfig {

    // 사용자가 요청하면 게이트웨이 Filter를 거쳐 해당 포트 서버로 이동시킴 이 과정에서 request, responseHeader에 값 추가시켜서 보내줌
    @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.path("/first-service/**")     // first-service로 시작하는 주소 입력시
                        .filters(f -> f.addRequestHeader("first-request","first-request-header")    // 위에서 입력받은 path에 requestHeader에 해당 내용 추가시킴
                                .addResponseHeader("first-response","first-response-header"))       // 위에서 입력받은 path에 responseHeader에 해당 내용 추가시킴
                        .uri("http://localhost:8081"))          // localhost:8081 포트로 이동시킴
                .route(r -> r.path("/second-service/**")
                        .filters(f -> f.addRequestHeader("second-request","second-request-header")
                                .addResponseHeader("second-response","second-response-header"))
                        .uri("http://localhost:8082"))
                .build();
    }
}
  • FilterConfig 파일을 생성한 후 gateway 경로와 Filter를 추가해 줍니다.
  • .path : 입력되어 들어오는 주소
  • .filters : RequestHeader, ResponseHeader를 추가해줄 수 있고 좀 더 세부적인 주소 매핑 가능
  • .uri : 특정 서버로 이동시키기 위한 주소

(2) Service Project

[1] FirstServiceController

@RestController
@RequestMapping("/first-service")
@Slf4j
public class FirstServiceController {

    @GetMapping("/message")
    public String message(@RequestHeader("first-request") String header){
        log.info(header);
        return "Hello World in First Service";
    }
}
  • 이전에 Filter를 통해 Request,Response Header에 값이 잘 담겨있는지 확인하기 위해 @RequestHeader를 통해 해당 Header 이름을 넣어 값을 반환 시켜 줍니다.

  • 또한 ResponseHeader에도 값이 잘 들어 갔는지 확인이 가능합니다.



Reference

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

profile
Web Developer

0개의 댓글