공부내용 정리/스프링

[SpringBoot, MSA #2] Spring Cloud Gateway, 스프링 클라우드 게이트웨이 개념

minsoku 2024. 12. 16. 17:58

먼저 API Gateway 를 알고나서 스프링 클라우드 게이트웨이를 알면 더 쉽게 이해가 갈 것 같습니다.

그림을 통해서 대략적으로 크게 보면 스프링 클라우드 게이트웨이는 이름처럼 GATEWAY 역할을 합니다.

요청이 들어왔을 때 서비스 목록을 조회하고, 해당 서비스로 Route 시켜줄 수 도 있고, Config(설정)를 조회하거나 반영하기도 하고, 요청에 장애가 생겼을 땐 Fallback Server로 요청을 돌려서 해결할 수도 있어요!

예를 들면 민속놀이의 프로토스 게이트웨이에서 질럿과 드라군, 다크템플러들을 하나에서 뽑을 수 있잖아요?

만약 게이트웨이라는 개념이 없었다면 질럿을 뽑는 요청, 드라군을 뽑는 요청, 다크템플러를 뽑는 요청을 

각각 질럿게이트웨이로 요청하고, 드라군게이트웨이에 요청하고, 다크템플러게이트웨이로 요청을 해야되는 걸 하나에서 모두 처리하는 거죠.

그리고 이렇게 서비스들을 세부적으로 나눌 수 있기 때문에 MSA에서 효과적으로 관리하고 확장 가능한 서비스를 제공하는 역할을 합니다.

이 그림을 몇번 보시면 눈에 익으면서 "아~" 하고 감이 올거에요!!

그림에 나오는 Eureka Server, Eureka Client 같은 내용도 곧 알게 되실거에요 지금은 Gateway가 하는 일에 집중!

Gateway는 한마디로 모든 요청을 한 곳에서 처리하는 관문 !

 

그럼 왜 API Gateway 를 쓸까요?

1. 모든 서비스를 gateway를 통해 호출할때 서비스 목록을 조회하여 자동으로 보내준다.

2. 모든 요청을 중앙에서 처리하기 때문에 인증/인가, 라우팅, 로깅, 모디터링, 로드밸런싱을 할 수 있다.

 

그럼 API Gateway의 단점은?

1. 모든 요청을 처리하기 때문에 병목현상이 발생하여 응답시간이 늘어날 수 있음.

2. API Gateway 에서 장애 발생시 연결된 모든 서비스로 처리를 요청 못할 수 있음.

 

단점 해결방법은?

위의 단점들을 해결하는 방법으로 요청에 대한 장애시 조건에 따라 Fallback Server로 돌려서 요청하는 Circuit Breaker나,요청이 많을 때 요청을 적절하게 분배해주는 로드밸런싱 설정이 있음.

 

그럼 Spring Cloud Gateway 란? (SCG)

MSA 환경에서 사용되는 API Gateway중 하나로, SCG의 역할은 API 라우팅 및 보안, 모니터링, 메트릭 등의 기능을 간단하고 효과적인 방법으로 제공해줌.

Spring Cloud Gateway의 구성은 크게 Route, Predicate, Filter 3가지로 구성.

위의 그림으로 보면, 클라이언트에서 들어온 요청은 Gateway Handler Mapping 을 통해 요청 경로와 일치 여부를 판단하고, Gateway Web Handler 에서 요청과 관련된 필터체인을 통해 요청이 전송되게 된다. 이후 적용되는 Filter를 통해 요청 또는 응답에 필요한 전처리, 후처리를 할 수 있고, Proxy Filter는 프록시 요청이 처리될때 수행된다.

Route

RouteAPI Gateway에서 가장 기본이 되는 요소로 요청할 서비스의 고유한 값인 id, 요청할 uri, Predicate, Filter로 구성되어 있다. 요청된 uri조건이 predicate와 일치하는지 확인 후, 일치하는 경우 해당 uri경로로 요청을 매칭시켜준다.

Predicate

API Gateway 로 들어온 요청이 주어진 조건을 만족하는지 확인하는 구성요소, 하나이상의 조건을 정의할 수 있으며, 만약 Predicate조건에 맞지 않는 경우 HTTP 404 Not Found 응답을 반환한다.

Filter

API Gateway 로 들어오는 요청에 대해 Filter를 적용하여 선처리, 후처리를 할수있게 해주는 구성요소, 클라이언트에서 들어온 요청은 Gateway Handler Mapping 을 통해 요청 경로와 일치 여부를 판단하고, Gateway Web Handler 에서 요청과 관련된 필터체인을 통해 요청이 전송되게 된다.

이후 적용되는 Filter를 통해 요청 또는 응답에 필요한 전처리, 후처리를 할 수 있고, Proxy Filter는 프록시 요청이 처리될때 수행된다.

 

https://github.com/codky/apigateway-service-practice

 

GitHub - codky/apigateway-service-practice: API Gateway Project

API Gateway Project. Contribute to codky/apigateway-service-practice development by creating an account on GitHub.

github.com

 

끝.