Spring Cloud Gateway Filter 설정 (java, yml)

최준호·2022년 2월 19일
0

Microservice Architecture

목록 보기
5/32
post-thumbnail

🔨yml이 아닌 java code로 설정하기

기존의 작성한 yml 설정을 모두 주석처리를 한다.

그리고 config 패키지를 만들어 FilterConfig java 파일을 생성한 뒤

@Configuration  //해당 어노테이션을 통해 spring이 시작될때 context에 자동으로 등록되도록 한다.
public class FilterConfig {
    @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder builder){
        return builder.routes()
                .route(r-> r.path("/first-service/**")
                        .filters(f-> f.addRequestHeader("first-request","first-request-header")
                                    .addResponseHeader("first-response","first-response-header"))
                        .uri("http://127.0.0.1:8001"))  //기존 yml에서 1번 서비스 설정과 동일
                .route(r-> r.path("/second-service/**")
                        .filters(f-> f.addRequestHeader("second-request","second-request-header")
                                    .addResponseHeader("second-response","second-response-header"))
                        .uri("http://127.0.0.1:8002"))  //기존 yml에서 2번 서비스 설정과 동일
                .build();
    }
}

다음과 같이 설정해주면 기존의 yml 설정과 동일한 설정에 filter를 주어 header에 해당 값들을 넣어줄 수 있다.

service 1,2 수정

@GetMapping("/message")
public String message(@RequestHeader("first-request") String header){
    log.info("header = {}",header);
    return "header = "+header;
}
@GetMapping("/message")
public String message(@RequestHeader("second-request") String header){
    log.info("header = {}",header);
    return "header = "+header;
}

기존의 코드에 다음과 같이 header값을 출력해보기 위해 log과 반환하는 문자열에 추가해주자.

두개의 서비스를 요청했을 때 log에 각 헤더의 정보가 전달된것을 확인할 수 있다.

각 client쪽의 response의 header에도 우리가 작성한 header 값이 들어간 것도 확인할 수 있다.

🔨yml로 설정하기

기존의 FilterConfig파일은 삭제하거나 어노테이션만 주석 처리 한 뒤 다시 yml로 똑같은 작업을 실행하도록 처리해보자.

server:
  port: 8000

eureka: #eureka 세팅은 현재 사용 안함
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

spring:
  application:  #gateway service 이름름    name: apigateway-service
  cloud:
    gateway:  #gateway 설정
      routes:
        - id: first-service #gateway로 연결될 서비스 이름
          uri: http://127.0.0.1:8001/ #gateway로 연결될 서비스 uri
          predicates: #gateway로 연결될 서비스의 url 매핑
            - Path=/first-service/**
          filters:
            - AddRequestHeader=first-request, first-request-header2
            - AddResponseHeader=first-response, first-response-header2
        - id: second-service
          uri: http://127.0.0.1:8002/
          predicates:
            - Path=/second-service/**
          filters:
            - AddRequestHeader=second-request, second-request-header2
            - AddResponseHeader=second-response, second-response-header2

서버 실행을 해보자

포스트맨을 통해서 요청하면 우리가 filters에 설정한 내용대로 출력되는 것을 확인할 수 있다.

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글