Software Architecture/MSA

[MSA] Spring Cloud Gateway Filter (API Gateway)

bu119 2024. 3. 21. 18:00
728x90
반응형

Spring Cloud Gateway를 사용한 요청/응답 프로세스

Spring Cloud Gateway는 다음과 같이 마이크로서비스들과 클라이언트단의 라우팅 역할을 해준다.

  1. 클라이언트는 원하는 서비스를 호출하기 위해 Spring Cloud gateway로 요청을 보낸다.
  2. Spring Cloud gateway에서는 어떤 서비스로 가야 하는지 분기처리를 해준다.
  3. 이때 Filter 기능을 통해 조건을 분기한다.

점선 네모 박스는 Spring Cloud gateway안에서 일어나는 일을 확대한 것이다.

 

 

Spring Cloud Gateway Filter 란?

Spring Cloud Gateway의 필터는 클라이언트의 요청을 가로채고 수정하거나, 다양한 작업을 수행하여 마이크로서비스 아키텍처에서의 라우팅, 보안, 모니터링 등을 처리한다.

 

즉, Http 요청, 응답에 대한 내용을 추가/수정할 수 있도록 한다.

  • Pre Filter: 요청 전 처리하는 필터, 사전에 정의
  • Post Filter: 요청 후 처리하는 필터,  사후에 정의,

따라서, API Gateway가 담당하고 있는 라우팅이라는 기능뿐만 아니라 부가기능을 추가할 수 있다.

 

Spring Cloud Gateway 동작 과정

클라이언트가 Spring Cloud Gateway에 요청을 하게 되면 Spring Cloud gateway 내부의 Predicate에서 어떤 서비스로 갈지 판단 후 요청을 전달한다. 

  1. Spring Cloud gateway에 요청이 들어오면 Gateway Handler Mapping을 통해 클라이언트로부터 어떤 요청이 들어왔는지 정보를 받고 있다. 
  2. 그 후사전 Filter 사후 Filter를 통해 요청정보를 구성할 수 있습니다.
    • Pre Filter :Http 요청에 대해 과정을 수행한다.
    • Post Filter : Http 응답에 대해 과정을 수행한다.

 

Spring Cloud Gateway Filter의 동작 순서

클라이언트가 Spring Cloud Gateway에 요청을 하면, Spring Cloud Gateway Filter는 아래의 순서로 동작한다.

  1. Client Request
  2. Gateway Handler (진입점)
  3. predicate 영역에서의 분기
  4. pre-filter 처리
  5. 서비스에서의 요청 처리
  6. post-filter
  7. Gateway Handler
  8. Client

 

1. Gateway Handler Mapping

클라이언트가 요청이 Gateway에 도달하면 Handler Mapping을 통해 적절한 Route로 매핑된다.

  • Gateway Handler Mapping은 들어오는 요청이 어떤 Route에 매핑되는지를 결정합니다.
  • 이를 통해 클라이언트가 요청한 URI, 헤더, HTTP 메서드 등과 일치하는 Route를 찾아냅니다.
  • Route에는 실제로 요청을 처리할 서비스의 위치 및 추가 구성이 포함될 수 있습니다.

 

2. Predicate

요청에 대한 사전 조건을 분기하여 적절한 Filter를 거쳐 서비스로 라우팅 되도록 한다.

  • Predicate은 Handler Mapping을 통해 선택된 Route에 대한 추가적인 요청 조건을 검사합니다.
  • 이 조건들은 주어진 요청이 특정한 Route로 전달되어야 하는지를 결정합니다.
  • 예를 들어, 특정 URI 패턴, 특정 헤더의 존재 여부, 혹은 요청이 특정한 호스트로부터 오는지를 확인할 수 있습니다.

 

3. Pre Filter

HTTP 요청에 대한 사전 처리를 담당한다.

  • Pre Filter는 실제 요청이 핸들러로 전달되기 전에 실행됩니다. 이 단계에서는 요청에 대한 사전 처리를 수행합니다.
  • 주로 인증, 권한 부여, 요청 수정 등의 작업을 수행할 수 있습니다.
  • 예를 들어, JWT 토큰을 확인하고, 요청에 특정 헤더를 추가하거나 수정할 수 있습니다.

 

5. Post Filter

HTTP 응답에 대한 후속 처리를 담당한다.

  • Post Filter는 핸들러에서 응답이 생성되고 클라이언트로 반환되기 전에 실행됩니다.
  • 이 단계에서는 응답에 대한 후속 처리를 수행합니다.
  • 주로 응답에 대한 로깅, 헤더 수정, 캐싱 등의 작업을 수행할 수 있습니다.
  • 예를 들어, 응답에 특정 헤더를 추가하거나 수정하고, 응답을 로깅하여 추적 및 모니터링에 활용할 수 있습니다.

 

Spring Cloud Gateway Filter 적용 방법

Filter를 정의하는 방법은 크게 2가지가 있다.

  1. yml 또는 properties 파일에 정의
  2. Java 코드로 정의

 

참고자료

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/

https://velog.io/@sungjin0757/Spring-Cloud%EB%A1%9C-%EA%B0%9C%EB%B0%9C%ED%95%98%EB%8A%94-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-API-GATEWAYFilter

https://velog.io/@ychxexn/Spring-Cloud-Gateway-Filter-%EC%A0%81%EC%9A%A9

https://yarisong.tistory.com/m/46

https://velog.io/@korea3611/Spring-Boot-Spring-Cloud-Gateway%EC%97%90%EC%84%9C-filter-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-MSA3

https://spring.io/blog/2022/08/26/creating-a-custom-spring-cloud-gateway-filter

728x90
반응형