본문 바로가기
개발관련

Gateway 에 관하여 내가 프로젝트를 진행하면서 해야할것

by 수바니 2024. 9. 13.

나는 팀프로젝트에서 auth, user, gateway파트를 맡았다.

gateway를 빠르게 시작했어야했는데 auth에서 인증/인가 필터를 모두 구현하고, user파트까지 구현한 이후 gateway를 구현하게되었다.

 

**강의를 들으며 정리한 내용**

Spring Cloud Gateway필터링

필터의 종류
Global Filter : 모든 요청에 대해 작동하는 필터
Gateway Filter : 특정 라우트에만 적용되는 필터

필터 구현
필터를 구현하려면 GlobalFilter 또는 GatewayFilter 인터페이스를 구현하가고, filter 메서드를 오버라이드 해야합니다.

필터 주요 객체
Mono
리액티브 프로그래밍에서 0또는 1개의 데이터를 비동기적으로 처리합니다.
Mono<void>는 아무 데이터도 반환하지 않음
순서가 비순차적이다. --> 비동기

ServerWebExchange
HTTP요청과 응답을 캡슐화한 객체입니다.
exchange.getRequeset() 로 HTTP 요청을 가져옵니다.
exchange.getResponse()로 HTTP 응답을 가져옵니다.

GatewayFilterChain
GatewayFilterChain는 여러필터를 체인처럼 연결합니다.
chain.filter(exchange)는 다음 필터로 요청을 전달합니다.

필터 시점별 종류
Pre필터
요청이 처리되기 전에 실행
서비스에서 데이터를 가지고 오기전에 실행된다.
따라서 Pre필터에서는 요청을 가로채고 필요한 작업을 수행한다음, 체인의 다음 필터를 요청을 전달
then메서드 사용 X
pre필터에서는 필터의 순서를 지정한다. 


Post필터
서비스쪽에서 데이터를 가져온 다음에 유저에게 데이터를 전달하기 바로직전에 실행되는 필터
요청이 처리된후, 응답이 반환되기 전에 실행됩니다.
Post필터에서는 체인의 다음 필터가 완료된 후에 실행되어야 하는 추가적인 작업을 수행해야 합니다. 따라서 chain.filter(exchange)를 호출하여 다음 필터를 실행한후, then 메서드를 사용하여 응답이 완료된 후에 실행할 작업을 정의합니다.


필터 작성 팁!
응답로깅을 지우고 내가 원하는 응답 로깅을 작성해서 필터를 작성한다.

Spring Cloud와의 통합
유레카를 통해 동적으로 서비스 인스턴스를 조회하여 로드밸런싱과 라우팅을 수행할 수 있습니다.

인증 처리와 GatewayFilter

JwtAuthorizationFilter와 같은 필터도 GatewayFilter로 구현할 수 있습니다.

이 경우, JWT가 유효한지 확인하고, 유효하지 않다면 요청을 차단하는 역할을 수행할 수 있습니다.

그러나 나는 JwtAuthorizationFilter 를 auth프로젝트폴더에 이미 구현을 해놓았기에, implements 는 사용 불가Feign Client로 불러오거나, Web Client로 불러와야한다.

 

독립적인 프로젝트 사이에서 코드를 공유하거나 로직을 가져오기

1. Feign Client를 사용하여 auth 서비스의 기능 호출.

2. WebClient나 RestTemplate 등을 사용해 REST API 호출로 통신.

 

 

**정리**

Spring Cloud Gateway에서 인증/인가를 포함해 기본적인 라우팅을 구성하고,

다른 서비스들과의 통신을 설정하기 위한 전체적인 구조입니다.

이 과정에서는 Gateway에서 인증/인가 필터를 설정하고, 각 서비스와의 라우팅을 관리하는 방법을 다룹니다.

 

Gateway 프로젝트에서 처리해야 할 것들

1. 기본 프로젝트 구조 설정

2. Feign Client 또는 WebClient를 통한 auth 서비스와의 통신

3. JWT 인증/인가 필터를 통한 요청 검증

4. application.yml을 통해 각 서비스의 라우팅 설정

5. 필터 및 라우팅 설정 클래스를 통한 추가 구성

 

 

Gateway 프로젝트에서 JWT 인증/인가 처리라우팅 설정하기

Feign Client 설정 : auth 서비스와 통신하여 JWT 검증.

JWT 인증 필터 : Gateway에서 요청을 처리하기 전에 JWT 검증.

Routing 설정 : application.yml 또는 Java Config를 통해 각 마이크로서비스로 요청을 전달.

Feign Client 활성화 Feign Client로 다른 서비스와의 통신을 관리.