Backend 개발자/Springboot

Spring Cloud Gateway 언제쓰는거지?!

by 앵과장 2024. 6. 3. 09:02
반응형
Gateway는 언제쓰는거지?!



- client에 요청을 필터링 해야되는경우
- client 비정상적 요청 header, cookie 정보들을 위변조를 필터링 해야되는경우
- client요청을 public망에서 private망에 있는 서버에 정보를 전달받고 응답해야하는경우
- 인증 인가를 처리하는경우
- Rest Api Route white list 관리
- Rest Api Header 정보를 데코레이터 하는경우
- Rest Api URI Path 유추안되도록 하는작업
- SSR 랜더링 작업
- circuit breakers(resisence4j) 처리

위에서 언급한 내용은 실제 gateway팀에서 진행하는 일이며 추가적으로 더많은 경우를 처리 하는중

더 자세한 내용들을 파악하려면
Spring Cloud Gateway에서 제공하는 공식문서에 기능들을 분석하면서 내가 원하는 기능을 꼭 Gateway를 사용해서 처리해야하는지 또는 이런용도를 어떤 오픈라이브러리를 이용할수 있는지 파악하는것이 중요 합니다

Spring Cloud Gateway 4.1.3 한글번역본

boilerplate-gateway/SPRING_CLOUD_GATEWAY.md at main · lswteen/boilerplate-gateway

gateway 기본 구조 작업. Contribute to lswteen/boilerplate-gateway development by creating an account on GitHub.

github.com

Spring Cloud Gateway 이해도 높이기

프로세스 흐름을 의식에 흐름으로 정리해보면

Spring Cloud Gateway Setting


Spring Cloud Gateway 설정
Application.yaml 또는 Java Code Level로
Handler Mapping, Web Handler, Spring Cloud Cloud 에서 제공 하는 Filter 또는 Custom Filter를 미리 적용


1. Client Request

2. 요청에 대한 domain, ip, path, method 에 해당하는 Route 에 부합하는 정보가 handler mapping 처리 이후 Web Handler로 exchange됩니다

3. 전달받은 Request(클라이언트에서 전달받은 Web Request data)를 미리 적용한 pre Filter 를 순차적으로 처리하고 proxy 대상이되는 서비스로 요청 합니다

4. 요청받은 proxy service response data를 post filter 로 처리하고 역순으로 exchange 합니다

5. Gateway에서 정책으로 정의한 응답을 Client는 확인할수 있습니다


실무에서 사용되는 Gateway구조

Gateway를 구성하고 사용할때 환경에 따라 다를수 있지만 저희팀은 몇가지 공통적인 요소를 적용하고 있습니다

- Spring Cloud Config에 Route 설정 및 Server에 필요한 정보들을 Profile 구성별로 관리하고 사용합니다
Config Server는 yaml파일들을 관리하며 정적, 동적 properties 를 여러 서버들에 전파하고 적용하게 됩니다
- Spring Cloud Eureka를 설정하여 각서버들을 디스커버리 하는 역활 하게 됩니다
- 각종 Properties 정보들중 보안에 취약한정보를 암복화하하여 관리합니다 Aws에서 제공하는 암복호화하는 플러그인을 사용하거나 직접 양방향 또는 단반향 암호화 형태를 사용하게 됩니다
- 서버에 목적이나 용도 정책들을 기반으로 Public, Private 네트워크망을 구성하고 목적에 맞는 네트워크를 분리하여 관리하게 됩니다
- gateway 특성으로 Ddos 공격또는 여러 보안 취약한 요청 사항들로 인해서 domain, host name들을 유추가 잘되지 않는 도메인들로 구성을 고려해볼수 있습니다


Gateway 주로 처리되는 일들은?


API

- 내부망(private)에 있는 server에 proxy형태로 api처리하는 역활을 하게됩니다
IP, Path등에 대한 화이트리스트 정책, Header에 들어있는 불필요한 위변조 가능한 Cookie, header정보들을 클린하게 정해진 정책으로 처리하게 됩니다
- 요청에대한 트래픽, 거버넌스, 인증, 로그 등과 같은 공통적인 데코레이터 역활을 처리하게 됩니다

SSR

- 서버사이드 랜더링은 클라이언트 요청중 Context-type이 html &text 등과 같은 처리를 하게됩니다
- Cookie, header, cache 처리
- 사용되는 image, Js, ico등과같은 정적 파일에 대한 proxy 처리


게이트웨 개발팀으로 자주 접해본적은 없지만 가뭄에 콩나듯 해봤던 업무를 캐쉬처럼 휘발성으로 하지 않고 지속가능한 형태로 하다보니 생각보다 재미있도 힘들다..

앞으로 gateway에서 진행되는 내용을 업데이트하고 관리하려고 하는 Repository 공유 합니다

https://github.com/lswteen/boilerplate-gateway

GitHub - lswteen/boilerplate-gateway: gateway 기본 구조 작업

gateway 기본 구조 작업. Contribute to lswteen/boilerplate-gateway development by creating an account on GitHub.

github.com