시작이 반

[MSA] Spring Cloud ( Gateway Filter ) 본문

Programming/MSA

[MSA] Spring Cloud ( Gateway Filter )

G_Gi 2021. 8. 3. 19:07
SMALL

 

API gateway를 통하여 다른 서비스에 접속하였을때 자바코드와 yml을 이용하여 필터를 적용 할 수 있다.

 

(first-service, secon-service는 안만든 상태임 filter를 설명하기 위해 예시로 작성)

 

Java코드를 통하여 필터 적용

Configuration, Bean 어노테이션 작성(캡쳐할때 주석처리했는데 작성해야함)

프로젝트 밑에 config라는 폴더를 만들고 필터를 적용할 코드를 작성하기 위해 FilterConfig라는 class를 생성 하였고 Configuration 어노테이션을 등록해준다.

위 사진을 예로 든다면

route정보를 입력한다.

path 의 정보인 /first-service/** 라는 정보로 들어가게 된다면 uri인 localhost:8001의 주소가 실행된다는 뜻이다.

또한 localhost8001의 주소로 갈때 필터를 적용할 수 있는데 Request 헤더와 Response 헤더를 추가해준 예시이다.

자바 코드로 필터를 적용할 때는 이런 식으로 작성하면 된다.


 

같은 코드를 yml파일을 이용하여 작성해보자.

yml파일을 이용하여 필터 적용

predicate 조건절에서 first-serivce/** 로 사용자가 접근한다면 uri인 localhost:8001 의 주소로 가게되며 java 코드로 작성한 것과 같이 fileters옵션을 입력하여 Request 헤더와 Response 헤더를 추가해준 예시이다.


Filter는 용도에 맞게 Custom하여 사용할 수 있다.

 

yml에 등록하기 위한

 

Custom Filter를 하나 만들어보자.

커스텀 필터를 모아논 filter 폴터를 생성

CustomFilter class를 만든다.

spring cloud gateway는 netty라는 내장서버를 쓰고있는데 비동기 서버이다.

때문에 ServletRequest, ServletResponse를 사용하지 않고 ServerHttpRequest, ServerHttpResponse를 사용할 수 있다.

예제로 Pre filter에는 request id를 출력해 본다. 처리가 다 끝나면 Post filter를 적용 할 수 있다. response에는 statusCode를 출력하는 예시이다.

 

yml을 이용하여 filter를 등록한다.

first-service/** 의 모든 접속경로는 CustomFilter를 거친다.

 

Pre와 Post를 줄것인지 순위(Order)는 어떻게 지정할 것인지 Ordered를 통해 설정할 수 있다.

 

또한 yml에서 변수의 값을 설정할 수 있다.

CustomFilter class의 내장 class인 Config class에 변수를(preLogger, postLogger) 설정 변수를 생성한다.

 

Data어노테이션을 이용하면 config 변수의 타입에 맞춰서 메소드가 알아서 만들어진다.

- boolean preLogger -> config.isPreLogger()

- boolean postLogger -> config.isPostLogger()

- String baseMessage -> config.getBaseMessage()

 

yml파일에서 args옵션을 통해 해당 값이 무엇인지 설정할 수 있다.

 


 

이번엔 모든 서비스에 적용하는 Global Filter를 만들어보자.

Global Filter또한 Custom Filter와 같은데 yml의 어디에 적용시키느냐에 따라서 Global Filter가 될 수있다.

(Custom Filter와 유사하게 만들었음)

 

yml을 이용하여 filter를 등록한다.

모든 서비스에 대하여 name : GlobalFilter가 적용된다.

 

 

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

 

 

 

 

LIST